sintia_design_system 1.3.0
sintia_design_system: ^1.3.0 copied to clipboard
Sistema de diseño de Sintia para Flutter, organizado con Atomic Design: tokens, theming configurable y componentes listos para producción.
1.3.0 #
Selector desplegable, personalización del diálogo y overrides puntuales de
color, radio y tipografía para SintiaButton y SintiaSegmentedControl.
Compatible con la 1.2.0: no cambia ninguna API existente.
Agregado #
SintiaDropdown<T>: selector desplegable con la misma decoración queSintiaTextField(relleno, borde, radio y estados de foco y error desdeinputDecorationTheme), así que ambos conviven en un formulario sin desentonar. Soporta etiqueta externa, hint, ayuda, error, ícono, validación de formulario yitemTextStyle/menuBackgroundColor/borderRadiuscomo overrides puntuales del menú desplegado.SintiaDropdownItem<T>: modelo de cada opción (valor genérico,label,iconyenabled).SintiaButton.labelStyle: tipografía de la etiqueta (peso, tamaño, familia) sin tocar el color, que sigue saliendo deforegroundColor.SintiaSegmentedControl.selectedBackgroundColor,.selectedForegroundColor,.unselectedBackgroundColor,.unselectedForegroundColor,.selectedLabelStyle,.unselectedLabelStyley.borderRadius: overrides puntuales de color, radio y estilo de texto, por separado para el segmento activo y los inactivos.SintiaDialog.widthy.height: dimensiones fijas para un diálogo puntual; conheightfijo, el contenido que no entra scrollea en vez de desbordar.SintiaDialog.titleColory.titleStyle: color y tipografía del título por separado, con la misma precedencia queSintiaButton.foregroundColor/.labelStyle.
1.2.0 #
Overrides puntuales de color y radio para SintiaButton y SintiaChip.
Compatible con la 1.1.0: no cambia ninguna API existente.
Agregado #
SintiaButton.backgroundColor,.foregroundColory.borderRadius: pintan o redondean un botón puntual por fuera de suvarianto del tema. Tienen precedencia sobre la variante (incluidadanger) y sobre el tema.SintiaChip.backgroundColor,.foregroundColory.borderRadius: la misma idea para un chip puntual, con precedencia sobre el color destatusy el de marca, tanto seleccionado como no.
1.1.0 #
Selección única como componente propio y control del color de la etiqueta de los campos desde el tema. Compatible con la 1.0.0: no cambia ninguna API existente.
Agregado #
SintiaSegmentedControl<T>: selector de una sola opción entre varias (idioma, periodo, modo de vista). Genérico, con tres tamaños, modoexpandedy segmentos de solo ícono con tooltip. El segmento activo se rellena con el color de marca y el resto queda plano, así que funciona sobre cualquier fondo.SintiaSegment<T>: modelo de cada opción (valor genérico,label,iconytooltip). Necesita al menoslabeloicon.SintiaThemeConfig.inputLabelColor: pinta la etiqueta que va sobre todos losSintiaTextFieldde la app en un solo lugar. Viaja al tema comoinputDecorationTheme.labelStyle.SintiaTextField.labelStyle: estilo de la etiqueta para un campo puntual, con precedencia sobre el del tema.
Cambiado #
SintiaChipseleccionado se rellena con el color de marca (o con el del estado, si tiene uno) y su contenido pasa aonPrimary, en vez de usar el gris por defecto de Material.- La etiqueta de
SintiaTextFieldsale del tema (inputDecorationTheme.labelStyle) en lugar de fijarse en el componente. Sin configuración se ve igual que en la 1.0.0:labelLargesemi-negrita sobreonSurface.
1.0.0 #
Reconstrucción completa del sistema de diseño sobre un pipeline de capas
(foundations → tokens → theme → componentes), con lib/src privado y un único
barrel público. Rompe la API respecto a la 0.6.0: cambia el nombre del
paquete, los nombres de las clases, las rutas de importación y el theming (ver
Migración).
Renombrado del paquete #
El paquete pasó de sintia_system_design a sintia_design_system: en inglés
"design system" es un sistema de diseño, mientras que "system design" significa
arquitectura de sistemas. El nombre anterior queda descontinuado en pub.dev
apuntando a este.
dependencies:
sintia_design_system: ^1.0.0 # antes: sintia_system_design
import 'package:sintia_design_system/sintia_design_system.dart';
Arquitectura #
- Estructura reorganizada en
lib/src/, expuesta solo a través desintia_design_system.dart. Se eliminan los imports profundos (package:sintia_design_system/tokens/...). - Capas explícitas:
foundations/: escala crudaSintiaSizes(grilla de 4px) y vocabulario sin valores (SintiaSize,SintiaStatus).tokens/:SintiaSpacing,SintiaRadius,SintiaIconSize,SintiaBreakpoints,SintiaElevation,SintiaShadows,SintiaDurationy el token de componenteSintiaNavDrawerMetrics.theme/:SintiaTheme,SintiaThemeConfigySintiaStatusColors.models/,atoms/,molecules/,organisms/,templates/ypreviews/.
analysis_options.yamlestricto:strict-casts,strict-inference,strict-raw-types,always_specify_types,require_trailing_commas,discarded_futures,directives_ordering, entre otros.flutter analyzequeda en cero issues, en el paquete y en la showcase.
Agregado #
- Theming
SintiaTheme.light/dark(SintiaThemeConfig)deriva todo elColorSchemedesde la marca (ColorScheme.fromSeed) y define los estilos de botones, campos, tarjetas, chips, app bar, diálogos, drawer, listas, tooltips, snackbars y menús desde los tokens.SintiaStatusColorscomoThemeExtension(success,warning,info), con defaults para claro y oscuro, sobreescribibles por la app.SintiaThemeConfiginmutable, concopyWithy comparación por valor.
- Átomos:
SintiaChip,SintiaIconAction,SintiaLoader(animación Lottie empaquetada) ySintiaAvatar. - Moléculas:
SintiaBanner,SintiaEmptyState,SintiaListTile,SintiaConfirmDialog,SintiaCheckOption,SintiaOtpField,SintiaSuccessViewySintiaAppBarTitle. - Organismos:
SintiaNavigationDrawer(menú lateral colapsable a rail de 80px, con badges, divisores, ítems de pie y tooltips),SintiaListSectionySintiaProfileHeader. - Plantillas:
SintiaPageTemplate,SintiaDetailPageTemplateySintiaShellTemplate(estructura maestra: drawer permanente y colapsable en escritorio, modal en móvil). - Modelos:
SintiaNavItem,SintiaListItemySintiaAppBarAction. - Extensiones:
context.statusColors,context.isDarkMode,context.surfaceColor; y enTextStylelos coloreserrorymutedmás los pesosregular,medium,semiBoldybold. - Showcase (
example/): app navegable construida con la propiaSintiaShellTemplate, con catálogo por categorías, páginas por componente, toggle claro/oscuro y pruebas de navegación. Corre en web, Android e iOS. - Tests: 112 pruebas del paquete (theming, tokens, átomos, moléculas, organismos y plantillas) y 5 de la showcase.
- Dependencia:
lottiepara la animación empaquetada del loader.
Cambiado #
- Todas las clases usan el prefijo
Sintia.SintiaButtonpasó de molécula a átomo ySintiaCardde átomo a molécula, por composición. SintiaButton: nuevas variantes (primary,secondary,outline,ghost,danger) y tamaños (SintiaSize).onPressedesFutureOr<void> Function()?y acepta callbacks sincrónicos o asíncronos: si devuelve unFuture, el botón gestiona su propio estado de carga. Además,loadingpermite controlarlo desde fuera.SintiaTextField: la decoración sale delinputDecorationThemeen lugar de 12 overrides de borde; los campos de contraseña traen el botón de mostrar/ocultar. La etiqueta sigue mostrándose sobre el campo.SintiaAppBar:leadinges un enum (none,back,menu); el botón de menú abre el drawer delScaffoldy se oculta si no hay drawer.trailingActionspasó a llamarseactions.SintiaDialog: el ícono es unWidgeten lugar de una ruta de asset, gana el helpershow, contenido desplazable y forma/elevación del tema.SintiaText: heredabodyMediumcuando no se le pasa estilo, y aceptasoftWrapysemanticsLabel.- Los espaciados y radios pasan a la grilla de 4px (
SintiaSpacing.medium= 16) en lugar de la escala anterior (SintiaSizes.size1= 10).
Eliminado #
AppColors: la paleta estática hardcodeada. Todo el color viene del tema (context.colorScheme+context.statusColors), que es lo que permite marca en runtime y modo oscuro real.SintiaSizesanterior (escala 10/20/30/50/80…) ySintiaElevations, reemplazados por la escala de 4px ySintiaElevation.- Fuentes empaquetadas (
Montserrat,OpenSans): el paquete es agnóstico a la fuente; ahora se registran en la app consumidora. Los.ttfquedaron enexample/assets/fonts/como demostración. foundation/colors.dart, que estaba vacío y se exportaba.- La familia de átomos y moléculas específicos de la app bar
(
SintiaAppBarActionButton,SintiaAppBarBadgeButton,SintiaAppBarBackButton,SintiaAppBarTitlecomo átomo,SintiaAppBarLeading,SintiaAppBarTrailing,SintiaAppBarTitleSection), reemplazada porSintiaIconAction+SintiaAppBarTitle. SintiaAppBarAction.cart: era específico de comercio. Se construye igual en una línea con el constructor normal.
Migración desde 0.6.0 #
| Antes | Ahora |
|---|---|
import '.../tokens/colors.dart' |
import 'package:sintia_design_system/sintia_design_system.dart' |
SintiaThemeConfig(primaryColor:, secondaryColor:, primaryFont:, secondaryFont:) |
SintiaThemeConfig(primary:, secondary:, headingFontFamily:, fontFamily:) |
AppColors.statusDanger01 |
context.colorScheme.error |
AppColors.statusSuccess01 |
context.statusColors.success |
AppColors.statusWarning |
context.statusColors.warning |
AppColors.statusInfo |
context.statusColors.info |
AppColors.scale00 / bgWhite |
context.colorScheme.surface |
AppColors.scale02 / borderColor |
context.colorScheme.outlineVariant |
AppColors.scale06 |
context.colorScheme.onSurface |
AppColors.statusDisabled |
lo resuelve el tema en cada componente |
SintiaSizes.size1 (10) |
SintiaSpacing.small (8) o SintiaSpacing.medium (16) |
SintiaSizes.size2 (20) |
SintiaSpacing.large (24) |
SintiaSizes.radius1 |
SintiaRadius.medium / SintiaRadius.borderMedium |
SintiaShadows.s1/s2/s3 |
SintiaShadows.low/medium/high |
SintiaElevations.s1…s6 |
SintiaElevation.low/medium/high/highest |
SintiaAppBar(trailingActions:) |
SintiaAppBar(actions:) |
SintiaAppBar(leadingType: SintiaAppBarLeadingType.back) |
SintiaAppBar(leading: SintiaAppBarLeading.back) |
SintiaButton(variant: SintiaButtonVariant.destructive) |
SintiaButton(variant: SintiaButtonVariant.danger) |
SintiaButton(size: SintiaButtonSize.medium) |
SintiaButton(size: SintiaSize.medium) |
SintiaButton(leftIcon: Icon(...), rightIcon: Icon(...)) |
SintiaButton(icon: Icons..., trailingIcon: Icons...) |
SintiaDialog(icon: 'assets/alert.png') |
SintiaDialog(icon: Image.asset('assets/alert.png')) |
SintiaText('Hola') sin estilo (sin estilo aplicado) |
SintiaText('Hola') (hereda bodyMedium) |
0.6.0 #
- Add
SintiaDialogcomponent for customizable dialog functionality in the Sintia design system
0.5.3 #
- Add onTap callback to
SintiaTextFieldfor enhanced interactivity
0.5.2 #
- Allow customization of label style in
SintiaTextFieldfor improved text presentation
0.5.1 #
- Export
SintiaTextFieldcomponent for improved text input functionality
0.5.0 #
- Add
SintiaTextFieldcomponent with customizable properties for enhanced text input experience
0.4.0 #
- Change trailingAction to trailingActions in
SintiaAppBarfor multiple action support
0.3.0 #
- Created
SintiaAppBarwith leading, title, and trailing components, including action buttons and badge support
0.2.0 #
- Streamline imports in components and changing iconData to widgets.
0.1.0 #
- Created
BuildContextextension for responsive support.
0.0.1 #
- Initial version of Sintia Design System.