uisuite 1.0.2 → 1.0.3

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.
package/README.md CHANGED
@@ -85,7 +85,7 @@ Versatile button component with multiple variants and sizes.
85
85
 
86
86
  ## 📖 Documentation
87
87
 
88
- For detailed documentation and examples, visit [https://github.com/ksindhi/uisuite](https://github.com/ksindhi/uisuite)
88
+ For detailed documentation and examples, visit [https://uisuite.dev](https://uisuite.dev)
89
89
 
90
90
  ## 🤝 Contributing
91
91
 
@@ -2,7 +2,7 @@ import { Component, Input } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from "@angular/core";
4
4
  /**
5
- * Button Component - Based on shadcn/ui
5
+ * Button Component
6
6
  *
7
7
  * A versatile button component with multiple variants and sizes.
8
8
  *
@@ -102,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
102
102
  }], color: [{
103
103
  type: Input
104
104
  }] } });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Vpc3VpdGUvc3JjL2xpYi9idXR0b24vYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBTS9DOzs7Ozs7Ozs7OztHQVdHO0FBaUJILE1BQU0sT0FBTyxlQUFlO0lBQzFCOzs7Ozs7OztPQVFHO0lBQ00sT0FBTyxHQUFrQixTQUFTLENBQUM7SUFFNUM7Ozs7Ozs7O09BUUc7SUFDTSxJQUFJLEdBQWUsU0FBUyxDQUFDO0lBRXRDOztPQUVHO0lBQ00sSUFBSSxHQUFrQyxRQUFRLENBQUM7SUFFeEQ7O09BRUc7SUFDTSxRQUFRLEdBQVksS0FBSyxDQUFDO0lBR25DOztPQUVHO0lBQ00sU0FBUyxDQUFVO0lBRTVCOzs7Ozs7Ozs7T0FTRztJQUNNLEtBQUssR0FBZ0IsU0FBUyxDQUFDO0lBRXhDLElBQUksYUFBYTtRQUNmLE9BQU87WUFDTCxVQUFVO1lBQ1YsYUFBYSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzNCLGFBQWEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN4QixtQkFBbUIsSUFBSSxDQUFDLEtBQUssRUFBRTtTQUNoQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQzt3R0ExRFUsZUFBZTs0RkFBZixlQUFlLDZMQVpoQjs7Ozs7Ozs7O0dBU1Qsa3FSQVZTLFlBQVk7OzRGQWFYLGVBQWU7a0JBaEIzQixTQUFTOytCQUNFLFNBQVMsY0FDUCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7Ozs7O0dBU1Q7OEJBYVEsT0FBTztzQkFBZixLQUFLO2dCQVdHLElBQUk7c0JBQVosS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQVlHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgdHlwZSBCdXR0b25WYXJpYW50ID0gJ2RlZmF1bHQnIHwgJ291dGxpbmUnIHwgJ2dob3N0JyB8ICdkZXN0cnVjdGl2ZScgfCAnc2Vjb25kYXJ5JyB8ICdsaW5rJztcbmV4cG9ydCB0eXBlIEJ1dHRvblNpemUgPSAnZGVmYXVsdCcgfCAnc20nIHwgJ2xnJyB8ICdpY29uJyB8ICdpY29uLXNtJyB8ICdpY29uLWxnJztcbmV4cG9ydCB0eXBlIEJ1dHRvbkNvbG9yID0gJ3ByaW1hcnknIHwgJ3N1Y2Nlc3MnIHwgJ3dhcm5pbmcnIHwgJ2RhbmdlcicgfCAnYWNjZW50JyB8ICd3aGl0ZScgfCAnaW5mbyc7XG5cbi8qKlxuICogQnV0dG9uIENvbXBvbmVudCAtIEJhc2VkIG9uIHNoYWRjbi91aVxuICogXG4gKiBBIHZlcnNhdGlsZSBidXR0b24gY29tcG9uZW50IHdpdGggbXVsdGlwbGUgdmFyaWFudHMgYW5kIHNpemVzLlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHVCdXR0b24+Q2xpY2sgbWU8L3VCdXR0b24+XG4gKiA8dUJ1dHRvbiB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9XCJzbVwiPlNtYWxsIE91dGxpbmU8L3VCdXR0b24+XG4gKiA8dUJ1dHRvbiB2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIj5EZWxldGU8L3VCdXR0b24+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndUJ1dHRvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b25cbiAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc2VzXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9idXR0b24+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2J1dHRvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBCdXR0b24gdmFyaWFudFxuICAgKiAtIGRlZmF1bHQ6IFByaW1hcnkgYnV0dG9uIHN0eWxlXG4gICAqIC0gb3V0bGluZTogT3V0bGluZWQgYnV0dG9uXG4gICAqIC0gZ2hvc3Q6IE1pbmltYWwgYnV0dG9uIHdpdGggbm8gYm9yZGVyXG4gICAqIC0gZGVzdHJ1Y3RpdmU6IEZvciBkZXN0cnVjdGl2ZSBhY3Rpb25zIChkZWxldGUsIHJlbW92ZSwgZXRjLilcbiAgICogLSBzZWNvbmRhcnk6IFNlY29uZGFyeSBhY3Rpb24gYnV0dG9uXG4gICAqIC0gbGluazogUmVuZGVycyBhcyBhIGxpbmstc3R5bGVkIGJ1dHRvblxuICAgKi9cbiAgQElucHV0KCkgdmFyaWFudDogQnV0dG9uVmFyaWFudCA9ICdkZWZhdWx0JztcblxuICAvKipcbiAgICogQnV0dG9uIHNpemVcbiAgICogLSBkZWZhdWx0OiBTdGFuZGFyZCBidXR0b24gc2l6ZVxuICAgKiAtIHNtOiBTbWFsbCBidXR0b25cbiAgICogLSBsZzogTGFyZ2UgYnV0dG9uXG4gICAqIC0gaWNvbjogU3F1YXJlIGljb24gYnV0dG9uIChkZWZhdWx0IHNpemUpXG4gICAqIC0gaWNvbi1zbTogU21hbGwgc3F1YXJlIGljb24gYnV0dG9uXG4gICAqIC0gaWNvbi1sZzogTGFyZ2Ugc3F1YXJlIGljb24gYnV0dG9uXG4gICAqL1xuICBASW5wdXQoKSBzaXplOiBCdXR0b25TaXplID0gJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBIVE1MIGJ1dHRvbiB0eXBlXG4gICAqL1xuICBASW5wdXQoKSB0eXBlOiAnYnV0dG9uJyB8ICdzdWJtaXQnIHwgJ3Jlc2V0JyA9ICdidXR0b24nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBidXR0b24gaXMgZGlzYWJsZWRcbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cblxuICAvKipcbiAgICogQVJJQSBsYWJlbCBmb3IgYWNjZXNzaWJpbGl0eVxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCdXR0b24gY29sb3JcbiAgICogLSBwcmltYXJ5OiBQcmltYXJ5IGJyYW5kIGNvbG9yIChkZWZhdWx0KVxuICAgKiAtIHN1Y2Nlc3M6IEdyZWVuIGNvbG9yIGZvciBzdWNjZXNzIGFjdGlvbnNcbiAgICogLSB3YXJuaW5nOiBZZWxsb3cvYW1iZXIgY29sb3IgZm9yIHdhcm5pbmdzXG4gICAqIC0gZGFuZ2VyOiBSZWQgY29sb3IgZm9yIGRhbmdlcm91cyBhY3Rpb25zXG4gICAqIC0gYWNjZW50OiBBY2NlbnQgY29sb3IgZm9yIGhpZ2hsaWdodHNcbiAgICogLSB3aGl0ZTogV2hpdGUgY29sb3IgZm9yIGRhcmsgYmFja2dyb3VuZHNcbiAgICogLSBpbmZvOiBCbHVlIGNvbG9yIGZvciBpbmZvcm1hdGlvbmFsIGFjdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIGNvbG9yOiBCdXR0b25Db2xvciA9ICdwcmltYXJ5JztcblxuICBnZXQgYnV0dG9uQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICAndS1idXR0b24nLFxuICAgICAgYHUtYnV0dG9uLS0ke3RoaXMudmFyaWFudH1gLFxuICAgICAgYHUtYnV0dG9uLS0ke3RoaXMuc2l6ZX1gLFxuICAgICAgYHUtYnV0dG9uLS1jb2xvci0ke3RoaXMuY29sb3J9YFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgfVxufVxuIl19
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Vpc3VpdGUvc3JjL2xpYi9idXR0b24vYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBTS9DOzs7Ozs7Ozs7OztHQVdHO0FBaUJILE1BQU0sT0FBTyxlQUFlO0lBQzFCOzs7Ozs7OztPQVFHO0lBQ00sT0FBTyxHQUFrQixTQUFTLENBQUM7SUFFNUM7Ozs7Ozs7O09BUUc7SUFDTSxJQUFJLEdBQWUsU0FBUyxDQUFDO0lBRXRDOztPQUVHO0lBQ00sSUFBSSxHQUFrQyxRQUFRLENBQUM7SUFFeEQ7O09BRUc7SUFDTSxRQUFRLEdBQVksS0FBSyxDQUFDO0lBR25DOztPQUVHO0lBQ00sU0FBUyxDQUFVO0lBRTVCOzs7Ozs7Ozs7T0FTRztJQUNNLEtBQUssR0FBZ0IsU0FBUyxDQUFDO0lBRXhDLElBQUksYUFBYTtRQUNmLE9BQU87WUFDTCxVQUFVO1lBQ1YsYUFBYSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzNCLGFBQWEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN4QixtQkFBbUIsSUFBSSxDQUFDLEtBQUssRUFBRTtTQUNoQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQzt3R0ExRFUsZUFBZTs0RkFBZixlQUFlLDZMQVpoQjs7Ozs7Ozs7O0dBU1Qsa3FSQVZTLFlBQVk7OzRGQWFYLGVBQWU7a0JBaEIzQixTQUFTOytCQUNFLFNBQVMsY0FDUCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7Ozs7O0dBU1Q7OEJBYVEsT0FBTztzQkFBZixLQUFLO2dCQVdHLElBQUk7c0JBQVosS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQVlHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgdHlwZSBCdXR0b25WYXJpYW50ID0gJ2RlZmF1bHQnIHwgJ291dGxpbmUnIHwgJ2dob3N0JyB8ICdkZXN0cnVjdGl2ZScgfCAnc2Vjb25kYXJ5JyB8ICdsaW5rJztcbmV4cG9ydCB0eXBlIEJ1dHRvblNpemUgPSAnZGVmYXVsdCcgfCAnc20nIHwgJ2xnJyB8ICdpY29uJyB8ICdpY29uLXNtJyB8ICdpY29uLWxnJztcbmV4cG9ydCB0eXBlIEJ1dHRvbkNvbG9yID0gJ3ByaW1hcnknIHwgJ3N1Y2Nlc3MnIHwgJ3dhcm5pbmcnIHwgJ2RhbmdlcicgfCAnYWNjZW50JyB8ICd3aGl0ZScgfCAnaW5mbyc7XG5cbi8qKlxuICogQnV0dG9uIENvbXBvbmVudFxuICogXG4gKiBBIHZlcnNhdGlsZSBidXR0b24gY29tcG9uZW50IHdpdGggbXVsdGlwbGUgdmFyaWFudHMgYW5kIHNpemVzLlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHVCdXR0b24+Q2xpY2sgbWU8L3VCdXR0b24+XG4gKiA8dUJ1dHRvbiB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9XCJzbVwiPlNtYWxsIE91dGxpbmU8L3VCdXR0b24+XG4gKiA8dUJ1dHRvbiB2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIj5EZWxldGU8L3VCdXR0b24+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndUJ1dHRvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b25cbiAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc2VzXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9idXR0b24+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2J1dHRvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBCdXR0b24gdmFyaWFudFxuICAgKiAtIGRlZmF1bHQ6IFByaW1hcnkgYnV0dG9uIHN0eWxlXG4gICAqIC0gb3V0bGluZTogT3V0bGluZWQgYnV0dG9uXG4gICAqIC0gZ2hvc3Q6IE1pbmltYWwgYnV0dG9uIHdpdGggbm8gYm9yZGVyXG4gICAqIC0gZGVzdHJ1Y3RpdmU6IEZvciBkZXN0cnVjdGl2ZSBhY3Rpb25zIChkZWxldGUsIHJlbW92ZSwgZXRjLilcbiAgICogLSBzZWNvbmRhcnk6IFNlY29uZGFyeSBhY3Rpb24gYnV0dG9uXG4gICAqIC0gbGluazogUmVuZGVycyBhcyBhIGxpbmstc3R5bGVkIGJ1dHRvblxuICAgKi9cbiAgQElucHV0KCkgdmFyaWFudDogQnV0dG9uVmFyaWFudCA9ICdkZWZhdWx0JztcblxuICAvKipcbiAgICogQnV0dG9uIHNpemVcbiAgICogLSBkZWZhdWx0OiBTdGFuZGFyZCBidXR0b24gc2l6ZVxuICAgKiAtIHNtOiBTbWFsbCBidXR0b25cbiAgICogLSBsZzogTGFyZ2UgYnV0dG9uXG4gICAqIC0gaWNvbjogU3F1YXJlIGljb24gYnV0dG9uIChkZWZhdWx0IHNpemUpXG4gICAqIC0gaWNvbi1zbTogU21hbGwgc3F1YXJlIGljb24gYnV0dG9uXG4gICAqIC0gaWNvbi1sZzogTGFyZ2Ugc3F1YXJlIGljb24gYnV0dG9uXG4gICAqL1xuICBASW5wdXQoKSBzaXplOiBCdXR0b25TaXplID0gJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBIVE1MIGJ1dHRvbiB0eXBlXG4gICAqL1xuICBASW5wdXQoKSB0eXBlOiAnYnV0dG9uJyB8ICdzdWJtaXQnIHwgJ3Jlc2V0JyA9ICdidXR0b24nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBidXR0b24gaXMgZGlzYWJsZWRcbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cblxuICAvKipcbiAgICogQVJJQSBsYWJlbCBmb3IgYWNjZXNzaWJpbGl0eVxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCdXR0b24gY29sb3JcbiAgICogLSBwcmltYXJ5OiBQcmltYXJ5IGJyYW5kIGNvbG9yIChkZWZhdWx0KVxuICAgKiAtIHN1Y2Nlc3M6IEdyZWVuIGNvbG9yIGZvciBzdWNjZXNzIGFjdGlvbnNcbiAgICogLSB3YXJuaW5nOiBZZWxsb3cvYW1iZXIgY29sb3IgZm9yIHdhcm5pbmdzXG4gICAqIC0gZGFuZ2VyOiBSZWQgY29sb3IgZm9yIGRhbmdlcm91cyBhY3Rpb25zXG4gICAqIC0gYWNjZW50OiBBY2NlbnQgY29sb3IgZm9yIGhpZ2hsaWdodHNcbiAgICogLSB3aGl0ZTogV2hpdGUgY29sb3IgZm9yIGRhcmsgYmFja2dyb3VuZHNcbiAgICogLSBpbmZvOiBCbHVlIGNvbG9yIGZvciBpbmZvcm1hdGlvbmFsIGFjdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpIGNvbG9yOiBCdXR0b25Db2xvciA9ICdwcmltYXJ5JztcblxuICBnZXQgYnV0dG9uQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICAndS1idXR0b24nLFxuICAgICAgYHUtYnV0dG9uLS0ke3RoaXMudmFyaWFudH1gLFxuICAgICAgYHUtYnV0dG9uLS0ke3RoaXMuc2l6ZX1gLFxuICAgICAgYHUtYnV0dG9uLS1jb2xvci0ke3RoaXMuY29sb3J9YFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,76 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ /**
6
+ * Text/Typography Component
7
+ *
8
+ * A flexible typography component for consistent text rendering.
9
+ * Uses token-based styles for maintainability and theming.
10
+ *
11
+ * @example
12
+ * ```html
13
+ * <uText variant="heading">Page Heading</uText>
14
+ * <uText variant="body" tag="p">This is a paragraph.</uText>
15
+ * <uText variant="caption" color="text-secondary">Helper text</uText>
16
+ * <uText variant="title" align="center" truncate>Long Title</uText>
17
+ * ```
18
+ */
19
+ export class TextComponent {
20
+ /**
21
+ * Typography variant
22
+ * Controls font-size, weight, and line-height via tokens
23
+ */
24
+ variant = 'body';
25
+ /**
26
+ * HTML tag to render
27
+ * Allows semantic control independent of visual style
28
+ */
29
+ tag = 'span';
30
+ /**
31
+ * Text color (token-based)
32
+ * Uses design system color tokens
33
+ */
34
+ color;
35
+ /**
36
+ * Text alignment
37
+ */
38
+ align;
39
+ /**
40
+ * Enable text truncation with ellipsis
41
+ */
42
+ truncate = false;
43
+ /**
44
+ * Optional width constraint
45
+ * Useful when truncating text
46
+ */
47
+ width;
48
+ get textClasses() {
49
+ return [
50
+ 'u-text',
51
+ `u-text--${this.variant}`,
52
+ this.color ? `u-text--color-${this.color}` : null,
53
+ this.align ? `u-text--align-${this.align}` : null,
54
+ this.truncate ? 'u-text--truncate' : null
55
+ ].filter(Boolean).join(' ');
56
+ }
57
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
58
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TextComponent, isStandalone: true, selector: "uText", inputs: { variant: "variant", tag: "tag", color: "color", align: "align", truncate: "truncate", width: "width" }, ngImport: i0, template: "<ng-container [ngSwitch]=\"tag\">\n <h1 *ngSwitchCase=\"'h1'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h1>\n <h2 *ngSwitchCase=\"'h2'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h2>\n <h3 *ngSwitchCase=\"'h3'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h3>\n <h4 *ngSwitchCase=\"'h4'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h4>\n <h5 *ngSwitchCase=\"'h5'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h5>\n <h6 *ngSwitchCase=\"'h6'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h6>\n <p *ngSwitchCase=\"'p'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></p>\n <label *ngSwitchCase=\"'label'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></label>\n <strong *ngSwitchCase=\"'strong'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></strong>\n <em *ngSwitchCase=\"'em'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></em>\n <div *ngSwitchCase=\"'div'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></div>\n <span *ngSwitchDefault [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></span>\n</ng-container>", styles: [".u-text{margin:0;padding:0;color:var(--uicolor-text-primary)}.u-text--display{font-size:var(--uitype-display-size);font-weight:var(--uitype-display-weight);line-height:var(--uitype-display-line-height);letter-spacing:var(--uitype-display-letter-spacing)}.u-text--title{font-size:var(--uitype-title-size);font-weight:var(--uitype-title-weight);line-height:var(--uitype-title-line-height);letter-spacing:var(--uitype-title-letter-spacing)}.u-text--heading{font-size:var(--uitype-heading-size);font-weight:var(--uitype-heading-weight);line-height:var(--uitype-heading-line-height);letter-spacing:var(--uitype-heading-letter-spacing)}.u-text--subheading{font-size:var(--uitype-subheading-size);font-weight:var(--uitype-subheading-weight);line-height:var(--uitype-subheading-line-height);letter-spacing:var(--uitype-subheading-letter-spacing)}.u-text--body-lg{font-size:var(--uitype-body-lg-size);font-weight:var(--uitype-body-lg-weight);line-height:var(--uitype-body-lg-line-height);letter-spacing:var(--uitype-body-lg-letter-spacing)}.u-text--body{font-size:var(--uitype-body-size);font-weight:var(--uitype-body-weight);line-height:var(--uitype-body-line-height);letter-spacing:var(--uitype-body-letter-spacing)}.u-text--body-sm{font-size:var(--uitype-body-sm-size);font-weight:var(--uitype-body-sm-weight);line-height:var(--uitype-body-sm-line-height);letter-spacing:var(--uitype-body-sm-letter-spacing)}.u-text--label{font-size:var(--uitype-label-size);font-weight:var(--uitype-label-weight);line-height:var(--uitype-label-line-height);letter-spacing:var(--uitype-label-letter-spacing)}.u-text--helper{font-size:var(--uitype-helper-size);font-weight:var(--uitype-helper-weight);line-height:var(--uitype-helper-line-height);letter-spacing:var(--uitype-helper-letter-spacing)}.u-text--caption{font-size:var(--uitype-caption-size);font-weight:var(--uitype-caption-weight);line-height:var(--uitype-caption-line-height);letter-spacing:var(--uitype-caption-letter-spacing)}.u-text--overline{font-size:var(--uitype-overline-size);font-weight:var(--uitype-overline-weight);line-height:var(--uitype-overline-line-height);letter-spacing:var(--uitype-overline-letter-spacing);text-transform:uppercase}.u-text--color-primary{color:var(--uicolor-primary)}.u-text--color-success{color:var(--uicolor-success)}.u-text--color-warning{color:var(--uicolor-warning)}.u-text--color-danger{color:var(--uicolor-danger)}.u-text--color-accent{color:var(--uicolor-accent)}.u-text--color-slate{color:var(--uicolor-slate)}.u-text--color-text-primary{color:var(--uicolor-text-primary)}.u-text--color-text-secondary{color:var(--uicolor-text-secondary)}.u-text--color-text-tertiary{color:var(--uicolor-text-tertiary)}.u-text--color-text-inverse{color:var(--uicolor-text-inverse)}.u-text--align-left{text-align:left}.u-text--align-center{text-align:center}.u-text--align-right{text-align:right}.u-text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;max-width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }] });
59
+ }
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TextComponent, decorators: [{
61
+ type: Component,
62
+ args: [{ selector: 'uText', standalone: true, imports: [CommonModule], template: "<ng-container [ngSwitch]=\"tag\">\n <h1 *ngSwitchCase=\"'h1'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h1>\n <h2 *ngSwitchCase=\"'h2'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h2>\n <h3 *ngSwitchCase=\"'h3'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h3>\n <h4 *ngSwitchCase=\"'h4'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h4>\n <h5 *ngSwitchCase=\"'h5'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h5>\n <h6 *ngSwitchCase=\"'h6'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h6>\n <p *ngSwitchCase=\"'p'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></p>\n <label *ngSwitchCase=\"'label'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></label>\n <strong *ngSwitchCase=\"'strong'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></strong>\n <em *ngSwitchCase=\"'em'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></em>\n <div *ngSwitchCase=\"'div'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></div>\n <span *ngSwitchDefault [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></span>\n</ng-container>", styles: [".u-text{margin:0;padding:0;color:var(--uicolor-text-primary)}.u-text--display{font-size:var(--uitype-display-size);font-weight:var(--uitype-display-weight);line-height:var(--uitype-display-line-height);letter-spacing:var(--uitype-display-letter-spacing)}.u-text--title{font-size:var(--uitype-title-size);font-weight:var(--uitype-title-weight);line-height:var(--uitype-title-line-height);letter-spacing:var(--uitype-title-letter-spacing)}.u-text--heading{font-size:var(--uitype-heading-size);font-weight:var(--uitype-heading-weight);line-height:var(--uitype-heading-line-height);letter-spacing:var(--uitype-heading-letter-spacing)}.u-text--subheading{font-size:var(--uitype-subheading-size);font-weight:var(--uitype-subheading-weight);line-height:var(--uitype-subheading-line-height);letter-spacing:var(--uitype-subheading-letter-spacing)}.u-text--body-lg{font-size:var(--uitype-body-lg-size);font-weight:var(--uitype-body-lg-weight);line-height:var(--uitype-body-lg-line-height);letter-spacing:var(--uitype-body-lg-letter-spacing)}.u-text--body{font-size:var(--uitype-body-size);font-weight:var(--uitype-body-weight);line-height:var(--uitype-body-line-height);letter-spacing:var(--uitype-body-letter-spacing)}.u-text--body-sm{font-size:var(--uitype-body-sm-size);font-weight:var(--uitype-body-sm-weight);line-height:var(--uitype-body-sm-line-height);letter-spacing:var(--uitype-body-sm-letter-spacing)}.u-text--label{font-size:var(--uitype-label-size);font-weight:var(--uitype-label-weight);line-height:var(--uitype-label-line-height);letter-spacing:var(--uitype-label-letter-spacing)}.u-text--helper{font-size:var(--uitype-helper-size);font-weight:var(--uitype-helper-weight);line-height:var(--uitype-helper-line-height);letter-spacing:var(--uitype-helper-letter-spacing)}.u-text--caption{font-size:var(--uitype-caption-size);font-weight:var(--uitype-caption-weight);line-height:var(--uitype-caption-line-height);letter-spacing:var(--uitype-caption-letter-spacing)}.u-text--overline{font-size:var(--uitype-overline-size);font-weight:var(--uitype-overline-weight);line-height:var(--uitype-overline-line-height);letter-spacing:var(--uitype-overline-letter-spacing);text-transform:uppercase}.u-text--color-primary{color:var(--uicolor-primary)}.u-text--color-success{color:var(--uicolor-success)}.u-text--color-warning{color:var(--uicolor-warning)}.u-text--color-danger{color:var(--uicolor-danger)}.u-text--color-accent{color:var(--uicolor-accent)}.u-text--color-slate{color:var(--uicolor-slate)}.u-text--color-text-primary{color:var(--uicolor-text-primary)}.u-text--color-text-secondary{color:var(--uicolor-text-secondary)}.u-text--color-text-tertiary{color:var(--uicolor-text-tertiary)}.u-text--color-text-inverse{color:var(--uicolor-text-inverse)}.u-text--align-left{text-align:left}.u-text--align-center{text-align:center}.u-text--align-right{text-align:right}.u-text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;max-width:100%}\n"] }]
63
+ }], propDecorators: { variant: [{
64
+ type: Input
65
+ }], tag: [{
66
+ type: Input
67
+ }], color: [{
68
+ type: Input
69
+ }], align: [{
70
+ type: Input
71
+ }], truncate: [{
72
+ type: Input
73
+ }], width: [{
74
+ type: Input
75
+ }] } });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aXN1aXRlL3NyYy9saWIvdGV4dC90ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Vpc3VpdGUvc3JjL2xpYi90ZXh0L3RleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUEyQy9DOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFRSCxNQUFNLE9BQU8sYUFBYTtJQUN0Qjs7O09BR0c7SUFDTSxPQUFPLEdBQWdCLE1BQU0sQ0FBQztJQUV2Qzs7O09BR0c7SUFDTSxHQUFHLEdBQVksTUFBTSxDQUFDO0lBRS9COzs7T0FHRztJQUNNLEtBQUssQ0FBYTtJQUUzQjs7T0FFRztJQUNNLEtBQUssQ0FBYTtJQUUzQjs7T0FFRztJQUNNLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFFbkM7OztPQUdHO0lBQ00sS0FBSyxDQUFVO0lBRXhCLElBQUksV0FBVztRQUNYLE9BQU87WUFDSCxRQUFRO1lBQ1IsV0FBVyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsaUJBQWlCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUM1QyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQzt3R0EzQ1EsYUFBYTs0RkFBYixhQUFhLG1MQ2pFMUIsbTJDQWFlLGk5RkRnREQsWUFBWTs7NEZBSWIsYUFBYTtrQkFQekIsU0FBUzsrQkFDSSxPQUFPLGNBQ0wsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDOzhCQVNkLE9BQU87c0JBQWYsS0FBSztnQkFNRyxHQUFHO3NCQUFYLEtBQUs7Z0JBTUcsS0FBSztzQkFBYixLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQU1HLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmV4cG9ydCB0eXBlIFRleHRWYXJpYW50ID1cbiAgICB8ICdkaXNwbGF5J1xuICAgIHwgJ3RpdGxlJ1xuICAgIHwgJ2hlYWRpbmcnXG4gICAgfCAnc3ViaGVhZGluZydcbiAgICB8ICdib2R5LWxnJ1xuICAgIHwgJ2JvZHknXG4gICAgfCAnYm9keS1zbSdcbiAgICB8ICdsYWJlbCdcbiAgICB8ICdoZWxwZXInXG4gICAgfCAnY2FwdGlvbidcbiAgICB8ICdvdmVybGluZSc7XG5cbmV4cG9ydCB0eXBlIFRleHRUYWcgPVxuICAgIHwgJ2gxJ1xuICAgIHwgJ2gyJ1xuICAgIHwgJ2gzJ1xuICAgIHwgJ2g0J1xuICAgIHwgJ2g1J1xuICAgIHwgJ2g2J1xuICAgIHwgJ3AnXG4gICAgfCAnc3BhbidcbiAgICB8ICdkaXYnXG4gICAgfCAnbGFiZWwnXG4gICAgfCAnc3Ryb25nJ1xuICAgIHwgJ2VtJztcblxuZXhwb3J0IHR5cGUgVGV4dEFsaWduID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuXG5leHBvcnQgdHlwZSBUZXh0Q29sb3IgPVxuICAgIHwgJ3ByaW1hcnknXG4gICAgfCAnc3VjY2VzcydcbiAgICB8ICd3YXJuaW5nJ1xuICAgIHwgJ2RhbmdlcidcbiAgICB8ICdhY2NlbnQnXG4gICAgfCAnc2xhdGUnXG4gICAgfCAndGV4dC1wcmltYXJ5J1xuICAgIHwgJ3RleHQtc2Vjb25kYXJ5J1xuICAgIHwgJ3RleHQtdGVydGlhcnknXG4gICAgfCAndGV4dC1pbnZlcnNlJztcblxuLyoqXG4gKiBUZXh0L1R5cG9ncmFwaHkgQ29tcG9uZW50XG4gKiBcbiAqIEEgZmxleGlibGUgdHlwb2dyYXBoeSBjb21wb25lbnQgZm9yIGNvbnNpc3RlbnQgdGV4dCByZW5kZXJpbmcuXG4gKiBVc2VzIHRva2VuLWJhc2VkIHN0eWxlcyBmb3IgbWFpbnRhaW5hYmlsaXR5IGFuZCB0aGVtaW5nLlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHVUZXh0IHZhcmlhbnQ9XCJoZWFkaW5nXCI+UGFnZSBIZWFkaW5nPC91VGV4dD5cbiAqIDx1VGV4dCB2YXJpYW50PVwiYm9keVwiIHRhZz1cInBcIj5UaGlzIGlzIGEgcGFyYWdyYXBoLjwvdVRleHQ+XG4gKiA8dVRleHQgdmFyaWFudD1cImNhcHRpb25cIiBjb2xvcj1cInRleHQtc2Vjb25kYXJ5XCI+SGVscGVyIHRleHQ8L3VUZXh0PlxuICogPHVUZXh0IHZhcmlhbnQ9XCJ0aXRsZVwiIGFsaWduPVwiY2VudGVyXCIgdHJ1bmNhdGU+TG9uZyBUaXRsZTwvdVRleHQ+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1VGV4dCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGV4dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGV4dC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRleHRDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIFR5cG9ncmFwaHkgdmFyaWFudFxuICAgICAqIENvbnRyb2xzIGZvbnQtc2l6ZSwgd2VpZ2h0LCBhbmQgbGluZS1oZWlnaHQgdmlhIHRva2Vuc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHZhcmlhbnQ6IFRleHRWYXJpYW50ID0gJ2JvZHknO1xuXG4gICAgLyoqXG4gICAgICogSFRNTCB0YWcgdG8gcmVuZGVyXG4gICAgICogQWxsb3dzIHNlbWFudGljIGNvbnRyb2wgaW5kZXBlbmRlbnQgb2YgdmlzdWFsIHN0eWxlXG4gICAgICovXG4gICAgQElucHV0KCkgdGFnOiBUZXh0VGFnID0gJ3NwYW4nO1xuXG4gICAgLyoqXG4gICAgICogVGV4dCBjb2xvciAodG9rZW4tYmFzZWQpXG4gICAgICogVXNlcyBkZXNpZ24gc3lzdGVtIGNvbG9yIHRva2Vuc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGNvbG9yPzogVGV4dENvbG9yO1xuXG4gICAgLyoqXG4gICAgICogVGV4dCBhbGlnbm1lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhbGlnbj86IFRleHRBbGlnbjtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZSB0ZXh0IHRydW5jYXRpb24gd2l0aCBlbGxpcHNpc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRydW5jYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCB3aWR0aCBjb25zdHJhaW50XG4gICAgICogVXNlZnVsIHdoZW4gdHJ1bmNhdGluZyB0ZXh0XG4gICAgICovXG4gICAgQElucHV0KCkgd2lkdGg/OiBzdHJpbmc7XG5cbiAgICBnZXQgdGV4dENsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICd1LXRleHQnLFxuICAgICAgICAgICAgYHUtdGV4dC0tJHt0aGlzLnZhcmlhbnR9YCxcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPyBgdS10ZXh0LS1jb2xvci0ke3RoaXMuY29sb3J9YCA6IG51bGwsXG4gICAgICAgICAgICB0aGlzLmFsaWduID8gYHUtdGV4dC0tYWxpZ24tJHt0aGlzLmFsaWdufWAgOiBudWxsLFxuICAgICAgICAgICAgdGhpcy50cnVuY2F0ZSA/ICd1LXRleHQtLXRydW5jYXRlJyA6IG51bGxcbiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRhZ1wiPlxuICA8aDEgKm5nU3dpdGNoQ2FzZT1cIidoMSdcIiBbY2xhc3NdPVwidGV4dENsYXNzZXNcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9oMT5cbiAgPGgyICpuZ1N3aXRjaENhc2U9XCInaDInXCIgW2NsYXNzXT1cInRleHRDbGFzc2VzXCIgW3N0eWxlLndpZHRoXT1cIndpZHRoXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvaDI+XG4gIDxoMyAqbmdTd2l0Y2hDYXNlPVwiJ2gzJ1wiIFtjbGFzc109XCJ0ZXh0Q2xhc3Nlc1wiIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2gzPlxuICA8aDQgKm5nU3dpdGNoQ2FzZT1cIidoNCdcIiBbY2xhc3NdPVwidGV4dENsYXNzZXNcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9oND5cbiAgPGg1ICpuZ1N3aXRjaENhc2U9XCInaDUnXCIgW2NsYXNzXT1cInRleHRDbGFzc2VzXCIgW3N0eWxlLndpZHRoXT1cIndpZHRoXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvaDU+XG4gIDxoNiAqbmdTd2l0Y2hDYXNlPVwiJ2g2J1wiIFtjbGFzc109XCJ0ZXh0Q2xhc3Nlc1wiIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2g2PlxuICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ3AnXCIgW2NsYXNzXT1cInRleHRDbGFzc2VzXCIgW3N0eWxlLndpZHRoXT1cIndpZHRoXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvcD5cbiAgPGxhYmVsICpuZ1N3aXRjaENhc2U9XCInbGFiZWwnXCIgW2NsYXNzXT1cInRleHRDbGFzc2VzXCIgW3N0eWxlLndpZHRoXT1cIndpZHRoXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbGFiZWw+XG4gIDxzdHJvbmcgKm5nU3dpdGNoQ2FzZT1cIidzdHJvbmcnXCIgW2NsYXNzXT1cInRleHRDbGFzc2VzXCIgW3N0eWxlLndpZHRoXT1cIndpZHRoXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50Pjwvc3Ryb25nPlxuICA8ZW0gKm5nU3dpdGNoQ2FzZT1cIidlbSdcIiBbY2xhc3NdPVwidGV4dENsYXNzZXNcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9lbT5cbiAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2RpdidcIiBbY2xhc3NdPVwidGV4dENsYXNzZXNcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9kaXY+XG4gIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgW2NsYXNzXT1cInRleHRDbGFzc2VzXCIgW3N0eWxlLndpZHRoXT1cIndpZHRoXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50Pjwvc3Bhbj5cbjwvbmctY29udGFpbmVyPiJdfQ==
@@ -7,4 +7,5 @@
7
7
  export const UISUITE_VERSION = '0.0.0';
8
8
  // Components
9
9
  export * from './lib/button/button.component';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3Vpc3VpdGUvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBRXZDLGFBQWE7QUFDYixjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB1aXN1aXRlXG4gKiBcbiAqIFRoaXMgZmlsZSBleHBvcnRzIGFsbCBjb21wb25lbnRzLCBkaXJlY3RpdmVzLCBhbmQgc2VydmljZXMuXG4gKi9cblxuLy8gVmVyc2lvblxuZXhwb3J0IGNvbnN0IFVJU1VJVEVfVkVSU0lPTiA9ICcwLjAuMCc7XG5cbi8vIENvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbiJdfQ==
10
+ export * from './lib/text/text.component';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3Vpc3VpdGUvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBRXZDLGFBQWE7QUFDYixjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHVpc3VpdGVcbiAqIFxuICogVGhpcyBmaWxlIGV4cG9ydHMgYWxsIGNvbXBvbmVudHMsIGRpcmVjdGl2ZXMsIGFuZCBzZXJ2aWNlcy5cbiAqL1xuXG4vLyBWZXJzaW9uXG5leHBvcnQgY29uc3QgVUlTVUlURV9WRVJTSU9OID0gJzAuMC4wJztcblxuLy8gQ29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG4iXX0=
@@ -1,9 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Component, Input } from '@angular/core';
3
+ import * as i1 from '@angular/common';
3
4
  import { CommonModule } from '@angular/common';
4
5
 
5
6
  /**
6
- * Button Component - Based on shadcn/ui
7
+ * Button Component
7
8
  *
8
9
  * A versatile button component with multiple variants and sizes.
9
10
  *
@@ -104,6 +105,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
104
105
  type: Input
105
106
  }] } });
106
107
 
108
+ /**
109
+ * Text/Typography Component
110
+ *
111
+ * A flexible typography component for consistent text rendering.
112
+ * Uses token-based styles for maintainability and theming.
113
+ *
114
+ * @example
115
+ * ```html
116
+ * <uText variant="heading">Page Heading</uText>
117
+ * <uText variant="body" tag="p">This is a paragraph.</uText>
118
+ * <uText variant="caption" color="text-secondary">Helper text</uText>
119
+ * <uText variant="title" align="center" truncate>Long Title</uText>
120
+ * ```
121
+ */
122
+ class TextComponent {
123
+ /**
124
+ * Typography variant
125
+ * Controls font-size, weight, and line-height via tokens
126
+ */
127
+ variant = 'body';
128
+ /**
129
+ * HTML tag to render
130
+ * Allows semantic control independent of visual style
131
+ */
132
+ tag = 'span';
133
+ /**
134
+ * Text color (token-based)
135
+ * Uses design system color tokens
136
+ */
137
+ color;
138
+ /**
139
+ * Text alignment
140
+ */
141
+ align;
142
+ /**
143
+ * Enable text truncation with ellipsis
144
+ */
145
+ truncate = false;
146
+ /**
147
+ * Optional width constraint
148
+ * Useful when truncating text
149
+ */
150
+ width;
151
+ get textClasses() {
152
+ return [
153
+ 'u-text',
154
+ `u-text--${this.variant}`,
155
+ this.color ? `u-text--color-${this.color}` : null,
156
+ this.align ? `u-text--align-${this.align}` : null,
157
+ this.truncate ? 'u-text--truncate' : null
158
+ ].filter(Boolean).join(' ');
159
+ }
160
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
161
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TextComponent, isStandalone: true, selector: "uText", inputs: { variant: "variant", tag: "tag", color: "color", align: "align", truncate: "truncate", width: "width" }, ngImport: i0, template: "<ng-container [ngSwitch]=\"tag\">\n <h1 *ngSwitchCase=\"'h1'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h1>\n <h2 *ngSwitchCase=\"'h2'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h2>\n <h3 *ngSwitchCase=\"'h3'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h3>\n <h4 *ngSwitchCase=\"'h4'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h4>\n <h5 *ngSwitchCase=\"'h5'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h5>\n <h6 *ngSwitchCase=\"'h6'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h6>\n <p *ngSwitchCase=\"'p'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></p>\n <label *ngSwitchCase=\"'label'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></label>\n <strong *ngSwitchCase=\"'strong'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></strong>\n <em *ngSwitchCase=\"'em'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></em>\n <div *ngSwitchCase=\"'div'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></div>\n <span *ngSwitchDefault [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></span>\n</ng-container>", styles: [".u-text{margin:0;padding:0;color:var(--uicolor-text-primary)}.u-text--display{font-size:var(--uitype-display-size);font-weight:var(--uitype-display-weight);line-height:var(--uitype-display-line-height);letter-spacing:var(--uitype-display-letter-spacing)}.u-text--title{font-size:var(--uitype-title-size);font-weight:var(--uitype-title-weight);line-height:var(--uitype-title-line-height);letter-spacing:var(--uitype-title-letter-spacing)}.u-text--heading{font-size:var(--uitype-heading-size);font-weight:var(--uitype-heading-weight);line-height:var(--uitype-heading-line-height);letter-spacing:var(--uitype-heading-letter-spacing)}.u-text--subheading{font-size:var(--uitype-subheading-size);font-weight:var(--uitype-subheading-weight);line-height:var(--uitype-subheading-line-height);letter-spacing:var(--uitype-subheading-letter-spacing)}.u-text--body-lg{font-size:var(--uitype-body-lg-size);font-weight:var(--uitype-body-lg-weight);line-height:var(--uitype-body-lg-line-height);letter-spacing:var(--uitype-body-lg-letter-spacing)}.u-text--body{font-size:var(--uitype-body-size);font-weight:var(--uitype-body-weight);line-height:var(--uitype-body-line-height);letter-spacing:var(--uitype-body-letter-spacing)}.u-text--body-sm{font-size:var(--uitype-body-sm-size);font-weight:var(--uitype-body-sm-weight);line-height:var(--uitype-body-sm-line-height);letter-spacing:var(--uitype-body-sm-letter-spacing)}.u-text--label{font-size:var(--uitype-label-size);font-weight:var(--uitype-label-weight);line-height:var(--uitype-label-line-height);letter-spacing:var(--uitype-label-letter-spacing)}.u-text--helper{font-size:var(--uitype-helper-size);font-weight:var(--uitype-helper-weight);line-height:var(--uitype-helper-line-height);letter-spacing:var(--uitype-helper-letter-spacing)}.u-text--caption{font-size:var(--uitype-caption-size);font-weight:var(--uitype-caption-weight);line-height:var(--uitype-caption-line-height);letter-spacing:var(--uitype-caption-letter-spacing)}.u-text--overline{font-size:var(--uitype-overline-size);font-weight:var(--uitype-overline-weight);line-height:var(--uitype-overline-line-height);letter-spacing:var(--uitype-overline-letter-spacing);text-transform:uppercase}.u-text--color-primary{color:var(--uicolor-primary)}.u-text--color-success{color:var(--uicolor-success)}.u-text--color-warning{color:var(--uicolor-warning)}.u-text--color-danger{color:var(--uicolor-danger)}.u-text--color-accent{color:var(--uicolor-accent)}.u-text--color-slate{color:var(--uicolor-slate)}.u-text--color-text-primary{color:var(--uicolor-text-primary)}.u-text--color-text-secondary{color:var(--uicolor-text-secondary)}.u-text--color-text-tertiary{color:var(--uicolor-text-tertiary)}.u-text--color-text-inverse{color:var(--uicolor-text-inverse)}.u-text--align-left{text-align:left}.u-text--align-center{text-align:center}.u-text--align-right{text-align:right}.u-text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;max-width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }] });
162
+ }
163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TextComponent, decorators: [{
164
+ type: Component,
165
+ args: [{ selector: 'uText', standalone: true, imports: [CommonModule], template: "<ng-container [ngSwitch]=\"tag\">\n <h1 *ngSwitchCase=\"'h1'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h1>\n <h2 *ngSwitchCase=\"'h2'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h2>\n <h3 *ngSwitchCase=\"'h3'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h3>\n <h4 *ngSwitchCase=\"'h4'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h4>\n <h5 *ngSwitchCase=\"'h5'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h5>\n <h6 *ngSwitchCase=\"'h6'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h6>\n <p *ngSwitchCase=\"'p'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></p>\n <label *ngSwitchCase=\"'label'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></label>\n <strong *ngSwitchCase=\"'strong'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></strong>\n <em *ngSwitchCase=\"'em'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></em>\n <div *ngSwitchCase=\"'div'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></div>\n <span *ngSwitchDefault [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></span>\n</ng-container>", styles: [".u-text{margin:0;padding:0;color:var(--uicolor-text-primary)}.u-text--display{font-size:var(--uitype-display-size);font-weight:var(--uitype-display-weight);line-height:var(--uitype-display-line-height);letter-spacing:var(--uitype-display-letter-spacing)}.u-text--title{font-size:var(--uitype-title-size);font-weight:var(--uitype-title-weight);line-height:var(--uitype-title-line-height);letter-spacing:var(--uitype-title-letter-spacing)}.u-text--heading{font-size:var(--uitype-heading-size);font-weight:var(--uitype-heading-weight);line-height:var(--uitype-heading-line-height);letter-spacing:var(--uitype-heading-letter-spacing)}.u-text--subheading{font-size:var(--uitype-subheading-size);font-weight:var(--uitype-subheading-weight);line-height:var(--uitype-subheading-line-height);letter-spacing:var(--uitype-subheading-letter-spacing)}.u-text--body-lg{font-size:var(--uitype-body-lg-size);font-weight:var(--uitype-body-lg-weight);line-height:var(--uitype-body-lg-line-height);letter-spacing:var(--uitype-body-lg-letter-spacing)}.u-text--body{font-size:var(--uitype-body-size);font-weight:var(--uitype-body-weight);line-height:var(--uitype-body-line-height);letter-spacing:var(--uitype-body-letter-spacing)}.u-text--body-sm{font-size:var(--uitype-body-sm-size);font-weight:var(--uitype-body-sm-weight);line-height:var(--uitype-body-sm-line-height);letter-spacing:var(--uitype-body-sm-letter-spacing)}.u-text--label{font-size:var(--uitype-label-size);font-weight:var(--uitype-label-weight);line-height:var(--uitype-label-line-height);letter-spacing:var(--uitype-label-letter-spacing)}.u-text--helper{font-size:var(--uitype-helper-size);font-weight:var(--uitype-helper-weight);line-height:var(--uitype-helper-line-height);letter-spacing:var(--uitype-helper-letter-spacing)}.u-text--caption{font-size:var(--uitype-caption-size);font-weight:var(--uitype-caption-weight);line-height:var(--uitype-caption-line-height);letter-spacing:var(--uitype-caption-letter-spacing)}.u-text--overline{font-size:var(--uitype-overline-size);font-weight:var(--uitype-overline-weight);line-height:var(--uitype-overline-line-height);letter-spacing:var(--uitype-overline-letter-spacing);text-transform:uppercase}.u-text--color-primary{color:var(--uicolor-primary)}.u-text--color-success{color:var(--uicolor-success)}.u-text--color-warning{color:var(--uicolor-warning)}.u-text--color-danger{color:var(--uicolor-danger)}.u-text--color-accent{color:var(--uicolor-accent)}.u-text--color-slate{color:var(--uicolor-slate)}.u-text--color-text-primary{color:var(--uicolor-text-primary)}.u-text--color-text-secondary{color:var(--uicolor-text-secondary)}.u-text--color-text-tertiary{color:var(--uicolor-text-tertiary)}.u-text--color-text-inverse{color:var(--uicolor-text-inverse)}.u-text--align-left{text-align:left}.u-text--align-center{text-align:center}.u-text--align-right{text-align:right}.u-text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;max-width:100%}\n"] }]
166
+ }], propDecorators: { variant: [{
167
+ type: Input
168
+ }], tag: [{
169
+ type: Input
170
+ }], color: [{
171
+ type: Input
172
+ }], align: [{
173
+ type: Input
174
+ }], truncate: [{
175
+ type: Input
176
+ }], width: [{
177
+ type: Input
178
+ }] } });
179
+
107
180
  /*
108
181
  * Public API Surface of uisuite
109
182
  *
@@ -116,5 +189,5 @@ const UISUITE_VERSION = '0.0.0';
116
189
  * Generated bundle index. Do not edit.
117
190
  */
118
191
 
119
- export { ButtonComponent, UISUITE_VERSION };
192
+ export { ButtonComponent, TextComponent, UISUITE_VERSION };
120
193
  //# sourceMappingURL=uisuite.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"uisuite.mjs","sources":["../../../projects/uisuite/src/lib/button/button.component.ts","../../../projects/uisuite/src/public-api.ts","../../../projects/uisuite/src/uisuite.ts"],"sourcesContent":["import { Component, Input, HostBinding } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ButtonVariant = 'default' | 'outline' | 'ghost' | 'destructive' | 'secondary' | 'link';\nexport type ButtonSize = 'default' | 'sm' | 'lg' | 'icon' | 'icon-sm' | 'icon-lg';\nexport type ButtonColor = 'primary' | 'success' | 'warning' | 'danger' | 'accent' | 'white' | 'info';\n\n/**\n * Button Component - Based on shadcn/ui\n * \n * A versatile button component with multiple variants and sizes.\n * \n * @example\n * ```html\n * <uButton>Click me</uButton>\n * <uButton variant=\"outline\" size=\"sm\">Small Outline</uButton>\n * <uButton variant=\"destructive\">Delete</uButton>\n * ```\n */\n@Component({\n selector: 'uButton',\n standalone: true,\n imports: [CommonModule],\n template: `\n <button\n [type]=\"type\"\n [disabled]=\"disabled\"\n [class]=\"buttonClasses\"\n [attr.aria-label]=\"ariaLabel\"\n >\n <ng-content></ng-content>\n </button>\n `,\n styleUrls: ['./button.component.scss']\n})\nexport class ButtonComponent {\n /**\n * Button variant\n * - default: Primary button style\n * - outline: Outlined button\n * - ghost: Minimal button with no border\n * - destructive: For destructive actions (delete, remove, etc.)\n * - secondary: Secondary action button\n * - link: Renders as a link-styled button\n */\n @Input() variant: ButtonVariant = 'default';\n\n /**\n * Button size\n * - default: Standard button size\n * - sm: Small button\n * - lg: Large button\n * - icon: Square icon button (default size)\n * - icon-sm: Small square icon button\n * - icon-lg: Large square icon button\n */\n @Input() size: ButtonSize = 'default';\n\n /**\n * HTML button type\n */\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n /**\n * Whether the button is disabled\n */\n @Input() disabled: boolean = false;\n\n\n /**\n * ARIA label for accessibility\n */\n @Input() ariaLabel?: string;\n\n /**\n * Button color\n * - primary: Primary brand color (default)\n * - success: Green color for success actions\n * - warning: Yellow/amber color for warnings\n * - danger: Red color for dangerous actions\n * - accent: Accent color for highlights\n * - white: White color for dark backgrounds\n * - info: Blue color for informational actions\n */\n @Input() color: ButtonColor = 'primary';\n\n get buttonClasses(): string {\n return [\n 'u-button',\n `u-button--${this.variant}`,\n `u-button--${this.size}`,\n `u-button--color-${this.color}`\n ].filter(Boolean).join(' ');\n }\n}\n","/*\n * Public API Surface of uisuite\n * \n * This file exports all components, directives, and services.\n */\n\n// Version\nexport const UISUITE_VERSION = '0.0.0';\n\n// Components\nexport * from './lib/button/button.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAOA;;;;;;;;;;;AAWG;MAiBU,eAAe,CAAA;AAC1B;;;;;;;;AAQG;IACM,OAAO,GAAkB,SAAS,CAAC;AAE5C;;;;;;;;AAQG;IACM,IAAI,GAAe,SAAS,CAAC;AAEtC;;AAEG;IACM,IAAI,GAAkC,QAAQ,CAAC;AAExD;;AAEG;IACM,QAAQ,GAAY,KAAK,CAAC;AAGnC;;AAEG;AACM,IAAA,SAAS,CAAU;AAE5B;;;;;;;;;AASG;IACM,KAAK,GAAgB,SAAS,CAAC;AAExC,IAAA,IAAI,aAAa,GAAA;QACf,OAAO;YACL,UAAU;YACV,CAAa,UAAA,EAAA,IAAI,CAAC,OAAO,CAAE,CAAA;YAC3B,CAAa,UAAA,EAAA,IAAI,CAAC,IAAI,CAAE,CAAA;YACxB,CAAmB,gBAAA,EAAA,IAAI,CAAC,KAAK,CAAE,CAAA;SAChC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC7B;wGA1DU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAZhB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2lRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAVS,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAaX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAhB3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,cACP,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EACb,QAAA,EAAA,CAAA;;;;;;;;;AAST,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2lRAAA,CAAA,EAAA,CAAA;8BAaQ,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAWG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAKG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAKG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAMG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAYG,KAAK,EAAA,CAAA;sBAAb,KAAK;;;ACpFR;;;;AAIG;AAEH;AACO,MAAM,eAAe,GAAG;;ACP/B;;AAEG;;;;"}
1
+ {"version":3,"file":"uisuite.mjs","sources":["../../../projects/uisuite/src/lib/button/button.component.ts","../../../projects/uisuite/src/lib/text/text.component.ts","../../../projects/uisuite/src/lib/text/text.component.html","../../../projects/uisuite/src/public-api.ts","../../../projects/uisuite/src/uisuite.ts"],"sourcesContent":["import { Component, Input, HostBinding } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ButtonVariant = 'default' | 'outline' | 'ghost' | 'destructive' | 'secondary' | 'link';\nexport type ButtonSize = 'default' | 'sm' | 'lg' | 'icon' | 'icon-sm' | 'icon-lg';\nexport type ButtonColor = 'primary' | 'success' | 'warning' | 'danger' | 'accent' | 'white' | 'info';\n\n/**\n * Button Component\n * \n * A versatile button component with multiple variants and sizes.\n * \n * @example\n * ```html\n * <uButton>Click me</uButton>\n * <uButton variant=\"outline\" size=\"sm\">Small Outline</uButton>\n * <uButton variant=\"destructive\">Delete</uButton>\n * ```\n */\n@Component({\n selector: 'uButton',\n standalone: true,\n imports: [CommonModule],\n template: `\n <button\n [type]=\"type\"\n [disabled]=\"disabled\"\n [class]=\"buttonClasses\"\n [attr.aria-label]=\"ariaLabel\"\n >\n <ng-content></ng-content>\n </button>\n `,\n styleUrls: ['./button.component.scss']\n})\nexport class ButtonComponent {\n /**\n * Button variant\n * - default: Primary button style\n * - outline: Outlined button\n * - ghost: Minimal button with no border\n * - destructive: For destructive actions (delete, remove, etc.)\n * - secondary: Secondary action button\n * - link: Renders as a link-styled button\n */\n @Input() variant: ButtonVariant = 'default';\n\n /**\n * Button size\n * - default: Standard button size\n * - sm: Small button\n * - lg: Large button\n * - icon: Square icon button (default size)\n * - icon-sm: Small square icon button\n * - icon-lg: Large square icon button\n */\n @Input() size: ButtonSize = 'default';\n\n /**\n * HTML button type\n */\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n /**\n * Whether the button is disabled\n */\n @Input() disabled: boolean = false;\n\n\n /**\n * ARIA label for accessibility\n */\n @Input() ariaLabel?: string;\n\n /**\n * Button color\n * - primary: Primary brand color (default)\n * - success: Green color for success actions\n * - warning: Yellow/amber color for warnings\n * - danger: Red color for dangerous actions\n * - accent: Accent color for highlights\n * - white: White color for dark backgrounds\n * - info: Blue color for informational actions\n */\n @Input() color: ButtonColor = 'primary';\n\n get buttonClasses(): string {\n return [\n 'u-button',\n `u-button--${this.variant}`,\n `u-button--${this.size}`,\n `u-button--color-${this.color}`\n ].filter(Boolean).join(' ');\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type TextVariant =\n | 'display'\n | 'title'\n | 'heading'\n | 'subheading'\n | 'body-lg'\n | 'body'\n | 'body-sm'\n | 'label'\n | 'helper'\n | 'caption'\n | 'overline';\n\nexport type TextTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'p'\n | 'span'\n | 'div'\n | 'label'\n | 'strong'\n | 'em';\n\nexport type TextAlign = 'left' | 'center' | 'right';\n\nexport type TextColor =\n | 'primary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'accent'\n | 'slate'\n | 'text-primary'\n | 'text-secondary'\n | 'text-tertiary'\n | 'text-inverse';\n\n/**\n * Text/Typography Component\n * \n * A flexible typography component for consistent text rendering.\n * Uses token-based styles for maintainability and theming.\n * \n * @example\n * ```html\n * <uText variant=\"heading\">Page Heading</uText>\n * <uText variant=\"body\" tag=\"p\">This is a paragraph.</uText>\n * <uText variant=\"caption\" color=\"text-secondary\">Helper text</uText>\n * <uText variant=\"title\" align=\"center\" truncate>Long Title</uText>\n * ```\n */\n@Component({\n selector: 'uText',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './text.component.html',\n styleUrls: ['./text.component.scss']\n})\nexport class TextComponent {\n /**\n * Typography variant\n * Controls font-size, weight, and line-height via tokens\n */\n @Input() variant: TextVariant = 'body';\n\n /**\n * HTML tag to render\n * Allows semantic control independent of visual style\n */\n @Input() tag: TextTag = 'span';\n\n /**\n * Text color (token-based)\n * Uses design system color tokens\n */\n @Input() color?: TextColor;\n\n /**\n * Text alignment\n */\n @Input() align?: TextAlign;\n\n /**\n * Enable text truncation with ellipsis\n */\n @Input() truncate: boolean = false;\n\n /**\n * Optional width constraint\n * Useful when truncating text\n */\n @Input() width?: string;\n\n get textClasses(): string {\n return [\n 'u-text',\n `u-text--${this.variant}`,\n this.color ? `u-text--color-${this.color}` : null,\n this.align ? `u-text--align-${this.align}` : null,\n this.truncate ? 'u-text--truncate' : null\n ].filter(Boolean).join(' ');\n }\n}\n","<ng-container [ngSwitch]=\"tag\">\n <h1 *ngSwitchCase=\"'h1'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h1>\n <h2 *ngSwitchCase=\"'h2'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h2>\n <h3 *ngSwitchCase=\"'h3'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h3>\n <h4 *ngSwitchCase=\"'h4'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h4>\n <h5 *ngSwitchCase=\"'h5'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h5>\n <h6 *ngSwitchCase=\"'h6'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></h6>\n <p *ngSwitchCase=\"'p'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></p>\n <label *ngSwitchCase=\"'label'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></label>\n <strong *ngSwitchCase=\"'strong'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></strong>\n <em *ngSwitchCase=\"'em'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></em>\n <div *ngSwitchCase=\"'div'\" [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></div>\n <span *ngSwitchDefault [class]=\"textClasses\" [style.width]=\"width\"><ng-content></ng-content></span>\n</ng-container>","/*\n * Public API Surface of uisuite\n * \n * This file exports all components, directives, and services.\n */\n\n// Version\nexport const UISUITE_VERSION = '0.0.0';\n\n// Components\nexport * from './lib/button/button.component';\nexport * from './lib/text/text.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ export type ButtonVariant = 'default' | 'outline' | 'ghost' | 'destructive' | 's
3
3
  export type ButtonSize = 'default' | 'sm' | 'lg' | 'icon' | 'icon-sm' | 'icon-lg';
4
4
  export type ButtonColor = 'primary' | 'success' | 'warning' | 'danger' | 'accent' | 'white' | 'info';
5
5
  /**
6
- * Button Component - Based on shadcn/ui
6
+ * Button Component
7
7
  *
8
8
  * A versatile button component with multiple variants and sizes.
9
9
  *
@@ -0,0 +1,52 @@
1
+ import * as i0 from "@angular/core";
2
+ export type TextVariant = 'display' | 'title' | 'heading' | 'subheading' | 'body-lg' | 'body' | 'body-sm' | 'label' | 'helper' | 'caption' | 'overline';
3
+ export type TextTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span' | 'div' | 'label' | 'strong' | 'em';
4
+ export type TextAlign = 'left' | 'center' | 'right';
5
+ export type TextColor = 'primary' | 'success' | 'warning' | 'danger' | 'accent' | 'slate' | 'text-primary' | 'text-secondary' | 'text-tertiary' | 'text-inverse';
6
+ /**
7
+ * Text/Typography Component
8
+ *
9
+ * A flexible typography component for consistent text rendering.
10
+ * Uses token-based styles for maintainability and theming.
11
+ *
12
+ * @example
13
+ * ```html
14
+ * <uText variant="heading">Page Heading</uText>
15
+ * <uText variant="body" tag="p">This is a paragraph.</uText>
16
+ * <uText variant="caption" color="text-secondary">Helper text</uText>
17
+ * <uText variant="title" align="center" truncate>Long Title</uText>
18
+ * ```
19
+ */
20
+ export declare class TextComponent {
21
+ /**
22
+ * Typography variant
23
+ * Controls font-size, weight, and line-height via tokens
24
+ */
25
+ variant: TextVariant;
26
+ /**
27
+ * HTML tag to render
28
+ * Allows semantic control independent of visual style
29
+ */
30
+ tag: TextTag;
31
+ /**
32
+ * Text color (token-based)
33
+ * Uses design system color tokens
34
+ */
35
+ color?: TextColor;
36
+ /**
37
+ * Text alignment
38
+ */
39
+ align?: TextAlign;
40
+ /**
41
+ * Enable text truncation with ellipsis
42
+ */
43
+ truncate: boolean;
44
+ /**
45
+ * Optional width constraint
46
+ * Useful when truncating text
47
+ */
48
+ width?: string;
49
+ get textClasses(): string;
50
+ static ɵfac: i0.ɵɵFactoryDeclaration<TextComponent, never>;
51
+ static ɵcmp: i0.ɵɵComponentDeclaration<TextComponent, "uText", never, { "variant": { "alias": "variant"; "required": false; }; "tag": { "alias": "tag"; "required": false; }; "color": { "alias": "color"; "required": false; }; "align": { "alias": "align"; "required": false; }; "truncate": { "alias": "truncate"; "required": false; }; "width": { "alias": "width"; "required": false; }; }, {}, never, ["*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*"], true, never>;
52
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uisuite",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Enterprise Angular UI component library for ERP SAAS applications. Designer-friendly, consistent, and accessible components.",
5
5
  "keywords": [
6
6
  "angular",
package/public-api.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export declare const UISUITE_VERSION = "0.0.0";
2
2
  export * from './lib/button/button.component';
3
+ export * from './lib/text/text.component';