kasy-cli 1.39.1 → 1.40.1
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/lib/scaffold/CHANGELOG.json +23 -0
- package/package.json +1 -1
- package/templates/firebase/.firebase/hosting.YnVpbGQvd2Vi.cache +27 -27
- package/templates/firebase/lib/components/components.dart +2 -0
- package/templates/firebase/lib/components/kasy_accordion.dart +4 -1
- package/templates/firebase/lib/components/kasy_alert.dart +5 -2
- package/templates/firebase/lib/components/kasy_bottom_sheet.dart +25 -7
- package/templates/firebase/lib/components/kasy_dialog.dart +3 -1
- package/templates/firebase/lib/components/kasy_menu.dart +926 -0
- package/templates/firebase/lib/components/kasy_popover.dart +267 -0
- package/templates/firebase/lib/components/kasy_sidebar.dart +20 -10
- package/templates/firebase/lib/core/navigation/kasy_route_observer.dart +8 -0
- package/templates/firebase/lib/features/home/home_components_page.dart +23 -4
- package/templates/firebase/lib/features/home/home_components_preview_registry.dart +320 -0
- package/templates/firebase/lib/features/settings/ui/components/avatar_component.dart +38 -94
- package/templates/firebase/lib/features/settings/ui/components/language_switcher.dart +32 -107
- package/templates/firebase/lib/features/subscriptions/ui/widgets/comparison_table.dart +21 -21
- package/templates/firebase/lib/features/subscriptions/ui/widgets/premium_close_button.dart +35 -27
- package/templates/firebase/lib/features/subscriptions/ui/widgets/selectable_col.dart +22 -17
- package/templates/firebase/lib/features/subscriptions/ui/widgets/selectable_row.dart +12 -7
- package/templates/firebase/lib/router.dart +2 -0
- package/templates/firebase/pubspec.yaml +1 -1
- package/templates/firebase/lib/features/subscriptions/ui/widgets/premium_banner.dart +0 -81
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
{
|
|
2
|
+
"1.40.1": {
|
|
3
|
+
"modules": {
|
|
4
|
+
"components": {
|
|
5
|
+
"pt": "Refino do submenu do Kasy Menu em telas estreitas: o submenu agora abre como sanfona embaixo do próprio item (expande inline), em vez de empilhar uma nova folha por cima. Menos custo de interação e sem te jogar numa segunda tela; no desktop ele continua cascateando ao lado (flyout). Já vale na demo web e no app gerado.",
|
|
6
|
+
"en": "Kasy Menu submenu refinement on narrow screens: the submenu now opens as an accordion right beneath its own item (expands inline) instead of stacking a new sheet on top. Lower interaction cost and no jump to a second surface; on desktop it still cascades to the side (flyout). Live in the web demo and the generated app.",
|
|
7
|
+
"es": "Refinamiento del submenú del Kasy Menu en pantallas estrechas: el submenú ahora abre como acordeón justo debajo de su propio ítem (se expande inline), en vez de apilar una nueva hoja encima. Menor costo de interacción y sin saltar a una segunda superficie; en escritorio sigue desplegándose al costado (flyout). Disponible en la demo web y en la app generada."
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"1.40.0": {
|
|
12
|
+
"modules": {
|
|
13
|
+
"components": {
|
|
14
|
+
"pt": "Novo componente Kasy Menu (menu de ações) + Popover. É aquele menu suspenso de ações que se adapta sozinho à plataforma: no desktop abre como um balão ancorado no botão (popover), no celular vira bottom sheet. Cada item pode ter ícone, descrição, atalho de teclado e submenu; dá pra agrupar em seções (inclusive uma 'zona de perigo' para ações destrutivas, em vermelho) e usar seleção única ou múltipla. Apresente com showKasyMenu (adapta automático, mas dá pra forçar popover ou sheet). Já está registrado na tela de Componentes com preview.",
|
|
15
|
+
"en": "New Kasy Menu (action menu) + Popover component. It is the dropdown action menu that adapts to the platform on its own: on desktop it opens as a balloon anchored to the button (popover), on mobile it becomes a bottom sheet. Each item can have an icon, description, keyboard shortcut and submenu; you can group items into sections (including a red 'Danger zone' for destructive actions) and use single or multiple selection. Present it with showKasyMenu (adapts automatically, but you can force popover or sheet). Already registered on the Components screen with a preview.",
|
|
16
|
+
"es": "Nuevo componente Kasy Menu (menú de acciones) + Popover. Es ese menú desplegable de acciones que se adapta solo a la plataforma: en escritorio abre como un globo anclado al botón (popover), en el móvil se vuelve bottom sheet. Cada ítem puede tener icono, descripción, atajo de teclado y submenú; puedes agrupar ítems en secciones (incluida una 'zona de peligro' en rojo para acciones destructivas) y usar selección única o múltiple. Preséntalo con showKasyMenu (se adapta automáticamente, pero puedes forzar popover o sheet). Ya está registrado en la pantalla de Componentes con vista previa."
|
|
17
|
+
},
|
|
18
|
+
"core": {
|
|
19
|
+
"pt": "Navegação ganhou um observador de rotas compartilhado (KasyRouteObserver) no navigator raiz: as telas conseguem reagir quando voltam a aparecer depois que algo aberto por cima delas é fechado (via didPopNext). É a base que mantém o novo Kasy Menu se comportando direito ao abrir/fechar; já vem ligado no router.",
|
|
20
|
+
"en": "Navigation got a shared route observer (KasyRouteObserver) on the root navigator: screens can react when they are revealed again after something opened on top of them is dismissed (via didPopNext). It is the foundation that keeps the new Kasy Menu behaving correctly as it opens/closes; it comes wired into the router.",
|
|
21
|
+
"es": "La navegación ganó un observador de rutas compartido (KasyRouteObserver) en el navigator raíz: las pantallas pueden reaccionar cuando vuelven a aparecer luego de que algo abierto encima de ellas se cierra (vía didPopNext). Es la base que mantiene el nuevo Kasy Menu comportándose bien al abrir/cerrar; ya viene conectado en el router."
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
2
25
|
"1.39.1": {
|
|
3
26
|
"modules": {
|
|
4
27
|
"core": {
|
package/package.json
CHANGED
|
@@ -4,7 +4,6 @@ local_notifications.js,1772398909034,0b44b177c4b8a705ad1b0e3d7532537aad7b230e947
|
|
|
4
4
|
flutter.js,1777393608000,b42e549a02f5c1428b0ad85dbdc663d400a6d2db10cb8aefcc0fddd592fd6ceb
|
|
5
5
|
firebase-messaging-sw.js,1772484605561,dba3c939f7c240e62f63d06408d5f70e45f1168d00df98726e6a7a20cbd3b0df
|
|
6
6
|
favicon.png,1779810782545,c967afd3c3d4dd165ef2e5cf3f203c3982dfff6a95881859ed163d9c38d75512
|
|
7
|
-
.last_build_id,1781475668120,4a8e13af757aaae5b1160a761d56555ef4370ca7572732cbfa8d98c989424ab0
|
|
8
7
|
splash/img/light-4x.png,1780546027751,abf0e55345e532a4645fe14b01c2948b07c78df50cc6da23648837dfb6271c74
|
|
9
8
|
splash/img/light-3x.png,1780546027699,5f02c94032cb7053807ce89603b109f14ea2740eaa3145dc76c924cbe1d534a9
|
|
10
9
|
splash/img/light-2x.png,1780546027647,3c073b9da154ac8be530f8beefa3579246f223acd819e856a2db000fdabcb67e
|
|
@@ -47,29 +46,30 @@ assets/assets/images/icon_android.png,1779810762467,db0f6c9ff904d4571ab40d461100
|
|
|
47
46
|
assets/assets/images/icon.png,1779745964920,194820ecc4eed7bac14b5605916d87093b4571a28f3ca24863ac09c783343488
|
|
48
47
|
assets/assets/images/favicon.png,1779745964922,194820ecc4eed7bac14b5605916d87093b4571a28f3ca24863ac09c783343488
|
|
49
48
|
assets/assets/images/empty_notifications.jpg,1772398653078,cbb7d57f7cf305cf33ee8cbd15544eb1020670a1a8100f1328b49ca61d76fb7e
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
assets/FontManifest.json,
|
|
57
|
-
|
|
58
|
-
assets/
|
|
59
|
-
|
|
60
|
-
assets/
|
|
61
|
-
assets/
|
|
62
|
-
assets/
|
|
63
|
-
assets/
|
|
64
|
-
assets/
|
|
65
|
-
|
|
66
|
-
main.dart.
|
|
67
|
-
|
|
68
|
-
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-
|
|
69
|
-
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w600.ttf,
|
|
70
|
-
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-
|
|
71
|
-
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-
|
|
72
|
-
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-
|
|
73
|
-
assets/
|
|
74
|
-
assets/
|
|
75
|
-
|
|
49
|
+
version.json,1781504123531,9c8bda011bf76cc12c7484af634650c1bddbb07450efd617f39b2ba26ee338ec
|
|
50
|
+
flutter_service_worker.js,1781504124974,baeeaf9f4b8e6f40d3b0549429ceb70ca01f120db6a7ef2f60d5809233dc2205
|
|
51
|
+
flutter_bootstrap.js,1781504070895,8f179b4fd4e2445cb3847d5c5d50f3494b9431636e2c741ce4dca87bdef2efcc
|
|
52
|
+
index.html,1781504070910,bb8142eb84e9e44049957c3edf86006e1ae5f194c397a8326ce505b68fdf58f4
|
|
53
|
+
.last_build_id,1781504125200,fb2a0536078d7023bcc9d41eb14cc00d74532f9465fac7aa9b88dae42e4a249c
|
|
54
|
+
assets/AssetManifest.bin.json,1781504123707,dde7c9126864005877d3ddb3598257c32685e77e36d1586f4441152e19553aef
|
|
55
|
+
assets/FontManifest.json,1781504123706,4d84ab517c27984d36f9a3c8be6f2a72788c0c3985c1d5874297fef0a53407ca
|
|
56
|
+
assets/AssetManifest.bin,1781504123706,b4a445b9a7980358e4e684ecb630fe913953f0ae9d710f1680e6c4cc351c6f50
|
|
57
|
+
assets/shaders/stretch_effect.frag,1781504123803,1a7d4ac2be40cf0a459dfb390ef08bcd740f37913ffdee8de3c2ea836a18410e
|
|
58
|
+
assets/shaders/ink_sparkle.frag,1781504123803,1c8e222328206d1e06754f76fb53947aad38d62180aafad5298a3c6f510b173d
|
|
59
|
+
assets/packages/cupertino_icons/assets/CupertinoIcons.ttf,1781504124761,12bc6bf55aad4657f62747b6c1c9b5c120a594ed3540db21729b6db3c847340d
|
|
60
|
+
assets/assets/icons/facebook.svg,1781501956480,3ab79cd57328f232a9aa93936936529716bf4b201897f3b6eae67484af4da871
|
|
61
|
+
assets/assets/icons/google.svg,1781501956480,aad117cb37a3246dda5ad42e20ad27fafa7fbf7e68215abd3a5a32aed09c53d9
|
|
62
|
+
assets/assets/icons/apple_white.svg,1781501956479,3ba907c614ab6feed0ada8c0617ac1fb0673640436e112be09fad8010cb9a977
|
|
63
|
+
assets/assets/icons/apple_black.svg,1781501956479,1831370c613783b8e26217b69701ca0a4a61d081479a1345ae3b13f2f4b39022
|
|
64
|
+
assets/fonts/MaterialIcons-Regular.otf,1781504124775,63e747df6278f4804031880bd30f6837ae2768e3912afb5328b553fb9ed381c7
|
|
65
|
+
main.dart.js_3.part.js,1781504109925,8b5c438ea9b1cffe57a96cba936c34f7b0f2c16045339ea87fb32db6e1463c1f
|
|
66
|
+
main.dart.js_1.part.js,1781504109916,188da12a7134009601f42c62f1d3cf38e9ebeafe0bfcaf5d32aed852e1c841d0
|
|
67
|
+
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w100.ttf,1781504124774,c16d95412fe2600bda1f53c2b8dc4bd82496f60f7c5a6ecfa180b0f866128712
|
|
68
|
+
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w600.ttf,1781504124766,008f1e974c9ff4e8d40d16221226e0d34d2298a7feb2bdea8c134a9333929c9c
|
|
69
|
+
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w400.ttf,1781504124764,edcd01ee13f6ec2285fd18863c0ce0efb0876b290fb427ad5c052f753b3210c8
|
|
70
|
+
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w500.ttf,1781504124763,3f68f958d0fa13077968a6767339c38ede8705bcadd0382078db6ec4bac96fa0
|
|
71
|
+
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w300.ttf,1781504124769,aebf5e4f6b1e6de1e61a866f813aa5b08efb4cdd108cc2831d40aad71398c88f
|
|
72
|
+
assets/packages/lucide_icons_flutter/assets/build_font/LucideVariable-w200.ttf,1781504124774,1f798186cfc3e2fcd54b15aa7b8695bc7c29b781c5058029a8d80ecdfa615904
|
|
73
|
+
assets/NOTICES,1781504123707,6ca6b928af7f7208b55e193e670cc5ff8335ec7ef7fa895fbae99609ba9f769d
|
|
74
|
+
assets/packages/lucide_icons_flutter/assets/lucide.ttf,1781504124772,9b000e47cddf9ada4a6b85fc9577fef7ed2ee261c9279e9a44e4753da28f83d3
|
|
75
|
+
main.dart.js,1781504110701,17f0df6beb2983f6a15b397718bf04a9078c12c4d98d83f71866ae15097f6e38
|
|
@@ -24,7 +24,9 @@ export 'kasy_date_picker.dart';
|
|
|
24
24
|
export 'kasy_dialog.dart';
|
|
25
25
|
export 'kasy_drop_down.dart';
|
|
26
26
|
export 'kasy_image_viewer.dart';
|
|
27
|
+
export 'kasy_menu.dart';
|
|
27
28
|
export 'kasy_otp_verification_bottom_sheet.dart';
|
|
29
|
+
export 'kasy_popover.dart';
|
|
28
30
|
export 'kasy_screen.dart';
|
|
29
31
|
export 'kasy_sidebar.dart';
|
|
30
32
|
export 'kasy_skeleton.dart';
|
|
@@ -274,7 +274,10 @@ class _KasyAccordionRow extends StatelessWidget {
|
|
|
274
274
|
Expanded(
|
|
275
275
|
child: Text(
|
|
276
276
|
data.title,
|
|
277
|
-
|
|
277
|
+
// Header of an inline row component: 16 / w600 (not the
|
|
278
|
+
// 18 screen-section step), matching the alert header.
|
|
279
|
+
style: context.textTheme.bodyLarge?.copyWith(
|
|
280
|
+
fontWeight: FontWeight.w600,
|
|
278
281
|
color: context.colors.onSurface,
|
|
279
282
|
),
|
|
280
283
|
),
|
|
@@ -51,14 +51,17 @@ class KasyAlert extends StatelessWidget {
|
|
|
51
51
|
Widget build(BuildContext context) {
|
|
52
52
|
final _KasyAlertPalette palette = _resolvePalette(context, tone);
|
|
53
53
|
final bool hasMessage = message != null && message!.trim().isNotEmpty;
|
|
54
|
+
// Inline component header: 16 / w600 (one step below an overlay/section
|
|
55
|
+
// title) so a compact alert card never wears a screen-section-sized title.
|
|
54
56
|
final TextStyle titleStyle =
|
|
55
|
-
context.textTheme.
|
|
57
|
+
context.textTheme.bodyLarge?.copyWith(
|
|
58
|
+
fontWeight: FontWeight.w600,
|
|
56
59
|
color: emphasizeTitleWithTone
|
|
57
60
|
? palette.accent
|
|
58
61
|
: context.colors.onSurface,
|
|
59
62
|
) ??
|
|
60
63
|
TextStyle(
|
|
61
|
-
fontSize:
|
|
64
|
+
fontSize: 16,
|
|
62
65
|
fontWeight: FontWeight.w600,
|
|
63
66
|
color: emphasizeTitleWithTone
|
|
64
67
|
? palette.accent
|
|
@@ -188,13 +188,31 @@ class KasyBottomSheet extends StatelessWidget {
|
|
|
188
188
|
],
|
|
189
189
|
if (actions.isNotEmpty) ...[
|
|
190
190
|
const SizedBox(height: KasySpacing.lg),
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
191
|
+
// As a desktop dialog, a non-icon form (e.g. edit name,
|
|
192
|
+
// create password) lays its buttons side by side with the
|
|
193
|
+
// primary on the right — the desktop convention — instead of
|
|
194
|
+
// the mobile full-width stack. Icon sheets stay stacked
|
|
195
|
+
// (they read as alerts, where stacked full-width is right).
|
|
196
|
+
// actions are authored primary-first (stack puts it on top),
|
|
197
|
+
// so reverse them here to land cancel-left / confirm-right.
|
|
198
|
+
if (floating && !hasIcon && actions.length >= 2)
|
|
199
|
+
Row(
|
|
200
|
+
children: [
|
|
201
|
+
for (int i = actions.length - 1; i >= 0; i--) ...[
|
|
202
|
+
if (i < actions.length - 1)
|
|
203
|
+
const SizedBox(width: KasySpacing.sm),
|
|
204
|
+
Expanded(child: actions[i]),
|
|
205
|
+
],
|
|
206
|
+
],
|
|
207
|
+
)
|
|
208
|
+
else
|
|
209
|
+
...actions.expand(
|
|
210
|
+
(w) => [
|
|
211
|
+
w,
|
|
212
|
+
if (w != actions.last)
|
|
213
|
+
const SizedBox(height: KasySpacing.sm),
|
|
214
|
+
],
|
|
215
|
+
),
|
|
198
216
|
],
|
|
199
217
|
],
|
|
200
218
|
),
|
|
@@ -280,8 +280,10 @@ class KasyDialog extends StatelessWidget {
|
|
|
280
280
|
Text(
|
|
281
281
|
message!,
|
|
282
282
|
textAlign: titleCentered ? TextAlign.center : TextAlign.start,
|
|
283
|
+
// Supporting text uses the body token (14); the sheet uses the
|
|
284
|
+
// same, so dialog and sheet read identically (they are the same
|
|
285
|
+
// surface on desktop). No off-ladder 15.
|
|
283
286
|
style: context.textTheme.bodyMedium?.copyWith(
|
|
284
|
-
fontSize: 15,
|
|
285
287
|
color: context.colors.onSurface.withValues(alpha: 0.6),
|
|
286
288
|
height: 1.5,
|
|
287
289
|
),
|