@seniorsistemas/angular-components 18.1.2 → 18.1.4
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/dynamic-form/public-api.d.ts +1 -0
- package/esm2022/dynamic-form/public-api.mjs +1 -1
- package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +5 -4
- package/esm2022/tabs/lib/tabs/tabs.component.mjs +18 -9
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs +20 -10
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
- package/package.json +8 -8
- package/tabs/lib/tab-item/tab-item.component.d.ts +1 -0
- package/tabs/lib/tabs/tabs.component.d.ts +2 -1
|
@@ -36,6 +36,7 @@ export { TextAreaField, type TextAreaFieldConfig } from "./lib/dynamic-form/form
|
|
|
36
36
|
export { TextAreaIAField, type TextAreaIAFieldConfig } from "./lib/dynamic-form/form-field/configurations/fields/text-area-ia-field";
|
|
37
37
|
export { TextField, type TextFieldConfig } from "./lib/dynamic-form/form-field/configurations/fields/text-field";
|
|
38
38
|
export { StarRatingField, type StarRatingFieldConfig } from "./lib/dynamic-form/form-field/configurations/fields/star-rating-field";
|
|
39
|
+
export type { BaseFieldComponentConfig } from "./lib/dynamic-form/form-field/fields/base-field-component";
|
|
39
40
|
export { FieldSize } from './lib/dynamic-form/form-field/configurations/field-size';
|
|
40
41
|
export { FieldType } from './lib/dynamic-form/form-field/configurations/field-type';
|
|
41
42
|
export { FormField, Option } from './lib/dynamic-form/form-field/form-field';
|
|
@@ -41,4 +41,4 @@ export { FieldType } from './lib/dynamic-form/form-field/configurations/field-ty
|
|
|
41
41
|
export { FormField, Option } from './lib/dynamic-form/form-field/form-field';
|
|
42
42
|
export { NumberFieldComponent } from './lib/dynamic-form/form-field/fields/number/number-field.component';
|
|
43
43
|
export { LookupComponent } from './lib/dynamic-form/components/lookup/lookup.component';
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9keW5hbWljLWZvcm0vc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxzREFBc0QsQ0FBQztBQUNyRSxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyxxRUFBcUUsQ0FBQztBQUVwRixPQUFPLEVBQUUsaUJBQWlCLEVBQWdDLE1BQU0sd0VBQXdFLENBQUM7QUFDekksT0FBTyxFQUFFLGNBQWMsRUFBNkIsTUFBTSxxRUFBcUUsQ0FBQztBQUNoSSxPQUFPLEVBQUUsU0FBUyxFQUF3QixNQUFNLGdFQUFnRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQTJELE1BQU0sbUVBQW1FLENBQUM7QUFDL0ssT0FBTyxFQUFFLGtCQUFrQixFQUFpQyxNQUFNLDBFQUEwRSxDQUFDO0FBQzdJLE9BQU8sRUFBRSxXQUFXLEVBQTBCLE1BQU0sa0VBQWtFLENBQUM7QUFDdkgsT0FBTyxFQUFFLGFBQWEsRUFBNEIsTUFBTSxvRUFBb0UsQ0FBQztBQUM3SCxPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLG9FQUFvRSxDQUFDO0FBQzdILE9BQU8sRUFBRSxVQUFVLEVBQXlCLE1BQU0saUVBQWlFLENBQUM7QUFDcEgsT0FBTyxFQUFFLHVCQUF1QixFQUFpQyxNQUFNLGdGQUFnRixDQUFDO0FBQ3hKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNuRyxPQUFPLEVBQUUsWUFBWSxFQUEyQixNQUFNLG1FQUFtRSxDQUFDO0FBQzFILE9BQU8sRUFBRSxXQUFXLEVBQTBCLE1BQU0sa0VBQWtFLENBQUM7QUFDdkgsT0FBTyxFQUFFLEtBQUssRUFBb0IsTUFBTSwyREFBMkQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsV0FBVyxFQUE4QyxNQUFNLGtFQUFrRSxDQUFDO0FBQzNJLE9BQU8sRUFBRSxXQUFXLEVBQTBCLE1BQU0sa0VBQWtFLENBQUM7QUFDdkgsT0FBTyxFQUFFLGFBQWEsRUFBMEQsTUFBTSxvRUFBb0UsQ0FBQztBQUMzSixPQUFPLEVBQUUsbUJBQW1CLEVBQTZCLE1BQU0scUVBQXFFLENBQUM7QUFDckksT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUErQixNQUFNLHdFQUF3RSxDQUFDO0FBQzNKLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUEwQixNQUFNLGtFQUFrRSxDQUFDO0FBQ3JJLE9BQU8sRUFBRSxXQUFXLEVBQTBCLE1BQU0sa0VBQWtFLENBQUM7QUFDdkgsT0FBTyxFQUFFLGFBQWEsRUFBNEIsTUFBTSxxRUFBcUUsQ0FBQztBQUM5SCxPQUFPLEVBQUUsZUFBZSxFQUE4QixNQUFNLHdFQUF3RSxDQUFDO0FBQ3JJLE9BQU8sRUFBRSxTQUFTLEVBQXdCLE1BQU0sZ0VBQWdFLENBQUM7QUFDakgsT0FBTyxFQUFFLGVBQWUsRUFBOEIsTUFBTSx1RUFBdUUsQ0FBQTtBQUluSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seURBQXlELENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFFMUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVEQUF1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2NvbmZpZ3VyYXRpb25zL2R5bmFtaWMtY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2R5bmFtaWMtZm9ybS9jb25maWd1cmF0aW9ucy9keW5hbWljLXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2NvbmZpZ3VyYXRpb25zL2dyaWQtdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9keW5hbWljLWZvcm0vY29uZmlndXJhdGlvbnMvZ3JpZC9ncmlkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2R5bmFtaWMtZm9ybS9jb25maWd1cmF0aW9ucy9ncmlkL3Jvdyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9keW5hbWljLWZvcm0vY29uZmlndXJhdGlvbnMvc3RydWN0dXJlLXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2NvbmZpZ3VyYXRpb25zL3N0cnVjdHVyZS9maWVsZHNldCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9keW5hbWljLWZvcm0vY29uZmlndXJhdGlvbnMvc3RydWN0dXJlL3NlY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2NvbmZpZ3VyYXRpb25zL3N0cnVjdHVyZS9zdHJ1Y3R1cmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2Zvcm0tZmllbGQvY29uZmlndXJhdGlvbnMvZmllbGRzL3RleHQtYXJlYS1maWVsZCc7XG5cbmV4cG9ydCB7IEF1dG9jb21wbGV0ZUZpZWxkLCB0eXBlIEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnIH0gZnJvbSBcIi4vbGliL2R5bmFtaWMtZm9ybS9mb3JtLWZpZWxkL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9hdXRvY29tcGxldGUtZmllbGRcIjtcbmV4cG9ydCB7IEJpZ251bWJlckZpZWxkLCB0eXBlIEJpZ251bWJlckZpZWxkQ29uZmlnIH0gZnJvbSBcIi4vbGliL2R5bmFtaWMtZm9ybS9mb3JtLWZpZWxkL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9iaWdudW1iZXItZmllbGRcIjtcbmV4cG9ydCB7IEJsb2JGaWVsZCwgdHlwZSBCbG9iRmllbGRDb25maWcgfSBmcm9tIFwiLi9saWIvZHluYW1pYy1mb3JtL2Zvcm0tZmllbGQvY29uZmlndXJhdGlvbnMvZmllbGRzL2Jsb2ItZmllbGRcIjtcbmV4cG9ydCB7IEJvb2xlYW5GaWVsZCwgQm9vbGVhbk9wdGlvbnNMYWJlbCwgdHlwZSBCb29sZWFuRmllbGRDb25maWcsIHR5cGUgQm9vbGVhbk9wdGlvbnNMYWJlbENvbmZpZyB9IGZyb20gXCIuL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9jb25maWd1cmF0aW9ucy9maWVsZHMvYm9vbGVhbi1maWVsZFwiO1xuZXhwb3J0IHsgQm9vbGVhblN3aXRjaEZpZWxkLCB0eXBlIEJvb2xlYW5Td2l0Y2hGaWVsZENvbmZpZyB9IGZyb20gXCIuL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9jb25maWd1cmF0aW9ucy9maWVsZHMvYm9vbGVhbi1zd2l0Y2gtZmllbGRcIjtcbmV4cG9ydCB7IEJ1dHRvbkZpZWxkLCB0eXBlIEJ1dHRvbkZpZWxkQ29uZmlnIH0gZnJvbSBcIi4vbGliL2R5bmFtaWMtZm9ybS9mb3JtLWZpZWxkL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9idXR0b24tZmllbGRcIjtcbmV4cG9ydCB7IENhbGVuZGFyRmllbGQsIHR5cGUgQ2FsZW5kYXJGaWVsZENvbmZpZyB9IGZyb20gXCIuL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9jb25maWd1cmF0aW9ucy9maWVsZHMvY2FsZW5kYXItZmllbGRcIjtcbmV4cG9ydCB7IENoZWNrYm94RmllbGQsIHR5cGUgQ2hlY2tib3hGaWVsZENvbmZpZyB9IGZyb20gXCIuL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9jb25maWd1cmF0aW9ucy9maWVsZHMvY2hlY2tib3gtZmllbGRcIjtcbmV4cG9ydCB7IENoaXBzRmllbGQsIHR5cGUgQ2hpcHNGaWVsZENvbmZpZyB9IGZyb20gXCIuL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9jb25maWd1cmF0aW9ucy9maWVsZHMvY2hpcHMtZmllbGRcIjtcbmV4cG9ydCB7IENvdW50cnlQaG9uZVBpY2tlckZpZWxkLCB0eXBlIENvdW50cnlQaG9uZVBpY2tlckNvbmZpZyB9IGZyb20gXCIuL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9jb25maWd1cmF0aW9ucy9maWVsZHMvY291bnRyeS1waG9uZS1waWNrZXItZmllbGRcIjtcbmV4cG9ydCB7IEN1cnJlbmN5RmllbGQgfSBmcm9tIFwiLi9saWIvZHluYW1pYy1mb3JtL2Zvcm0tZmllbGQvY29uZmlndXJhdGlvbnMvZmllbGRzL2N1cnJlbmN5LWZpZWxkXCI7XG5leHBvcnQgeyBEZWNpbWFsRmllbGQsIHR5cGUgRGVjaW1hbEZpZWxkQ29uZmlnIH0gZnJvbSBcIi4vbGliL2R5bmFtaWMtZm9ybS9mb3JtLWZpZWxkL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9kZWNpbWFsLWZpZWxkXCI7XG5leHBvcnQgeyBFZGl0b3JGaWVsZCwgdHlwZSBFZGl0b3JGaWVsZENvbmZpZyB9IGZyb20gXCIuL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9jb25maWd1cmF0aW9ucy9maWVsZHMvZWRpdG9yLWZpZWxkXCI7XG5leHBvcnQgeyBGaWVsZCwgdHlwZSBGaWVsZENvbmZpZyB9IGZyb20gXCIuL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9jb25maWd1cmF0aW9ucy9maWVsZHMvZmllbGRcIjtcbmV4cG9ydCB7IExvb2t1cEZpZWxkLCB0eXBlIERlZmF1bHRGaWx0ZXIsIHR5cGUgTG9va3VwRmllbGRDb25maWcgfSBmcm9tIFwiLi9saWIvZHluYW1pYy1mb3JtL2Zvcm0tZmllbGQvY29uZmlndXJhdGlvbnMvZmllbGRzL2xvb2t1cC1maWVsZFwiO1xuZXhwb3J0IHsgTnVtYmVyRmllbGQsIHR5cGUgTnVtYmVyRmllbGRDb25maWcgfSBmcm9tIFwiLi9saWIvZHluYW1pYy1mb3JtL2Zvcm0tZmllbGQvY29uZmlndXJhdGlvbnMvZmllbGRzL251bWJlci1maWVsZFwiO1xuZXhwb3J0IHsgUGFzc3dvcmRGaWVsZCwgdHlwZSBQYXNzd29yZEZpZWxkQ29uZmlnLCB0eXBlIFBhc3N3b3JkU3RyZW5ndGhPcHRpb25zIH0gZnJvbSBcIi4vbGliL2R5bmFtaWMtZm9ybS9mb3JtLWZpZWxkL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9wYXNzd29yZC1maWVsZFwiO1xuZXhwb3J0IHsgUHJvZmlsZVBpY3R1cmVGaWVsZCwgdHlwZSBQcm9maWxlUGljdHVyZUNvbmZpZyB9IGZyb20gXCIuL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9jb25maWd1cmF0aW9ucy9maWVsZHMvcHJvZmlsZS1waWN0dXJlXCI7XG5leHBvcnQgeyBSYWRpb0J1dHRvbkZpZWxkLCBSYXRpb25CdXR0b25PcHRpb24sIHR5cGUgUmFkaW9CdXR0b25GaWVsZENvbmZpZyB9IGZyb20gXCIuL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9jb25maWd1cmF0aW9ucy9maWVsZHMvcmFkaW8tYnV0dG9uLWZpZWxkXCI7XG5leHBvcnQgeyBTZWxlY3RGaWVsZCwgU2VsZWN0T3B0aW9uLCB0eXBlIFNlbGVjdEZpZWxkQ29uZmlnIH0gZnJvbSBcIi4vbGliL2R5bmFtaWMtZm9ybS9mb3JtLWZpZWxkL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9zZWxlY3QtZmllbGRcIjtcbmV4cG9ydCB7IFNsaWRlckZpZWxkLCB0eXBlIFNsaWRlckZpZWxkQ29uZmlnIH0gZnJvbSBcIi4vbGliL2R5bmFtaWMtZm9ybS9mb3JtLWZpZWxkL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy9zbGlkZXItZmllbGRcIjtcbmV4cG9ydCB7IFRleHRBcmVhRmllbGQsIHR5cGUgVGV4dEFyZWFGaWVsZENvbmZpZyB9IGZyb20gXCIuL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9jb25maWd1cmF0aW9ucy9maWVsZHMvdGV4dC1hcmVhLWZpZWxkXCI7XG5leHBvcnQgeyBUZXh0QXJlYUlBRmllbGQsIHR5cGUgVGV4dEFyZWFJQUZpZWxkQ29uZmlnIH0gZnJvbSBcIi4vbGliL2R5bmFtaWMtZm9ybS9mb3JtLWZpZWxkL2NvbmZpZ3VyYXRpb25zL2ZpZWxkcy90ZXh0LWFyZWEtaWEtZmllbGRcIjtcbmV4cG9ydCB7IFRleHRGaWVsZCwgdHlwZSBUZXh0RmllbGRDb25maWcgfSBmcm9tIFwiLi9saWIvZHluYW1pYy1mb3JtL2Zvcm0tZmllbGQvY29uZmlndXJhdGlvbnMvZmllbGRzL3RleHQtZmllbGRcIjtcbmV4cG9ydCB7IFN0YXJSYXRpbmdGaWVsZCwgdHlwZSBTdGFyUmF0aW5nRmllbGRDb25maWcgfSBmcm9tIFwiLi9saWIvZHluYW1pYy1mb3JtL2Zvcm0tZmllbGQvY29uZmlndXJhdGlvbnMvZmllbGRzL3N0YXItcmF0aW5nLWZpZWxkXCJcblxuZXhwb3J0IHR5cGUgeyBCYXNlRmllbGRDb21wb25lbnRDb25maWcgfSBmcm9tIFwiLi9saWIvZHluYW1pYy1mb3JtL2Zvcm0tZmllbGQvZmllbGRzL2Jhc2UtZmllbGQtY29tcG9uZW50XCJcblxuZXhwb3J0IHsgRmllbGRTaXplIH0gZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2Zvcm0tZmllbGQvY29uZmlndXJhdGlvbnMvZmllbGQtc2l6ZSc7XG5leHBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICcuL2xpYi9keW5hbWljLWZvcm0vZm9ybS1maWVsZC9jb25maWd1cmF0aW9ucy9maWVsZC10eXBlJztcbmV4cG9ydCB7IEZvcm1GaWVsZCwgT3B0aW9uIH0gZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2Zvcm0tZmllbGQvZm9ybS1maWVsZCc7XG5cbmV4cG9ydCB7IE51bWJlckZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2Zvcm0tZmllbGQvZmllbGRzL251bWJlci9udW1iZXItZmllbGQuY29tcG9uZW50JztcblxuZXhwb3J0IHsgTG9va3VwQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvbG9va3VwL2xvb2t1cC5jb21wb25lbnQnO1xuXG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, computed, contentChildren, input, model, viewChild } from '@angular/core';
|
|
1
|
+
import { Component, computed, contentChildren, input, model, viewChild, } from '@angular/core';
|
|
2
2
|
import { TemplateDirective } from '@seniorsistemas/angular-components/template';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class TabItemComponent {
|
|
@@ -20,6 +20,7 @@ export class TabItemComponent {
|
|
|
20
20
|
headerElement = computed(() => {
|
|
21
21
|
return this.headerTemplateDirectives()?.find((x) => x.type === 'header')?.template;
|
|
22
22
|
});
|
|
23
|
+
alreadyOpened = false;
|
|
23
24
|
ngAfterViewInit() {
|
|
24
25
|
if (this.destroyOnHide() && !this.templateContent()) {
|
|
25
26
|
console.error("When destroyOnHide is true sTemplate='body' is required");
|
|
@@ -27,10 +28,10 @@ export class TabItemComponent {
|
|
|
27
28
|
return;
|
|
28
29
|
}
|
|
29
30
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.14", type: TabItemComponent, isStandalone: true, selector: "s-tab-item", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, destroyOnHide: { classPropertyName: "destroyOnHide", publicName: "destroyOnHide", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, queries: [{ propertyName: "headerTemplateDirectives", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: "_template", first: true, predicate: ["template"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #template>\n <ng-content></ng-content>\n</ng-template>\n" });
|
|
31
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.14", type: TabItemComponent, isStandalone: true, selector: "s-tab-item", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, destroyOnHide: { classPropertyName: "destroyOnHide", publicName: "destroyOnHide", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, queries: [{ propertyName: "headerTemplateDirectives", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: "_template", first: true, predicate: ["template"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #template>\n <ng-content></ng-content>\n</ng-template>\n\n" });
|
|
31
32
|
}
|
|
32
33
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabItemComponent, decorators: [{
|
|
33
34
|
type: Component,
|
|
34
|
-
args: [{ selector: 's-tab-item', standalone: true, template: "<ng-template #template>\n <ng-content></ng-content>\n</ng-template>\n" }]
|
|
35
|
+
args: [{ selector: 's-tab-item', standalone: true, imports: [], template: "<ng-template #template>\n <ng-content></ng-content>\n</ng-template>\n\n" }]
|
|
35
36
|
}] });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3RhYnMvc3JjL2xpYi90YWItaXRlbS90YWItaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvdGFicy9zcmMvbGliL3RhYi1pdGVtL3RhYi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixLQUFLLEVBQ0wsS0FBSyxFQUVMLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFRaEYsTUFBTSxPQUFPLGdCQUFnQjtJQUNoQixTQUFTLEdBQUcsU0FBUyxDQUFtQixVQUFVLENBQUMsQ0FBQztJQUNwRCx3QkFBd0IsR0FBRyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM5RCxlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNyQyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDckYsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDdkIsTUFBTSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ3pCLFFBQVEsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDakMsS0FBSyxHQUFHLEtBQUssRUFBbUIsQ0FBQztJQUNqQyxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3JCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDL0MsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0lBQ0gsYUFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDMUIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ3ZGLENBQUMsQ0FBQyxDQUFDO0lBRUgsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUV0QixlQUFlO1FBQ1gsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztZQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUNELE9BQU87SUFDWCxDQUFDO3dHQTNCUSxnQkFBZ0I7NEZBQWhCLGdCQUFnQix1eEJBRTJCLGlCQUFpQixvS0NwQnpFLDRFQUlBOzs0RkRjYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0ksWUFBWSxjQUNWLElBQUksV0FFUCxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBjb250ZW50Q2hpbGRyZW4sXG4gICAgaW5wdXQsXG4gICAgbW9kZWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90ZW1wbGF0ZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy10YWItaXRlbScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFiLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcmVhZG9ubHkgX3RlbXBsYXRlID0gdmlld0NoaWxkPFRlbXBsYXRlUmVmPGFueT4+KCd0ZW1wbGF0ZScpO1xuICAgIHJlYWRvbmx5IGhlYWRlclRlbXBsYXRlRGlyZWN0aXZlcyA9IGNvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSk7XG4gICAgcmVhZG9ubHkgdGVtcGxhdGVDb250ZW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZXMoKT8uZmluZCgoeCkgPT4geC50eXBlID09PSAnYm9keScpPy50ZW1wbGF0ZTtcbiAgICB9KTtcbiAgICBpY29uID0gaW5wdXQ8c3RyaW5nPigpO1xuICAgIGhlYWRlciA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB2YWx1ZSA9IG1vZGVsPHN0cmluZyB8IG51bWJlcj4oKTtcbiAgICBkZXN0cm95T25IaWRlID0gaW5wdXQoZmFsc2UpO1xuICAgIHRlbXBsYXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBfdGVtcGxhdGUgPSB0aGlzLl90ZW1wbGF0ZSgpO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUNvbnRlbnQgPSB0aGlzLnRlbXBsYXRlQ29udGVudCgpO1xuICAgICAgICByZXR1cm4gdGVtcGxhdGVDb250ZW50ID8gdGVtcGxhdGVDb250ZW50IDogX3RlbXBsYXRlO1xuICAgIH0pO1xuICAgIGhlYWRlckVsZW1lbnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlcygpPy5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICdoZWFkZXInKT8udGVtcGxhdGU7XG4gICAgfSk7XG5cbiAgICBhbHJlYWR5T3BlbmVkID0gZmFsc2U7XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3lPbkhpZGUoKSAmJiAhdGhpcy50ZW1wbGF0ZUNvbnRlbnQoKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIldoZW4gZGVzdHJveU9uSGlkZSBpcyB0cnVlIHNUZW1wbGF0ZT0nYm9keScgaXMgcmVxdWlyZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbn1cblxuIiwiPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZT5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG4iXX0=
|
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
import { NgClass, NgTemplateOutlet } from '@angular/common';
|
|
2
|
-
import { Component, computed, contentChildren, input, model } from '@angular/core';
|
|
2
|
+
import { Component, computed, contentChildren, effect, input, model } from '@angular/core';
|
|
3
3
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
4
|
-
import {
|
|
4
|
+
import { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';
|
|
5
5
|
import { Subject, takeUntil } from 'rxjs';
|
|
6
6
|
import { TabItemComponent } from '../tab-item/tab-item.component';
|
|
7
|
-
import { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';
|
|
8
7
|
import * as i0 from "@angular/core";
|
|
9
8
|
export class TabsComponent {
|
|
10
9
|
onDestroy$ = new Subject();
|
|
11
10
|
tabItems = contentChildren(TabItemComponent);
|
|
12
11
|
activeTabComponent = computed(() => {
|
|
13
|
-
return this.tabItems().find((tab) => tab.value() === this.activeTab() && tab.
|
|
12
|
+
return this.tabItems().find((tab) => tab.value() === this.activeTab() && tab.templateContent());
|
|
14
13
|
});
|
|
15
14
|
keepAliveTabsContent = computed(() => {
|
|
16
|
-
return this.tabItems().filter((tab) => !tab.destroyOnHide());
|
|
15
|
+
return this.tabItems().filter((tab) => !tab.templateContent() || (tab.templateContent() && !tab.destroyOnHide()));
|
|
17
16
|
});
|
|
18
17
|
activeTab = model(0);
|
|
19
18
|
layoutType = input('horizontal');
|
|
19
|
+
activeTabEffect = effect(() => {
|
|
20
|
+
const activeTab = this.activeTab();
|
|
21
|
+
const activeTabComponent = this.tabItems().find((tab) => tab.value() === activeTab);
|
|
22
|
+
if (activeTabComponent && !activeTabComponent.alreadyOpened) {
|
|
23
|
+
activeTabComponent.alreadyOpened = true;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
20
26
|
constructor() {
|
|
21
|
-
toObservable(this.tabItems)
|
|
27
|
+
toObservable(this.tabItems)
|
|
28
|
+
.pipe(takeUntil(this.onDestroy$))
|
|
29
|
+
.subscribe(() => {
|
|
22
30
|
const tabs = this.tabItems();
|
|
23
31
|
tabs.forEach((tab, $index) => {
|
|
24
32
|
const tabHasValue = !!tab.value();
|
|
@@ -30,6 +38,7 @@ export class TabsComponent {
|
|
|
30
38
|
}
|
|
31
39
|
ngOnDestroy() {
|
|
32
40
|
this.onDestroy$.next();
|
|
41
|
+
this.onDestroy$.complete();
|
|
33
42
|
}
|
|
34
43
|
onActiveTab(tab) {
|
|
35
44
|
if (tab.disabled()) {
|
|
@@ -42,10 +51,10 @@ export class TabsComponent {
|
|
|
42
51
|
this.activeTab.set(tab.value());
|
|
43
52
|
}
|
|
44
53
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
45
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TabsComponent, isStandalone: true, selector: "s-tabs", inputs: { activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null }, layoutType: { classPropertyName: "layoutType", publicName: "layoutType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeTab: "activeTabChange" }, queries: [{ propertyName: "tabItems", predicate: TabItemComponent, isSignal: true }], ngImport: i0, template: "@let layout = layoutType();\n@let isHorizontal = layout === 'horizontal';\n@let isVertical = layout === 'vertical';\n<ng-template #buttonsRender>\n @for (tab of tabItems(); track $index) {\n @let isActiveTab = tab.value() === activeTab();\n @let disabledTab = tab.disabled();\n <button\n #tabButton\n (sInteractiveContent)=\"onActiveTab(tab)\"\n class=\"flex min-h-11 min-w-24 justify-start
|
|
54
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TabsComponent, isStandalone: true, selector: "s-tabs", inputs: { activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null }, layoutType: { classPropertyName: "layoutType", publicName: "layoutType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeTab: "activeTabChange" }, queries: [{ propertyName: "tabItems", predicate: TabItemComponent, isSignal: true }], ngImport: i0, template: "@let layout = layoutType();\n@let isHorizontal = layout === 'horizontal';\n@let isVertical = layout === 'vertical';\n<ng-template #buttonsRender>\n @for (tab of tabItems(); track $index) {\n @let isActiveTab = tab.value() === activeTab();\n @let disabledTab = tab.disabled();\n <button\n #tabButton\n (sInteractiveContent)=\"onActiveTab(tab)\"\n [disabled]=\"disabledTab\"\n class=\"flex min-h-11 min-w-24 justify-start p-2 hover:transition-all\"\n [class.active-tab]=\"isActiveTab\"\n [ngClass]=\"{\n 'font-bold': isActiveTab,\n 'text-primary': !isActiveTab && !disabledTab,\n 'text-grayscale-30': disabledTab,\n 'border-b-4': isHorizontal,\n 'border-r-4': isVertical,\n 'border-primary': isActiveTab && !disabledTab,\n 'border-transparent': !isActiveTab || disabledTab,\n 'hover:border-primary': !disabledTab && !isActiveTab,\n 'flex items-center gap-2': tab.icon(),\n 'cursor-default': disabledTab,\n }\"\n >\n @let headerElement = tab.headerElement();\n @if (headerElement) {\n <ng-container *ngTemplateOutlet=\"headerElement\"></ng-container>\n } @else {\n @if (tab.icon()) {\n <i\n class=\"text-grayscale-100\"\n [class]=\"tab.icon()\"\n ></i>\n }\n <span\n class=\"block text-left\"\n [ngClass]=\"{\n 'cursor-default': disabledTab,\n }\"\n >\n {{ tab.header() }}\n </span>\n }\n </button>\n }\n</ng-template>\n\n<ng-template #renderComponent>\n @let _activeTab = activeTabComponent();\n @let template = _activeTab?.templateContent()!;\n @if (_activeTab && template && !_activeTab.disabled() && _activeTab.destroyOnHide()) {\n <section class=\"h-full min-h-10 bg-grayscale-0 p-2\">\n <ng-container *ngTemplateOutlet=\"template\" />\n </section>\n }\n @for (keepAliveTab of keepAliveTabsContent(); track $index) {\n @let isActiveTab = keepAliveTab.value() === activeTab();\n\n <section\n class=\"h-full min-h-10 bg-grayscale-0 p-2\"\n [class.hidden]=\"!isActiveTab\"\n [class.block]=\"isActiveTab\"\n >\n @if (keepAliveTab.template() && keepAliveTab.alreadyOpened) {\n <ng-container *ngTemplateOutlet=\"keepAliveTab.template()!\"></ng-container>\n }\n </section>\n }\n</ng-template>\n\n@if (isHorizontal) {\n <section class=\"p-2\">\n <div class=\"flex grid-flow-col overflow-auto border-b-[1px] border-b-grayscale-20\">\n <ng-container *ngTemplateOutlet=\"buttonsRender\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"renderComponent\"></ng-container>\n </section>\n} @else if (isVertical) {\n <section class=\"vertical-tab flex w-full flex-wrap gap-2\">\n <aside class=\"flex max-h-96 flex-col overflow-auto\">\n <ng-container *ngTemplateOutlet=\"buttonsRender\"></ng-container>\n </aside>\n <aside class=\"vertical-tab-content flex-1\">\n <ng-container *ngTemplateOutlet=\"renderComponent\"></ng-container>\n </aside>\n </section>\n}\n\n", styles: [".vertical-tab{container:vertical-tab/inline-size}.vertical-tab-content{min-width:20rem}@container vertical-tab (max-width: 552px){.vertical-tab-buttons{width:100%;flex-direction:row}.vertical-tab-buttons .active-tab,.vertical-tab-buttons button:hover{border-right:none;border-bottom-width:4px}}\n"], dependencies: [{ kind: "directive", type: InteractiveContentDirective, selector: "[sInteractiveContent]", inputs: ["focusable", "disabled", "stopPropagation"], outputs: ["sInteractiveContent"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
46
55
|
}
|
|
47
56
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabsComponent, decorators: [{
|
|
48
57
|
type: Component,
|
|
49
|
-
args: [{ selector: 's-tabs', standalone: true, imports: [InteractiveContentDirective, NgTemplateOutlet, NgClass
|
|
58
|
+
args: [{ selector: 's-tabs', standalone: true, imports: [InteractiveContentDirective, NgTemplateOutlet, NgClass], template: "@let layout = layoutType();\n@let isHorizontal = layout === 'horizontal';\n@let isVertical = layout === 'vertical';\n<ng-template #buttonsRender>\n @for (tab of tabItems(); track $index) {\n @let isActiveTab = tab.value() === activeTab();\n @let disabledTab = tab.disabled();\n <button\n #tabButton\n (sInteractiveContent)=\"onActiveTab(tab)\"\n [disabled]=\"disabledTab\"\n class=\"flex min-h-11 min-w-24 justify-start p-2 hover:transition-all\"\n [class.active-tab]=\"isActiveTab\"\n [ngClass]=\"{\n 'font-bold': isActiveTab,\n 'text-primary': !isActiveTab && !disabledTab,\n 'text-grayscale-30': disabledTab,\n 'border-b-4': isHorizontal,\n 'border-r-4': isVertical,\n 'border-primary': isActiveTab && !disabledTab,\n 'border-transparent': !isActiveTab || disabledTab,\n 'hover:border-primary': !disabledTab && !isActiveTab,\n 'flex items-center gap-2': tab.icon(),\n 'cursor-default': disabledTab,\n }\"\n >\n @let headerElement = tab.headerElement();\n @if (headerElement) {\n <ng-container *ngTemplateOutlet=\"headerElement\"></ng-container>\n } @else {\n @if (tab.icon()) {\n <i\n class=\"text-grayscale-100\"\n [class]=\"tab.icon()\"\n ></i>\n }\n <span\n class=\"block text-left\"\n [ngClass]=\"{\n 'cursor-default': disabledTab,\n }\"\n >\n {{ tab.header() }}\n </span>\n }\n </button>\n }\n</ng-template>\n\n<ng-template #renderComponent>\n @let _activeTab = activeTabComponent();\n @let template = _activeTab?.templateContent()!;\n @if (_activeTab && template && !_activeTab.disabled() && _activeTab.destroyOnHide()) {\n <section class=\"h-full min-h-10 bg-grayscale-0 p-2\">\n <ng-container *ngTemplateOutlet=\"template\" />\n </section>\n }\n @for (keepAliveTab of keepAliveTabsContent(); track $index) {\n @let isActiveTab = keepAliveTab.value() === activeTab();\n\n <section\n class=\"h-full min-h-10 bg-grayscale-0 p-2\"\n [class.hidden]=\"!isActiveTab\"\n [class.block]=\"isActiveTab\"\n >\n @if (keepAliveTab.template() && keepAliveTab.alreadyOpened) {\n <ng-container *ngTemplateOutlet=\"keepAliveTab.template()!\"></ng-container>\n }\n </section>\n }\n</ng-template>\n\n@if (isHorizontal) {\n <section class=\"p-2\">\n <div class=\"flex grid-flow-col overflow-auto border-b-[1px] border-b-grayscale-20\">\n <ng-container *ngTemplateOutlet=\"buttonsRender\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"renderComponent\"></ng-container>\n </section>\n} @else if (isVertical) {\n <section class=\"vertical-tab flex w-full flex-wrap gap-2\">\n <aside class=\"flex max-h-96 flex-col overflow-auto\">\n <ng-container *ngTemplateOutlet=\"buttonsRender\"></ng-container>\n </aside>\n <aside class=\"vertical-tab-content flex-1\">\n <ng-container *ngTemplateOutlet=\"renderComponent\"></ng-container>\n </aside>\n </section>\n}\n\n", styles: [".vertical-tab{container:vertical-tab/inline-size}.vertical-tab-content{min-width:20rem}@container vertical-tab (max-width: 552px){.vertical-tab-buttons{width:100%;flex-direction:row}.vertical-tab-buttons .active-tab,.vertical-tab-buttons button:hover{border-right:none;border-bottom-width:4px}}\n"] }]
|
|
50
59
|
}], ctorParameters: () => [] });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvdGFicy9zcmMvbGliL3RhYnMvdGFicy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvdGFicy9zcmMvbGliL3RhYnMvdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDOztBQVNyRyxNQUFNLE9BQU8sYUFBYTtJQUNQLFVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQy9CLFFBQVEsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU3QyxrQkFBa0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUM1RyxDQUFDLENBQUMsQ0FBQTtJQUVpQixvQkFBb0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ3RELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtJQUM5RCxDQUFDLENBQUMsQ0FBQTtJQUVGLFNBQVMsR0FBRyxLQUFLLENBQWtCLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFVBQVUsR0FBRyxLQUFLLENBQTRCLFlBQVksQ0FBQyxDQUFDO0lBRTVEO1FBQ0UsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDMUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDakIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFUyxXQUFXLENBQUMsR0FBcUI7UUFDekMsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNyRixJQUFJLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUNwRixZQUFZLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDekIsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQXFCLENBQUMsQ0FBQztJQUNyRCxDQUFDO3dHQXhDVSxhQUFhOzRGQUFiLGFBQWEsNlpBRXNCLGdCQUFnQiw2Q0NqQmhFLHc5R0FzRkEsb1lEM0VZLDJCQUEyQiwwSkFBRSxnQkFBZ0Isb0pBQUUsT0FBTyxvRkFBRSxnQkFBZ0I7OzRGQUl2RSxhQUFhO2tCQVB6QixTQUFTOytCQUNFLFFBQVEsY0FDTixJQUFJLFdBQ1AsQ0FBQywyQkFBMkIsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGNvbnRlbnRDaGlsZHJlbiwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUYWJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFiLWl0ZW0vdGFiLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IEludGVyYWN0aXZlQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvaW50ZXJhY3RpdmUtY29udGVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3MtdGFicycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtJbnRlcmFjdGl2ZUNvbnRlbnREaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXQsIE5nQ2xhc3MsIFRvb2x0aXBEaXJlY3RpdmVdLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFicy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJzQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhYkl0ZW1zID0gY29udGVudENoaWxkcmVuKFRhYkl0ZW1Db21wb25lbnQpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBhY3RpdmVUYWJDb21wb25lbnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudGFiSXRlbXMoKS5maW5kKCh0YWIpID0+IHRhYi52YWx1ZSgpID09PSB0aGlzLmFjdGl2ZVRhYigpICYmIHRhYi5kZXN0cm95T25IaWRlKCkpPy50ZW1wbGF0ZSgpO1xuICB9KVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBrZWVwQWxpdmVUYWJzQ29udGVudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy50YWJJdGVtcygpLmZpbHRlcigodGFiKSA9PiAhdGFiLmRlc3Ryb3lPbkhpZGUoKSlcbiAgfSlcblxuICBhY3RpdmVUYWIgPSBtb2RlbDxzdHJpbmcgfCBudW1iZXI+KDApO1xuICBsYXlvdXRUeXBlID0gaW5wdXQ8J2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJz4oJ2hvcml6b250YWwnKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0b09ic2VydmFibGUodGhpcy50YWJJdGVtcykucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHRhYnMgPSB0aGlzLnRhYkl0ZW1zKCk7XG4gICAgICB0YWJzLmZvckVhY2goKHRhYiwgJGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYkhhc1ZhbHVlID0gISF0YWIudmFsdWUoKTtcbiAgICAgICAgaWYgKCF0YWJIYXNWYWx1ZSkge1xuICAgICAgICAgIHRhYi52YWx1ZS5zZXQoJGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkFjdGl2ZVRhYih0YWI6IFRhYkl0ZW1Db21wb25lbnQpIHtcbiAgICBpZiAodGFiLmRpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgX3ByZXZpb3VzVGFiID0gdGhpcy50YWJJdGVtcygpLmZpbmQoKHRhYikgPT4gdGFiLnZhbHVlKCkgPT09IHRoaXMuYWN0aXZlVGFiKCkpO1xuICAgIGlmIChfcHJldmlvdXNUYWIgJiYgIV9wcmV2aW91c1RhYi50ZW1wbGF0ZUNvbnRlbnQoKSAmJiBfcHJldmlvdXNUYWIuZGVzdHJveU9uSGlkZSgpKSB7XG4gICAgICBfcHJldmlvdXNUYWIudGVtcGxhdGUoKVxuICAgIH1cbiAgICB0aGlzLmFjdGl2ZVRhYi5zZXQodGFiLnZhbHVlKCkgYXMgc3RyaW5nIHwgbnVtYmVyKTtcbiAgfVxuXG59XG4iLCJAbGV0IGxheW91dCA9IGxheW91dFR5cGUoKTtcbkBsZXQgaXNIb3Jpem9udGFsID0gbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5AbGV0IGlzVmVydGljYWwgPSBsYXlvdXQgPT09ICd2ZXJ0aWNhbCc7XG48bmctdGVtcGxhdGUgI2J1dHRvbnNSZW5kZXI+XG4gICAgQGZvciAodGFiIG9mIHRhYkl0ZW1zKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICBAbGV0IGlzQWN0aXZlVGFiID0gdGFiLnZhbHVlKCkgPT09IGFjdGl2ZVRhYigpO1xuICAgICAgICBAbGV0IGRpc2FibGVkVGFiID0gdGFiLmRpc2FibGVkKCk7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICN0YWJCdXR0b25cbiAgICAgICAgICAgIChzSW50ZXJhY3RpdmVDb250ZW50KT1cIm9uQWN0aXZlVGFiKHRhYilcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IG1pbi1oLTExIG1pbi13LTI0IGp1c3RpZnktc3RhcnQgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgYm9yZGVyLXByaW1hcnkgcC0yIGhvdmVyOnRyYW5zaXRpb24tYWxsIGRpc2FibGVkOmJvcmRlci1ncmF5c2NhbGUtMzAgZGlzYWJsZWQ6dGV4dC1ncmF5c2NhbGUtMzBcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZS10YWJdPVwiaXNBY3RpdmVUYWJcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkVGFiXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnZm9udC1ib2xkJzogaXNBY3RpdmVUYWIsXG4gICAgICAgICAgICAgICAgJ3RleHQtcHJpbWFyeSc6ICFpc0FjdGl2ZVRhYixcbiAgICAgICAgICAgICAgICAnYm9yZGVyLWItNCc6IGlzQWN0aXZlVGFiICYmIGlzSG9yaXpvbnRhbCxcbiAgICAgICAgICAgICAgICAnYm9yZGVyLXItNCc6IGlzQWN0aXZlVGFiICYmIGlzVmVydGljYWwsXG4gICAgICAgICAgICAgICAgJ2hvdmVyOmJvcmRlci1iLTQnOiBpc0hvcml6b250YWwgJiYgIWRpc2FibGVkVGFiLFxuICAgICAgICAgICAgICAgICdob3Zlcjpib3JkZXItci00JzogaXNWZXJ0aWNhbCAmJiAhZGlzYWJsZWRUYWIsXG4gICAgICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yJzogdGFiLmljb24oKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgICBAbGV0IGhlYWRlckVsZW1lbnQgPSB0YWIuaGVhZGVyRWxlbWVudCgpO1xuICAgICAgICAgICAgQGlmIChoZWFkZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckVsZW1lbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIEBpZiAodGFiLmljb24oKSkge1xuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWdyYXlzY2FsZS0xMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInRhYi5pY29uKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tYXgtdy0yOF09XCJpc0hvcml6b250YWxcIlxuICAgICAgICAgICAgICAgICAgICBbc1Rvb2x0aXBdPVwidGFiLmhlYWRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgW3Zpc2libGVdPVwiIWRpc2FibGVkVGFiXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrVHJ1bmNhdGVkVGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IHRhYi5oZWFkZXIoKSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyZW5kZXJDb21wb25lbnQ+XG4gICAgQGxldCB0ZW1wbGF0ZSA9IGFjdGl2ZVRhYkNvbXBvbmVudCgpO1xuICAgIEBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJoLWZ1bGwgbWluLWgtMTAgYmctZ3JheXNjYWxlLTAgcC0yXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVcIiAvPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgfVxuICAgIEBmb3IgKGtlZXBBbGl2ZVRhYiBvZiBrZWVwQWxpdmVUYWJzQ29udGVudCgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgQGxldCBpc0FjdGl2ZVRhYiA9IGtlZXBBbGl2ZVRhYi52YWx1ZSgpID09PSBhY3RpdmVUYWIoKTtcblxuICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICAgY2xhc3M9XCJoLWZ1bGwgbWluLWgtMTAgYmctZ3JheXNjYWxlLTAgcC0yXCJcbiAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWlzQWN0aXZlVGFiXCJcbiAgICAgICAgICAgIFtjbGFzcy5ibG9ja109XCJpc0FjdGl2ZVRhYlwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoa2VlcEFsaXZlVGFiLnRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwia2VlcEFsaXZlVGFiLnRlbXBsYXRlKCkhXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG5AaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgIDxzZWN0aW9uIGNsYXNzPVwicC0yXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdyaWQtZmxvdy1jb2wgb3ZlcmZsb3ctYXV0byBib3JkZXItYi1bMXB4XSBib3JkZXItYi1ncmF5c2NhbGUtMjBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zUmVuZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVuZGVyQ29tcG9uZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zZWN0aW9uPlxufSBAZWxzZSBpZiAoaXNWZXJ0aWNhbCkge1xuICAgIDxzZWN0aW9uIGNsYXNzPVwidmVydGljYWwtdGFiIGZsZXggdy1mdWxsIGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICA8YXNpZGUgY2xhc3M9XCJ2ZXJ0aWNhbC10YWItYnV0dG9ucyBmbGV4IG1heC1oLTk2IGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zUmVuZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYXNpZGU+XG4gICAgICAgIDxhc2lkZSBjbGFzcz1cInZlcnRpY2FsLXRhYi1jb250ZW50IGZsZXgtMVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlbmRlckNvbXBvbmVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2FzaWRlPlxuICAgIDwvc2VjdGlvbj5cbn1cbiJdfQ==
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvdGFicy9zcmMvbGliL3RhYnMvdGFicy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvdGFicy9zcmMvbGliL3RhYnMvdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNyRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFTbEUsTUFBTSxPQUFPLGFBQWE7SUFDTCxVQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUMvQixRQUFRLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFN0Msa0JBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNsRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDcEcsQ0FBQyxDQUFDLENBQUM7SUFFZ0Is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bXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGNvbnRlbnRDaGlsZHJlbiwgZWZmZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgSW50ZXJhY3RpdmVDb250ZW50RGlyZWN0aXZlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9pbnRlcmFjdGl2ZS1jb250ZW50JztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGFiSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYi1pdGVtL3RhYi1pdGVtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy10YWJzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtJbnRlcmFjdGl2ZUNvbnRlbnREaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXQsIE5nQ2xhc3NdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJzLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhYnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhYkl0ZW1zID0gY29udGVudENoaWxkcmVuKFRhYkl0ZW1Db21wb25lbnQpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjdGl2ZVRhYkNvbXBvbmVudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFiSXRlbXMoKS5maW5kKCh0YWIpID0+IHRhYi52YWx1ZSgpID09PSB0aGlzLmFjdGl2ZVRhYigpICYmIHRhYi50ZW1wbGF0ZUNvbnRlbnQoKSk7XG4gICAgfSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkga2VlcEFsaXZlVGFic0NvbnRlbnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYkl0ZW1zKCkuZmlsdGVyKFxuICAgICAgICAgICAgKHRhYikgPT4gIXRhYi50ZW1wbGF0ZUNvbnRlbnQoKSB8fCAodGFiLnRlbXBsYXRlQ29udGVudCgpICYmICF0YWIuZGVzdHJveU9uSGlkZSgpKSxcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFjdGl2ZVRhYiA9IG1vZGVsPHN0cmluZyB8IG51bWJlcj4oMCk7XG4gICAgbGF5b3V0VHlwZSA9IGlucHV0PCdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc+KCdob3Jpem9udGFsJyk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZVRhYkVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVRhYiA9IHRoaXMuYWN0aXZlVGFiKCk7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVRhYkNvbXBvbmVudCA9IHRoaXMudGFiSXRlbXMoKS5maW5kKCh0YWIpID0+IHRhYi52YWx1ZSgpID09PSBhY3RpdmVUYWIpO1xuICAgICAgICBpZiAoYWN0aXZlVGFiQ29tcG9uZW50ICYmICFhY3RpdmVUYWJDb21wb25lbnQuYWxyZWFkeU9wZW5lZCkge1xuICAgICAgICAgICAgYWN0aXZlVGFiQ29tcG9uZW50LmFscmVhZHlPcGVuZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdG9PYnNlcnZhYmxlKHRoaXMudGFiSXRlbXMpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYnMgPSB0aGlzLnRhYkl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgdGFicy5mb3JFYWNoKCh0YWIsICRpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJIYXNWYWx1ZSA9ICEhdGFiLnZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGFiSGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYi52YWx1ZS5zZXQoJGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkFjdGl2ZVRhYih0YWI6IFRhYkl0ZW1Db21wb25lbnQpIHtcbiAgICAgICAgaWYgKHRhYi5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgX3ByZXZpb3VzVGFiID0gdGhpcy50YWJJdGVtcygpLmZpbmQoKHRhYikgPT4gdGFiLnZhbHVlKCkgPT09IHRoaXMuYWN0aXZlVGFiKCkpO1xuICAgICAgICBpZiAoX3ByZXZpb3VzVGFiICYmICFfcHJldmlvdXNUYWIudGVtcGxhdGVDb250ZW50KCkgJiYgX3ByZXZpb3VzVGFiLmRlc3Ryb3lPbkhpZGUoKSkge1xuICAgICAgICAgICAgX3ByZXZpb3VzVGFiLnRlbXBsYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVUYWIuc2V0KHRhYi52YWx1ZSgpIGFzIHN0cmluZyB8IG51bWJlcik7XG4gICAgfVxufVxuXG4iLCJAbGV0IGxheW91dCA9IGxheW91dFR5cGUoKTtcbkBsZXQgaXNIb3Jpem9udGFsID0gbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5AbGV0IGlzVmVydGljYWwgPSBsYXlvdXQgPT09ICd2ZXJ0aWNhbCc7XG48bmctdGVtcGxhdGUgI2J1dHRvbnNSZW5kZXI+XG4gICAgQGZvciAodGFiIG9mIHRhYkl0ZW1zKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICBAbGV0IGlzQWN0aXZlVGFiID0gdGFiLnZhbHVlKCkgPT09IGFjdGl2ZVRhYigpO1xuICAgICAgICBAbGV0IGRpc2FibGVkVGFiID0gdGFiLmRpc2FibGVkKCk7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICN0YWJCdXR0b25cbiAgICAgICAgICAgIChzSW50ZXJhY3RpdmVDb250ZW50KT1cIm9uQWN0aXZlVGFiKHRhYilcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkVGFiXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBtaW4taC0xMSBtaW4tdy0yNCBqdXN0aWZ5LXN0YXJ0IHAtMiBob3Zlcjp0cmFuc2l0aW9uLWFsbFwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlLXRhYl09XCJpc0FjdGl2ZVRhYlwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2ZvbnQtYm9sZCc6IGlzQWN0aXZlVGFiLFxuICAgICAgICAgICAgICAgICd0ZXh0LXByaW1hcnknOiAhaXNBY3RpdmVUYWIgJiYgIWRpc2FibGVkVGFiLFxuICAgICAgICAgICAgICAgICd0ZXh0LWdyYXlzY2FsZS0zMCc6IGRpc2FibGVkVGFiLFxuICAgICAgICAgICAgICAgICdib3JkZXItYi00JzogaXNIb3Jpem9udGFsLFxuICAgICAgICAgICAgICAgICdib3JkZXItci00JzogaXNWZXJ0aWNhbCxcbiAgICAgICAgICAgICAgICAnYm9yZGVyLXByaW1hcnknOiBpc0FjdGl2ZVRhYiAmJiAhZGlzYWJsZWRUYWIsXG4gICAgICAgICAgICAgICAgJ2JvcmRlci10cmFuc3BhcmVudCc6ICFpc0FjdGl2ZVRhYiB8fCBkaXNhYmxlZFRhYixcbiAgICAgICAgICAgICAgICAnaG92ZXI6Ym9yZGVyLXByaW1hcnknOiAhZGlzYWJsZWRUYWIgJiYgIWlzQWN0aXZlVGFiLFxuICAgICAgICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMic6IHRhYi5pY29uKCksXG4gICAgICAgICAgICAgICAgJ2N1cnNvci1kZWZhdWx0JzogZGlzYWJsZWRUYWIsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGxldCBoZWFkZXJFbGVtZW50ID0gdGFiLmhlYWRlckVsZW1lbnQoKTtcbiAgICAgICAgICAgIEBpZiAoaGVhZGVyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJFbGVtZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBAaWYgKHRhYi5pY29uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ncmF5c2NhbGUtMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ0YWIuaWNvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJibG9jayB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAnY3Vyc29yLWRlZmF1bHQnOiBkaXNhYmxlZFRhYixcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyB0YWIuaGVhZGVyKCkgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmVuZGVyQ29tcG9uZW50PlxuICAgIEBsZXQgX2FjdGl2ZVRhYiA9IGFjdGl2ZVRhYkNvbXBvbmVudCgpO1xuICAgIEBsZXQgdGVtcGxhdGUgPSBfYWN0aXZlVGFiPy50ZW1wbGF0ZUNvbnRlbnQoKSE7XG4gICAgQGlmIChfYWN0aXZlVGFiICYmIHRlbXBsYXRlICYmICFfYWN0aXZlVGFiLmRpc2FibGVkKCkgJiYgX2FjdGl2ZVRhYi5kZXN0cm95T25IaWRlKCkpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJoLWZ1bGwgbWluLWgtMTAgYmctZ3JheXNjYWxlLTAgcC0yXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVcIiAvPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgfVxuICAgIEBmb3IgKGtlZXBBbGl2ZVRhYiBvZiBrZWVwQWxpdmVUYWJzQ29udGVudCgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgQGxldCBpc0FjdGl2ZVRhYiA9IGtlZXBBbGl2ZVRhYi52YWx1ZSgpID09PSBhY3RpdmVUYWIoKTtcblxuICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICAgY2xhc3M9XCJoLWZ1bGwgbWluLWgtMTAgYmctZ3JheXNjYWxlLTAgcC0yXCJcbiAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIWlzQWN0aXZlVGFiXCJcbiAgICAgICAgICAgIFtjbGFzcy5ibG9ja109XCJpc0FjdGl2ZVRhYlwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoa2VlcEFsaXZlVGFiLnRlbXBsYXRlKCkgJiYga2VlcEFsaXZlVGFiLmFscmVhZHlPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwia2VlcEFsaXZlVGFiLnRlbXBsYXRlKCkhXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG5AaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgIDxzZWN0aW9uIGNsYXNzPVwicC0yXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdyaWQtZmxvdy1jb2wgb3ZlcmZsb3ctYXV0byBib3JkZXItYi1bMXB4XSBib3JkZXItYi1ncmF5c2NhbGUtMjBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zUmVuZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVuZGVyQ29tcG9uZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zZWN0aW9uPlxufSBAZWxzZSBpZiAoaXNWZXJ0aWNhbCkge1xuICAgIDxzZWN0aW9uIGNsYXNzPVwidmVydGljYWwtdGFiIGZsZXggdy1mdWxsIGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICA8YXNpZGUgY2xhc3M9XCJmbGV4IG1heC1oLTk2IGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zUmVuZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYXNpZGU+XG4gICAgICAgIDxhc2lkZSBjbGFzcz1cInZlcnRpY2FsLXRhYi1jb250ZW50IGZsZXgtMVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlbmRlckNvbXBvbmVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2FzaWRlPlxuICAgIDwvc2VjdGlvbj5cbn1cblxuIl19
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { NgTemplateOutlet, NgClass } from '@angular/common';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { viewChild, contentChildren, computed, input, model, Component } from '@angular/core';
|
|
3
|
+
import { viewChild, contentChildren, computed, input, model, Component, effect } from '@angular/core';
|
|
4
4
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
5
|
-
import {
|
|
5
|
+
import { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';
|
|
6
6
|
import { Subject, takeUntil } from 'rxjs';
|
|
7
7
|
import { TemplateDirective } from '@seniorsistemas/angular-components/template';
|
|
8
|
-
import { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';
|
|
9
8
|
|
|
10
9
|
class TabItemComponent {
|
|
11
10
|
_template = viewChild('template');
|
|
@@ -26,6 +25,7 @@ class TabItemComponent {
|
|
|
26
25
|
headerElement = computed(() => {
|
|
27
26
|
return this.headerTemplateDirectives()?.find((x) => x.type === 'header')?.template;
|
|
28
27
|
});
|
|
28
|
+
alreadyOpened = false;
|
|
29
29
|
ngAfterViewInit() {
|
|
30
30
|
if (this.destroyOnHide() && !this.templateContent()) {
|
|
31
31
|
console.error("When destroyOnHide is true sTemplate='body' is required");
|
|
@@ -33,26 +33,35 @@ class TabItemComponent {
|
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
35
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
36
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.14", type: TabItemComponent, isStandalone: true, selector: "s-tab-item", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, destroyOnHide: { classPropertyName: "destroyOnHide", publicName: "destroyOnHide", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, queries: [{ propertyName: "headerTemplateDirectives", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: "_template", first: true, predicate: ["template"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #template>\n <ng-content></ng-content>\n</ng-template>\n" });
|
|
36
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.14", type: TabItemComponent, isStandalone: true, selector: "s-tab-item", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, destroyOnHide: { classPropertyName: "destroyOnHide", publicName: "destroyOnHide", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, queries: [{ propertyName: "headerTemplateDirectives", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: "_template", first: true, predicate: ["template"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #template>\n <ng-content></ng-content>\n</ng-template>\n\n" });
|
|
37
37
|
}
|
|
38
38
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabItemComponent, decorators: [{
|
|
39
39
|
type: Component,
|
|
40
|
-
args: [{ selector: 's-tab-item', standalone: true, template: "<ng-template #template>\n <ng-content></ng-content>\n</ng-template>\n" }]
|
|
40
|
+
args: [{ selector: 's-tab-item', standalone: true, imports: [], template: "<ng-template #template>\n <ng-content></ng-content>\n</ng-template>\n\n" }]
|
|
41
41
|
}] });
|
|
42
42
|
|
|
43
43
|
class TabsComponent {
|
|
44
44
|
onDestroy$ = new Subject();
|
|
45
45
|
tabItems = contentChildren(TabItemComponent);
|
|
46
46
|
activeTabComponent = computed(() => {
|
|
47
|
-
return this.tabItems().find((tab) => tab.value() === this.activeTab() && tab.
|
|
47
|
+
return this.tabItems().find((tab) => tab.value() === this.activeTab() && tab.templateContent());
|
|
48
48
|
});
|
|
49
49
|
keepAliveTabsContent = computed(() => {
|
|
50
|
-
return this.tabItems().filter((tab) => !tab.destroyOnHide());
|
|
50
|
+
return this.tabItems().filter((tab) => !tab.templateContent() || (tab.templateContent() && !tab.destroyOnHide()));
|
|
51
51
|
});
|
|
52
52
|
activeTab = model(0);
|
|
53
53
|
layoutType = input('horizontal');
|
|
54
|
+
activeTabEffect = effect(() => {
|
|
55
|
+
const activeTab = this.activeTab();
|
|
56
|
+
const activeTabComponent = this.tabItems().find((tab) => tab.value() === activeTab);
|
|
57
|
+
if (activeTabComponent && !activeTabComponent.alreadyOpened) {
|
|
58
|
+
activeTabComponent.alreadyOpened = true;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
54
61
|
constructor() {
|
|
55
|
-
toObservable(this.tabItems)
|
|
62
|
+
toObservable(this.tabItems)
|
|
63
|
+
.pipe(takeUntil(this.onDestroy$))
|
|
64
|
+
.subscribe(() => {
|
|
56
65
|
const tabs = this.tabItems();
|
|
57
66
|
tabs.forEach((tab, $index) => {
|
|
58
67
|
const tabHasValue = !!tab.value();
|
|
@@ -64,6 +73,7 @@ class TabsComponent {
|
|
|
64
73
|
}
|
|
65
74
|
ngOnDestroy() {
|
|
66
75
|
this.onDestroy$.next();
|
|
76
|
+
this.onDestroy$.complete();
|
|
67
77
|
}
|
|
68
78
|
onActiveTab(tab) {
|
|
69
79
|
if (tab.disabled()) {
|
|
@@ -76,11 +86,11 @@ class TabsComponent {
|
|
|
76
86
|
this.activeTab.set(tab.value());
|
|
77
87
|
}
|
|
78
88
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
79
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TabsComponent, isStandalone: true, selector: "s-tabs", inputs: { activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null }, layoutType: { classPropertyName: "layoutType", publicName: "layoutType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeTab: "activeTabChange" }, queries: [{ propertyName: "tabItems", predicate: TabItemComponent, isSignal: true }], ngImport: i0, template: "@let layout = layoutType();\n@let isHorizontal = layout === 'horizontal';\n@let isVertical = layout === 'vertical';\n<ng-template #buttonsRender>\n @for (tab of tabItems(); track $index) {\n @let isActiveTab = tab.value() === activeTab();\n @let disabledTab = tab.disabled();\n <button\n #tabButton\n (sInteractiveContent)=\"onActiveTab(tab)\"\n class=\"flex min-h-11 min-w-24 justify-start
|
|
89
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TabsComponent, isStandalone: true, selector: "s-tabs", inputs: { activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null }, layoutType: { classPropertyName: "layoutType", publicName: "layoutType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeTab: "activeTabChange" }, queries: [{ propertyName: "tabItems", predicate: TabItemComponent, isSignal: true }], ngImport: i0, template: "@let layout = layoutType();\n@let isHorizontal = layout === 'horizontal';\n@let isVertical = layout === 'vertical';\n<ng-template #buttonsRender>\n @for (tab of tabItems(); track $index) {\n @let isActiveTab = tab.value() === activeTab();\n @let disabledTab = tab.disabled();\n <button\n #tabButton\n (sInteractiveContent)=\"onActiveTab(tab)\"\n [disabled]=\"disabledTab\"\n class=\"flex min-h-11 min-w-24 justify-start p-2 hover:transition-all\"\n [class.active-tab]=\"isActiveTab\"\n [ngClass]=\"{\n 'font-bold': isActiveTab,\n 'text-primary': !isActiveTab && !disabledTab,\n 'text-grayscale-30': disabledTab,\n 'border-b-4': isHorizontal,\n 'border-r-4': isVertical,\n 'border-primary': isActiveTab && !disabledTab,\n 'border-transparent': !isActiveTab || disabledTab,\n 'hover:border-primary': !disabledTab && !isActiveTab,\n 'flex items-center gap-2': tab.icon(),\n 'cursor-default': disabledTab,\n }\"\n >\n @let headerElement = tab.headerElement();\n @if (headerElement) {\n <ng-container *ngTemplateOutlet=\"headerElement\"></ng-container>\n } @else {\n @if (tab.icon()) {\n <i\n class=\"text-grayscale-100\"\n [class]=\"tab.icon()\"\n ></i>\n }\n <span\n class=\"block text-left\"\n [ngClass]=\"{\n 'cursor-default': disabledTab,\n }\"\n >\n {{ tab.header() }}\n </span>\n }\n </button>\n }\n</ng-template>\n\n<ng-template #renderComponent>\n @let _activeTab = activeTabComponent();\n @let template = _activeTab?.templateContent()!;\n @if (_activeTab && template && !_activeTab.disabled() && _activeTab.destroyOnHide()) {\n <section class=\"h-full min-h-10 bg-grayscale-0 p-2\">\n <ng-container *ngTemplateOutlet=\"template\" />\n </section>\n }\n @for (keepAliveTab of keepAliveTabsContent(); track $index) {\n @let isActiveTab = keepAliveTab.value() === activeTab();\n\n <section\n class=\"h-full min-h-10 bg-grayscale-0 p-2\"\n [class.hidden]=\"!isActiveTab\"\n [class.block]=\"isActiveTab\"\n >\n @if (keepAliveTab.template() && keepAliveTab.alreadyOpened) {\n <ng-container *ngTemplateOutlet=\"keepAliveTab.template()!\"></ng-container>\n }\n </section>\n }\n</ng-template>\n\n@if (isHorizontal) {\n <section class=\"p-2\">\n <div class=\"flex grid-flow-col overflow-auto border-b-[1px] border-b-grayscale-20\">\n <ng-container *ngTemplateOutlet=\"buttonsRender\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"renderComponent\"></ng-container>\n </section>\n} @else if (isVertical) {\n <section class=\"vertical-tab flex w-full flex-wrap gap-2\">\n <aside class=\"flex max-h-96 flex-col overflow-auto\">\n <ng-container *ngTemplateOutlet=\"buttonsRender\"></ng-container>\n </aside>\n <aside class=\"vertical-tab-content flex-1\">\n <ng-container *ngTemplateOutlet=\"renderComponent\"></ng-container>\n </aside>\n </section>\n}\n\n", styles: [".vertical-tab{container:vertical-tab/inline-size}.vertical-tab-content{min-width:20rem}@container vertical-tab (max-width: 552px){.vertical-tab-buttons{width:100%;flex-direction:row}.vertical-tab-buttons .active-tab,.vertical-tab-buttons button:hover{border-right:none;border-bottom-width:4px}}\n"], dependencies: [{ kind: "directive", type: InteractiveContentDirective, selector: "[sInteractiveContent]", inputs: ["focusable", "disabled", "stopPropagation"], outputs: ["sInteractiveContent"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
80
90
|
}
|
|
81
91
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabsComponent, decorators: [{
|
|
82
92
|
type: Component,
|
|
83
|
-
args: [{ selector: 's-tabs', standalone: true, imports: [InteractiveContentDirective, NgTemplateOutlet, NgClass
|
|
93
|
+
args: [{ selector: 's-tabs', standalone: true, imports: [InteractiveContentDirective, NgTemplateOutlet, NgClass], template: "@let layout = layoutType();\n@let isHorizontal = layout === 'horizontal';\n@let isVertical = layout === 'vertical';\n<ng-template #buttonsRender>\n @for (tab of tabItems(); track $index) {\n @let isActiveTab = tab.value() === activeTab();\n @let disabledTab = tab.disabled();\n <button\n #tabButton\n (sInteractiveContent)=\"onActiveTab(tab)\"\n [disabled]=\"disabledTab\"\n class=\"flex min-h-11 min-w-24 justify-start p-2 hover:transition-all\"\n [class.active-tab]=\"isActiveTab\"\n [ngClass]=\"{\n 'font-bold': isActiveTab,\n 'text-primary': !isActiveTab && !disabledTab,\n 'text-grayscale-30': disabledTab,\n 'border-b-4': isHorizontal,\n 'border-r-4': isVertical,\n 'border-primary': isActiveTab && !disabledTab,\n 'border-transparent': !isActiveTab || disabledTab,\n 'hover:border-primary': !disabledTab && !isActiveTab,\n 'flex items-center gap-2': tab.icon(),\n 'cursor-default': disabledTab,\n }\"\n >\n @let headerElement = tab.headerElement();\n @if (headerElement) {\n <ng-container *ngTemplateOutlet=\"headerElement\"></ng-container>\n } @else {\n @if (tab.icon()) {\n <i\n class=\"text-grayscale-100\"\n [class]=\"tab.icon()\"\n ></i>\n }\n <span\n class=\"block text-left\"\n [ngClass]=\"{\n 'cursor-default': disabledTab,\n }\"\n >\n {{ tab.header() }}\n </span>\n }\n </button>\n }\n</ng-template>\n\n<ng-template #renderComponent>\n @let _activeTab = activeTabComponent();\n @let template = _activeTab?.templateContent()!;\n @if (_activeTab && template && !_activeTab.disabled() && _activeTab.destroyOnHide()) {\n <section class=\"h-full min-h-10 bg-grayscale-0 p-2\">\n <ng-container *ngTemplateOutlet=\"template\" />\n </section>\n }\n @for (keepAliveTab of keepAliveTabsContent(); track $index) {\n @let isActiveTab = keepAliveTab.value() === activeTab();\n\n <section\n class=\"h-full min-h-10 bg-grayscale-0 p-2\"\n [class.hidden]=\"!isActiveTab\"\n [class.block]=\"isActiveTab\"\n >\n @if (keepAliveTab.template() && keepAliveTab.alreadyOpened) {\n <ng-container *ngTemplateOutlet=\"keepAliveTab.template()!\"></ng-container>\n }\n </section>\n }\n</ng-template>\n\n@if (isHorizontal) {\n <section class=\"p-2\">\n <div class=\"flex grid-flow-col overflow-auto border-b-[1px] border-b-grayscale-20\">\n <ng-container *ngTemplateOutlet=\"buttonsRender\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"renderComponent\"></ng-container>\n </section>\n} @else if (isVertical) {\n <section class=\"vertical-tab flex w-full flex-wrap gap-2\">\n <aside class=\"flex max-h-96 flex-col overflow-auto\">\n <ng-container *ngTemplateOutlet=\"buttonsRender\"></ng-container>\n </aside>\n <aside class=\"vertical-tab-content flex-1\">\n <ng-container *ngTemplateOutlet=\"renderComponent\"></ng-container>\n </aside>\n </section>\n}\n\n", styles: [".vertical-tab{container:vertical-tab/inline-size}.vertical-tab-content{min-width:20rem}@container vertical-tab (max-width: 552px){.vertical-tab-buttons{width:100%;flex-direction:row}.vertical-tab-buttons .active-tab,.vertical-tab-buttons button:hover{border-right:none;border-bottom-width:4px}}\n"] }]
|
|
84
94
|
}], ctorParameters: () => [] });
|
|
85
95
|
|
|
86
96
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-tabs.mjs","sources":["../../projects/angular-components/tabs/src/lib/tab-item/tab-item.component.ts","../../projects/angular-components/tabs/src/lib/tab-item/tab-item.component.html","../../projects/angular-components/tabs/src/lib/tabs/tabs.component.ts","../../projects/angular-components/tabs/src/lib/tabs/tabs.component.html","../../projects/angular-components/tabs/src/seniorsistemas-angular-components-tabs.ts"],"sourcesContent":["import { AfterViewInit, Component, computed, contentChildren, input, model, TemplateRef, viewChild } from '@angular/core';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\n\n@Component({\n selector: 's-tab-item',\n standalone: true,\n templateUrl: './tab-item.component.html',\n})\nexport class TabItemComponent implements AfterViewInit {\n readonly _template = viewChild<TemplateRef<any>>('template');\n readonly headerTemplateDirectives = contentChildren(TemplateDirective);\n readonly templateContent = computed(() => {\n return this.headerTemplateDirectives()?.find((x) => x.type === 'body')?.template;\n })\n icon = input<string>();\n header = input<string>();\n disabled = input<boolean>(false);\n value = model<string | number>();\n destroyOnHide = input(false);\n template = computed(() => {\n const _template = this._template();\n const templateContent = this.templateContent();\n return templateContent ? templateContent : _template;\n })\n headerElement = computed(() => {\n return this.headerTemplateDirectives()?.find((x) => x.type === 'header')?.template;\n })\n\n ngAfterViewInit(): void {\n if (this.destroyOnHide() && !this.templateContent()) {\n console.error(\"When destroyOnHide is true sTemplate='body' is required\")\n }\n return;\n\n }\n}\n","<ng-template #template>\n <ng-content></ng-content>\n</ng-template>\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, contentChildren, input, model, OnDestroy } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { TooltipDirective } from '@seniorsistemas/angular-components/tooltip';\nimport { Subject, takeUntil } from 'rxjs';\nimport { TabItemComponent } from '../tab-item/tab-item.component';\nimport { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';\n\n@Component({\n selector: 's-tabs',\n standalone: true,\n imports: [InteractiveContentDirective, NgTemplateOutlet, NgClass, TooltipDirective],\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss']\n})\nexport class TabsComponent implements OnDestroy {\n private readonly onDestroy$ = new Subject<void>();\n protected readonly tabItems = contentChildren(TabItemComponent);\n\n protected readonly activeTabComponent = computed(() => {\n return this.tabItems().find((tab) => tab.value() === this.activeTab() && tab.destroyOnHide())?.template();\n })\n\n protected readonly keepAliveTabsContent = computed(() => {\n return this.tabItems().filter((tab) => !tab.destroyOnHide())\n })\n\n activeTab = model<string | number>(0);\n layoutType = input<'horizontal' | 'vertical'>('horizontal');\n\n constructor() {\n toObservable(this.tabItems).pipe(takeUntil(this.onDestroy$)).subscribe(() => {\n const tabs = this.tabItems();\n tabs.forEach((tab, $index) => {\n const tabHasValue = !!tab.value();\n if (!tabHasValue) {\n tab.value.set($index);\n }\n })\n })\n }\n\n ngOnDestroy(): void {\n this.onDestroy$.next();\n }\n\n protected onActiveTab(tab: TabItemComponent) {\n if (tab.disabled()) {\n return;\n }\n const _previousTab = this.tabItems().find((tab) => tab.value() === this.activeTab());\n if (_previousTab && !_previousTab.templateContent() && _previousTab.destroyOnHide()) {\n _previousTab.template()\n }\n this.activeTab.set(tab.value() as string | number);\n }\n\n}\n","@let layout = layoutType();\n@let isHorizontal = layout === 'horizontal';\n@let isVertical = layout === 'vertical';\n<ng-template #buttonsRender>\n @for (tab of tabItems(); track $index) {\n @let isActiveTab = tab.value() === activeTab();\n @let disabledTab = tab.disabled();\n <button\n #tabButton\n (sInteractiveContent)=\"onActiveTab(tab)\"\n class=\"flex min-h-11 min-w-24 justify-start overflow-hidden text-ellipsis whitespace-nowrap border-primary p-2 hover:transition-all disabled:border-grayscale-30 disabled:text-grayscale-30\"\n [class.active-tab]=\"isActiveTab\"\n [disabled]=\"disabledTab\"\n [ngClass]=\"{\n 'font-bold': isActiveTab,\n 'text-primary': !isActiveTab,\n 'border-b-4': isActiveTab && isHorizontal,\n 'border-r-4': isActiveTab && isVertical,\n 'hover:border-b-4': isHorizontal && !disabledTab,\n 'hover:border-r-4': isVertical && !disabledTab,\n 'flex items-center gap-2': tab.icon(),\n }\"\n >\n @let headerElement = tab.headerElement();\n @if (headerElement) {\n <ng-container *ngTemplateOutlet=\"headerElement\"></ng-container>\n } @else {\n @if (tab.icon()) {\n <i\n class=\"text-grayscale-100\"\n [class]=\"tab.icon()\"\n ></i>\n }\n <span\n class=\"block overflow-hidden text-ellipsis whitespace-nowrap text-left\"\n [class.max-w-28]=\"isHorizontal\"\n [sTooltip]=\"tab.header()\"\n [visible]=\"!disabledTab\"\n [checkTruncatedText]=\"true\"\n >\n {{ tab.header() }}\n </span>\n }\n </button>\n }\n</ng-template>\n\n<ng-template #renderComponent>\n @let template = activeTabComponent();\n @if (template) {\n <section class=\"h-full min-h-10 bg-grayscale-0 p-2\">\n <ng-container *ngTemplateOutlet=\"template\" />\n </section>\n }\n @for (keepAliveTab of keepAliveTabsContent(); track $index) {\n @let isActiveTab = keepAliveTab.value() === activeTab();\n\n <section\n class=\"h-full min-h-10 bg-grayscale-0 p-2\"\n [class.hidden]=\"!isActiveTab\"\n [class.block]=\"isActiveTab\"\n >\n @if (keepAliveTab.template()) {\n <ng-container *ngTemplateOutlet=\"keepAliveTab.template()!\"></ng-container>\n }\n </section>\n }\n</ng-template>\n\n@if (isHorizontal) {\n <section class=\"p-2\">\n <div class=\"flex grid-flow-col overflow-auto border-b-[1px] border-b-grayscale-20\">\n <ng-container *ngTemplateOutlet=\"buttonsRender\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"renderComponent\"></ng-container>\n </section>\n} @else if (isVertical) {\n <section class=\"vertical-tab flex w-full flex-wrap gap-2\">\n <aside class=\"vertical-tab-buttons flex max-h-96 flex-col overflow-auto\">\n <ng-container *ngTemplateOutlet=\"buttonsRender\"></ng-container>\n </aside>\n <aside class=\"vertical-tab-content flex-1\">\n <ng-container *ngTemplateOutlet=\"renderComponent\"></ng-container>\n </aside>\n </section>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-tabs.mjs","sources":["../../projects/angular-components/tabs/src/lib/tab-item/tab-item.component.ts","../../projects/angular-components/tabs/src/lib/tab-item/tab-item.component.html","../../projects/angular-components/tabs/src/lib/tabs/tabs.component.ts","../../projects/angular-components/tabs/src/lib/tabs/tabs.component.html","../../projects/angular-components/tabs/src/seniorsistemas-angular-components-tabs.ts"],"sourcesContent":["import {\n AfterViewInit,\n Component,\n computed,\n contentChildren,\n input,\n model,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\n\n@Component({\n selector: 's-tab-item',\n standalone: true,\n templateUrl: './tab-item.component.html',\n imports: [],\n})\nexport class TabItemComponent implements AfterViewInit {\n readonly _template = viewChild<TemplateRef<any>>('template');\n readonly headerTemplateDirectives = contentChildren(TemplateDirective);\n readonly templateContent = computed(() => {\n return this.headerTemplateDirectives()?.find((x) => x.type === 'body')?.template;\n });\n icon = input<string>();\n header = input<string>();\n disabled = input<boolean>(false);\n value = model<string | number>();\n destroyOnHide = input(false);\n template = computed(() => {\n const _template = this._template();\n const templateContent = this.templateContent();\n return templateContent ? templateContent : _template;\n });\n headerElement = computed(() => {\n return this.headerTemplateDirectives()?.find((x) => x.type === 'header')?.template;\n });\n\n alreadyOpened = false;\n\n ngAfterViewInit(): void {\n if (this.destroyOnHide() && !this.templateContent()) {\n console.error(\"When destroyOnHide is true sTemplate='body' is required\");\n }\n return;\n }\n}\n\n","<ng-template #template>\n <ng-content></ng-content>\n</ng-template>\n\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, contentChildren, effect, input, model, OnDestroy } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';\nimport { Subject, takeUntil } from 'rxjs';\nimport { TabItemComponent } from '../tab-item/tab-item.component';\n\n@Component({\n selector: 's-tabs',\n standalone: true,\n imports: [InteractiveContentDirective, NgTemplateOutlet, NgClass],\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n})\nexport class TabsComponent implements OnDestroy {\n private readonly onDestroy$ = new Subject<void>();\n protected readonly tabItems = contentChildren(TabItemComponent);\n\n protected readonly activeTabComponent = computed(() => {\n return this.tabItems().find((tab) => tab.value() === this.activeTab() && tab.templateContent());\n });\n\n protected readonly keepAliveTabsContent = computed(() => {\n return this.tabItems().filter(\n (tab) => !tab.templateContent() || (tab.templateContent() && !tab.destroyOnHide()),\n );\n });\n\n activeTab = model<string | number>(0);\n layoutType = input<'horizontal' | 'vertical'>('horizontal');\n\n private readonly activeTabEffect = effect(() => {\n const activeTab = this.activeTab();\n const activeTabComponent = this.tabItems().find((tab) => tab.value() === activeTab);\n if (activeTabComponent && !activeTabComponent.alreadyOpened) {\n activeTabComponent.alreadyOpened = true;\n }\n });\n\n constructor() {\n toObservable(this.tabItems)\n .pipe(takeUntil(this.onDestroy$))\n .subscribe(() => {\n const tabs = this.tabItems();\n tabs.forEach((tab, $index) => {\n const tabHasValue = !!tab.value();\n if (!tabHasValue) {\n tab.value.set($index);\n }\n });\n });\n }\n\n ngOnDestroy(): void {\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n\n protected onActiveTab(tab: TabItemComponent) {\n if (tab.disabled()) {\n return;\n }\n const _previousTab = this.tabItems().find((tab) => tab.value() === this.activeTab());\n if (_previousTab && !_previousTab.templateContent() && _previousTab.destroyOnHide()) {\n _previousTab.template();\n }\n this.activeTab.set(tab.value() as string | number);\n }\n}\n\n","@let layout = layoutType();\n@let isHorizontal = layout === 'horizontal';\n@let isVertical = layout === 'vertical';\n<ng-template #buttonsRender>\n @for (tab of tabItems(); track $index) {\n @let isActiveTab = tab.value() === activeTab();\n @let disabledTab = tab.disabled();\n <button\n #tabButton\n (sInteractiveContent)=\"onActiveTab(tab)\"\n [disabled]=\"disabledTab\"\n class=\"flex min-h-11 min-w-24 justify-start p-2 hover:transition-all\"\n [class.active-tab]=\"isActiveTab\"\n [ngClass]=\"{\n 'font-bold': isActiveTab,\n 'text-primary': !isActiveTab && !disabledTab,\n 'text-grayscale-30': disabledTab,\n 'border-b-4': isHorizontal,\n 'border-r-4': isVertical,\n 'border-primary': isActiveTab && !disabledTab,\n 'border-transparent': !isActiveTab || disabledTab,\n 'hover:border-primary': !disabledTab && !isActiveTab,\n 'flex items-center gap-2': tab.icon(),\n 'cursor-default': disabledTab,\n }\"\n >\n @let headerElement = tab.headerElement();\n @if (headerElement) {\n <ng-container *ngTemplateOutlet=\"headerElement\"></ng-container>\n } @else {\n @if (tab.icon()) {\n <i\n class=\"text-grayscale-100\"\n [class]=\"tab.icon()\"\n ></i>\n }\n <span\n class=\"block text-left\"\n [ngClass]=\"{\n 'cursor-default': disabledTab,\n }\"\n >\n {{ tab.header() }}\n </span>\n }\n </button>\n }\n</ng-template>\n\n<ng-template #renderComponent>\n @let _activeTab = activeTabComponent();\n @let template = _activeTab?.templateContent()!;\n @if (_activeTab && template && !_activeTab.disabled() && _activeTab.destroyOnHide()) {\n <section class=\"h-full min-h-10 bg-grayscale-0 p-2\">\n <ng-container *ngTemplateOutlet=\"template\" />\n </section>\n }\n @for (keepAliveTab of keepAliveTabsContent(); track $index) {\n @let isActiveTab = keepAliveTab.value() === activeTab();\n\n <section\n class=\"h-full min-h-10 bg-grayscale-0 p-2\"\n [class.hidden]=\"!isActiveTab\"\n [class.block]=\"isActiveTab\"\n >\n @if (keepAliveTab.template() && keepAliveTab.alreadyOpened) {\n <ng-container *ngTemplateOutlet=\"keepAliveTab.template()!\"></ng-container>\n }\n </section>\n }\n</ng-template>\n\n@if (isHorizontal) {\n <section class=\"p-2\">\n <div class=\"flex grid-flow-col overflow-auto border-b-[1px] border-b-grayscale-20\">\n <ng-container *ngTemplateOutlet=\"buttonsRender\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"renderComponent\"></ng-container>\n </section>\n} @else if (isVertical) {\n <section class=\"vertical-tab flex w-full flex-wrap gap-2\">\n <aside class=\"flex max-h-96 flex-col overflow-auto\">\n <ng-container *ngTemplateOutlet=\"buttonsRender\"></ng-container>\n </aside>\n <aside class=\"vertical-tab-content flex-1\">\n <ng-container *ngTemplateOutlet=\"renderComponent\"></ng-container>\n </aside>\n </section>\n}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seniorsistemas/angular-components",
|
|
3
|
-
"version": "18.1.
|
|
3
|
+
"version": "18.1.4",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/cdk": "^18.2.14",
|
|
6
6
|
"@angular/common": "^18.2.0",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"ng2-currency-mask": "13.0.3",
|
|
15
15
|
"primeng": "^18.0.2",
|
|
16
16
|
"marked": "15.0.7",
|
|
17
|
-
"cropperjs": "
|
|
17
|
+
"cropperjs": "^1.6.2",
|
|
18
18
|
"angular2-hotkeys": "16.0.1",
|
|
19
19
|
"@fortawesome/fontawesome-pro": "5.15.3"
|
|
20
20
|
},
|
|
@@ -64,18 +64,18 @@
|
|
|
64
64
|
"esm": "./esm2022/bignumber-input/seniorsistemas-angular-components-bignumber-input.mjs",
|
|
65
65
|
"default": "./fesm2022/seniorsistemas-angular-components-bignumber-input.mjs"
|
|
66
66
|
},
|
|
67
|
-
"./button": {
|
|
68
|
-
"types": "./button/index.d.ts",
|
|
69
|
-
"esm2022": "./esm2022/button/seniorsistemas-angular-components-button.mjs",
|
|
70
|
-
"esm": "./esm2022/button/seniorsistemas-angular-components-button.mjs",
|
|
71
|
-
"default": "./fesm2022/seniorsistemas-angular-components-button.mjs"
|
|
72
|
-
},
|
|
73
67
|
"./breadcrumb": {
|
|
74
68
|
"types": "./breadcrumb/index.d.ts",
|
|
75
69
|
"esm2022": "./esm2022/breadcrumb/seniorsistemas-angular-components-breadcrumb.mjs",
|
|
76
70
|
"esm": "./esm2022/breadcrumb/seniorsistemas-angular-components-breadcrumb.mjs",
|
|
77
71
|
"default": "./fesm2022/seniorsistemas-angular-components-breadcrumb.mjs"
|
|
78
72
|
},
|
|
73
|
+
"./button": {
|
|
74
|
+
"types": "./button/index.d.ts",
|
|
75
|
+
"esm2022": "./esm2022/button/seniorsistemas-angular-components-button.mjs",
|
|
76
|
+
"esm": "./esm2022/button/seniorsistemas-angular-components-button.mjs",
|
|
77
|
+
"default": "./fesm2022/seniorsistemas-angular-components-button.mjs"
|
|
78
|
+
},
|
|
79
79
|
"./calendar-mask": {
|
|
80
80
|
"types": "./calendar-mask/index.d.ts",
|
|
81
81
|
"esm2022": "./esm2022/calendar-mask/seniorsistemas-angular-components-calendar-mask.mjs",
|
|
@@ -12,6 +12,7 @@ export declare class TabItemComponent implements AfterViewInit {
|
|
|
12
12
|
destroyOnHide: import("@angular/core").InputSignal<boolean>;
|
|
13
13
|
template: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
14
14
|
headerElement: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
15
|
+
alreadyOpened: boolean;
|
|
15
16
|
ngAfterViewInit(): void;
|
|
16
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<TabItemComponent, never>;
|
|
17
18
|
static ɵcmp: i0.ɵɵComponentDeclaration<TabItemComponent, "s-tab-item", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "destroyOnHide": { "alias": "destroyOnHide"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, ["headerTemplateDirectives"], ["*"], true, never>;
|
|
@@ -4,10 +4,11 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
export declare class TabsComponent implements OnDestroy {
|
|
5
5
|
private readonly onDestroy$;
|
|
6
6
|
protected readonly tabItems: import("@angular/core").Signal<readonly TabItemComponent[]>;
|
|
7
|
-
protected readonly activeTabComponent: import("@angular/core").Signal<
|
|
7
|
+
protected readonly activeTabComponent: import("@angular/core").Signal<TabItemComponent | undefined>;
|
|
8
8
|
protected readonly keepAliveTabsContent: import("@angular/core").Signal<TabItemComponent[]>;
|
|
9
9
|
activeTab: import("@angular/core").ModelSignal<string | number>;
|
|
10
10
|
layoutType: import("@angular/core").InputSignal<"horizontal" | "vertical">;
|
|
11
|
+
private readonly activeTabEffect;
|
|
11
12
|
constructor();
|
|
12
13
|
ngOnDestroy(): void;
|
|
13
14
|
protected onActiveTab(tab: TabItemComponent): void;
|