@wgalleti/primevue-components 1.0.0 → 1.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"routeTabs-D6m8PuP6.js","names":[],"sources":["../src/types/plugin.ts","../src/types/routeTabs.ts"],"sourcesContent":["import type { AxiosInstance } from 'axios'\nimport type { DataProvider } from './dataProvider'\n\nexport interface WPluginOptions {\n axios?: AxiosInstance\n dataProvider?: DataProvider\n defaultPageSize?: number\n dateFormat?: string\n dateTimeFormat?: string\n locale?: string\n currency?: string\n registerComponents?: boolean\n /**\n * Corrige o `Dialog`/`Drawer` do PrimeVue 4 para o Esc fechar só o overlay\n * do topo (nativo fecha todos os empilhados). Default: `true`.\n */\n patchDialogEscape?: boolean\n}\n\nexport interface WPluginConfig {\n axios?: AxiosInstance\n dataProvider: DataProvider\n defaultPageSize: number\n dateFormat: string\n dateTimeFormat: string\n locale: string\n currency: string\n}\n\nexport const W_AXIOS_KEY = Symbol('w-axios')\nexport const W_DATA_PROVIDER_KEY = Symbol('w-data-provider')\nexport const W_CONFIG_KEY = Symbol('w-config')\n","import { inject, type Component, type InjectionKey, type Ref } from 'vue'\nimport type { RouteLocationNormalizedLoaded, Router } from 'vue-router'\n\n/**\n * Navegação por abas (estilo browser/ERP): cada rota vira uma aba viva, com\n * fechar/recarregar e estado preservado ao alternar. O estado mora no\n * composable `useRouteTabs`; `WTabNav` (barra) e `WTabViewport` (painéis)\n * apenas o recebem via prop — nenhum componente guarda estado global.\n */\n\n/** Meta de apresentação de uma aba, resolvida a partir da rota. */\nexport interface RouteTabMeta {\n title: string\n /** Ícone PrimeIcons (ex.: 'pi pi-file'). */\n icon?: string\n /** `false` esconde o X e ignora fechar (ex.: dashboard fixo). */\n closable?: boolean\n /**\n * Grupo da aba (ex.: o módulo do menu — \"Sementes\", \"Estoque\"). Abas do\n * mesmo grupo ficam juntas na barra, com o rótulo do grupo antes do bloco.\n */\n group?: string\n /**\n * Cor do grupo (qualquer cor CSS). Sem ela, o WTabNav deriva uma cor estável\n * do nome do grupo — informe só para fixar a cor de um módulo.\n */\n color?: string\n}\n\n/** Uma aba aberta. `key` identifica (path com params); `fullPath` navega. */\nexport interface RouteTab {\n key: string\n /** Último fullPath visitado (query inclusa) — usado no push e no restore. */\n fullPath: string\n title: string\n icon?: string\n closable: boolean\n /** Grupo (módulo) da aba — abas do mesmo grupo ficam contíguas na barra. */\n group?: string\n /** Cor do grupo fixada pela rota (`RouteTabMeta.color`); ausente = derivada. */\n color?: string\n /**\n * `false` = aba restaurada do storage, ainda sem componente montado.\n * Hidrata na primeira ativação (o router resolve o lazy no caminho).\n */\n hydrated: boolean\n /** Contador de remontagem: `reload()` incrementa e o pane troca o `:key`. */\n remount: number\n}\n\n/**\n * Lado não serializável de uma aba hidratada — componente resolvido, snapshot\n * de rota e os registros feitos pela tela via `useTabHost`. Consumido pelo\n * WTabViewport; não persiste.\n */\nexport interface RouteTabRuntime {\n component: Component | null\n props: Record<string, unknown>\n /**\n * Snapshot reativo da rota, provido ao pane sob a `routeLocationKey` do\n * vue-router: `useRoute()` da tela enxerga ESTA rota, congelada — só é\n * atualizada quando a aba é a ativa. É o que impede um pane oculto de\n * reagir à navegação global (o bug clássico de sistemas de abas).\n */\n route: RouteLocationNormalizedLoaded\n closeGuards: Array<() => boolean | Promise<boolean>>\n activatedHooks: Array<() => void>\n deactivatedHooks: Array<() => void>\n /** Título default da rota, para `setTitle(null)` restaurar. */\n defaultTitle: string\n}\n\nexport interface UseRouteTabsOptions {\n router: Router\n /**\n * Modo de uso — o parâmetro que define o que é \"uma aba\":\n * - `'screen'` (default): cada tela é uma aba. Identidade = `route.path`\n * (params contam, query não): NF 123 e NF 456 são abas distintas.\n * - `'module'`: uma aba por entrada de menu. Identidade = `moduleRoot(route)`;\n * navegar entre telas do mesmo módulo acontece DENTRO da aba (a view\n * remonta, título/ícone voltam aos da rota nova e os close guards valem\n * também nessa troca).\n */\n mode?: 'screen' | 'module'\n /**\n * Raiz do módulo da rota (ex.: path da listagem) — identidade da aba no modo\n * `'module'`. Obrigatório nesse modo; retornar falsy cai em `route.path`.\n */\n moduleRoot?: (route: RouteLocationNormalizedLoaded) => string | null | undefined\n /** Título/ícone/closable da aba. O que faltar cai em defaults sensatos. */\n resolveTabMeta?: (route: RouteLocationNormalizedLoaded) => Partial<RouteTabMeta>\n /** Quais rotas viram aba. Default: todas. */\n isTabRoute?: (route: RouteLocationNormalizedLoaded) => boolean\n /** Onde persistir. Default: `localStorage`; `null` desliga a persistência. */\n storage?: Storage | null\n /** Chave no storage. Função permite chave por usuário avaliada tarde. */\n storageKey?: string | (() => string)\n /** Destino ao fechar a última aba. Default: `/`. */\n homePath?: string\n /** Acima disso, a aba mais antiga não-ativa é fechada (guards respeitados). */\n maxTabs?: number\n}\n\nexport interface RouteTabsApi {\n tabs: Ref<RouteTab[]>\n activeKey: Ref<string | null>\n /** Ativa a aba (navega para o fullPath dela). */\n activate: (key: string) => Promise<void>\n /** Fecha respeitando os close guards da aba. `false` = algum guard vetou. */\n close: (key: string) => Promise<boolean>\n closeOthers: (key: string) => Promise<void>\n closeAll: () => Promise<void>\n /** Remonta o componente da aba (o estado da tela é descartado). */\n reload: (key: string) => void\n /** Título dinâmico (\"NF 000123\"). `null` volta ao título default da rota. */\n setTitle: (key: string, title: string | null | undefined) => void\n /** A rota já tem aba hidratada? (ex.: para pular overlay de navegação). */\n isLive: (target: RouteLocationNormalizedLoaded | string) => boolean\n /** Runtime interno da aba. Uso do WTabViewport; não persiste. */\n runtime: (key: string) => RouteTabRuntime | undefined\n}\n\n/**\n * Contexto que o pane fornece à tela (e aos dialogs dela). Injete com\n * `useTabHost()` — fora de abas retorna `null` e tudo degrada para o\n * comportamento padrão (dialog no body, título no breadcrumb etc.).\n */\nexport interface TabHostContext {\n /** Container do pane — alvo de `appendTo` para o dialog viver NA aba. */\n hostEl: Ref<HTMLElement | null>\n active: Ref<boolean>\n /** Título dinâmico da aba; `null` restaura o default da rota. */\n setTitle: (title: string | null | undefined) => void\n /** Chamado ao voltar para a aba (equivalente a onActivated). */\n onTabActivated: (fn: () => void) => void\n /** Chamado ao sair da aba (equivalente a onDeactivated). */\n onTabDeactivated: (fn: () => void) => void\n /** Veta o fechar da aba (ex.: alterações não salvas). `false` = não fecha. */\n registerCloseGuard: (guard: () => boolean | Promise<boolean>) => void\n}\n\nexport const W_TAB_HOST_KEY: InjectionKey<TabHostContext> = Symbol('w-tab-host')\n\n/** Contexto da aba que envolve o componente atual, ou `null` fora de abas. */\nexport function useTabHost(): TabHostContext | null {\n return inject(W_TAB_HOST_KEY, null)\n}\n"],"mappings":";;AA6BA,IAAa,IAAc,OAAO,SAAS,GAC9B,IAAsB,OAAO,iBAAiB,GAC9C,IAAe,OAAO,UAAU,GC8GhC,IAA+C,OAAO,YAAY;AAG/E,SAAgB,IAAoC;CAClD,OAAO,EAAO,GAAgB,IAAI;AACpC"}
1
+ {"version":3,"file":"routeTabs-D6m8PuP6.js","names":[],"sources":["../src/types/plugin.ts","../src/types/routeTabs.ts"],"sourcesContent":["import type { AxiosInstance } from 'axios'\nimport type { DataProvider } from './dataProvider'\n\nexport interface WPluginOptions {\n axios?: AxiosInstance\n dataProvider?: DataProvider\n defaultPageSize?: number\n dateFormat?: string\n dateTimeFormat?: string\n locale?: string\n currency?: string\n registerComponents?: boolean\n /**\n * Corrige o `Dialog`/`Drawer` do PrimeVue 4 para o Esc fechar só o overlay\n * do topo (nativo fecha todos os empilhados). Default: `true`.\n */\n patchDialogEscape?: boolean\n}\n\nexport interface WPluginConfig {\n axios?: AxiosInstance\n dataProvider: DataProvider\n defaultPageSize: number\n dateFormat: string\n dateTimeFormat: string\n locale: string\n currency: string\n}\n\nexport const W_AXIOS_KEY = Symbol('w-axios')\nexport const W_DATA_PROVIDER_KEY = Symbol('w-data-provider')\nexport const W_CONFIG_KEY = Symbol('w-config')\n","import { inject, type Component, type InjectionKey, type Ref } from 'vue'\nimport type { RouteLocationNormalizedLoaded, Router } from 'vue-router'\n\n/**\n * Navegação por abas (estilo browser/ERP): cada rota vira uma aba viva, com\n * fechar/recarregar e estado preservado ao alternar. O estado mora no\n * composable `useRouteTabs`; `WTabNav` (barra) e `WTabViewport` (painéis)\n * apenas o recebem via prop — nenhum componente guarda estado global.\n */\n\n/** Meta de apresentação de uma aba, resolvida a partir da rota. */\nexport interface RouteTabMeta {\n title: string\n /** Ícone PrimeIcons (ex.: 'pi pi-file'). */\n icon?: string\n /** `false` esconde o X e ignora fechar (ex.: dashboard fixo). */\n closable?: boolean\n /**\n * Grupo da aba (ex.: o módulo do menu — \"Sementes\", \"Estoque\"). Abas do\n * mesmo grupo ficam juntas na barra, com o rótulo do grupo antes do bloco.\n */\n group?: string\n /**\n * Cor do grupo (qualquer cor CSS). Sem ela, o WTabNav deriva uma cor estável\n * do nome do grupo — informe só para fixar a cor de um módulo.\n */\n color?: string\n}\n\n/** Uma aba aberta. `key` identifica (path com params); `fullPath` navega. */\nexport interface RouteTab {\n key: string\n /** Último fullPath visitado (query inclusa) — usado no push e no restore. */\n fullPath: string\n title: string\n icon?: string\n closable: boolean\n /** Grupo (módulo) da aba — abas do mesmo grupo ficam contíguas na barra. */\n group?: string\n /** Cor do grupo fixada pela rota (`RouteTabMeta.color`); ausente = derivada. */\n color?: string\n /**\n * `false` = aba restaurada do storage, ainda sem componente montado.\n * Hidrata na primeira ativação (o router resolve o lazy no caminho).\n */\n hydrated: boolean\n /** Contador de remontagem: `reload()` incrementa e o pane troca o `:key`. */\n remount: number\n}\n\n/**\n * Lado não serializável de uma aba hidratada — componente resolvido, snapshot\n * de rota e os registros feitos pela tela via `useTabHost`. Consumido pelo\n * WTabViewport; não persiste.\n */\nexport interface RouteTabRuntime {\n component: Component | null\n props: Record<string, unknown>\n /**\n * Snapshot reativo da rota, provido ao pane sob a `routeLocationKey` do\n * vue-router: `useRoute()` da tela enxerga ESTA rota, congelada — só é\n * atualizada quando a aba é a ativa. É o que impede um pane oculto de\n * reagir à navegação global (o bug clássico de sistemas de abas).\n */\n route: RouteLocationNormalizedLoaded\n closeGuards: Array<() => boolean | Promise<boolean>>\n activatedHooks: Array<() => void>\n deactivatedHooks: Array<() => void>\n /** Título default da rota, para `setTitle(null)` restaurar. */\n defaultTitle: string\n}\n\nexport interface UseRouteTabsOptions {\n router: Router\n /**\n * Modo de uso — o parâmetro que define o que é \"uma aba\":\n * - `'screen'` (default): cada tela é uma aba. Identidade = `route.path`\n * (params contam, query não): NF 123 e NF 456 são abas distintas.\n * - `'module'`: uma aba por entrada de menu. Identidade = `moduleRoot(route)`;\n * navegar entre telas do mesmo módulo acontece DENTRO da aba (a view\n * remonta, título/ícone voltam aos da rota nova e os close guards valem\n * também nessa troca).\n */\n mode?: 'screen' | 'module'\n /**\n * Raiz do módulo da rota (ex.: path da listagem) — identidade da aba no modo\n * `'module'`. Obrigatório nesse modo; retornar falsy cai em `route.path`.\n */\n moduleRoot?: (route: RouteLocationNormalizedLoaded) => string | null | undefined\n /**\n * Modo `'module'`: trocar de path dentro da aba remonta a view. Devolva `false`\n * para uma troca que é a MESMA tela mudando de identidade — o caso clássico é\n * `/pedidos/novo` → `/pedidos/<id>` quando o rascunho nasce: a view fica viva e\n * recebe os `props` novos, sem remontar, sem animação de entrada, sem reler o\n * documento. Default: sempre remonta.\n */\n shouldRemount?: (\n from: RouteLocationNormalizedLoaded,\n to: RouteLocationNormalizedLoaded,\n ) => boolean\n /** Título/ícone/closable da aba. O que faltar cai em defaults sensatos. */\n resolveTabMeta?: (route: RouteLocationNormalizedLoaded) => Partial<RouteTabMeta>\n /** Quais rotas viram aba. Default: todas. */\n isTabRoute?: (route: RouteLocationNormalizedLoaded) => boolean\n /** Onde persistir. Default: `localStorage`; `null` desliga a persistência. */\n storage?: Storage | null\n /** Chave no storage. Função permite chave por usuário avaliada tarde. */\n storageKey?: string | (() => string)\n /** Destino ao fechar a última aba. Default: `/`. */\n homePath?: string\n /** Acima disso, a aba mais antiga não-ativa é fechada (guards respeitados). */\n maxTabs?: number\n}\n\nexport interface RouteTabsApi {\n tabs: Ref<RouteTab[]>\n activeKey: Ref<string | null>\n /** Ativa a aba (navega para o fullPath dela). */\n activate: (key: string) => Promise<void>\n /** Fecha respeitando os close guards da aba. `false` = algum guard vetou. */\n close: (key: string) => Promise<boolean>\n closeOthers: (key: string) => Promise<void>\n closeAll: () => Promise<void>\n /** Remonta o componente da aba (o estado da tela é descartado). */\n reload: (key: string) => void\n /** Título dinâmico (\"NF 000123\"). `null` volta ao título default da rota. */\n setTitle: (key: string, title: string | null | undefined) => void\n /** A rota já tem aba hidratada? (ex.: para pular overlay de navegação). */\n isLive: (target: RouteLocationNormalizedLoaded | string) => boolean\n /** Runtime interno da aba. Uso do WTabViewport; não persiste. */\n runtime: (key: string) => RouteTabRuntime | undefined\n}\n\n/**\n * Contexto que o pane fornece à tela (e aos dialogs dela). Injete com\n * `useTabHost()` — fora de abas retorna `null` e tudo degrada para o\n * comportamento padrão (dialog no body, título no breadcrumb etc.).\n */\nexport interface TabHostContext {\n /** Container do pane — alvo de `appendTo` para o dialog viver NA aba. */\n hostEl: Ref<HTMLElement | null>\n active: Ref<boolean>\n /** Título dinâmico da aba; `null` restaura o default da rota. */\n setTitle: (title: string | null | undefined) => void\n /** Chamado ao voltar para a aba (equivalente a onActivated). */\n onTabActivated: (fn: () => void) => void\n /** Chamado ao sair da aba (equivalente a onDeactivated). */\n onTabDeactivated: (fn: () => void) => void\n /** Veta o fechar da aba (ex.: alterações não salvas). `false` = não fecha. */\n registerCloseGuard: (guard: () => boolean | Promise<boolean>) => void\n}\n\nexport const W_TAB_HOST_KEY: InjectionKey<TabHostContext> = Symbol('w-tab-host')\n\n/** Contexto da aba que envolve o componente atual, ou `null` fora de abas. */\nexport function useTabHost(): TabHostContext | null {\n return inject(W_TAB_HOST_KEY, null)\n}\n"],"mappings":";;AA6BA,IAAa,IAAc,OAAO,SAAS,GAC9B,IAAsB,OAAO,iBAAiB,GAC9C,IAAe,OAAO,UAAU,GCyHhC,IAA+C,OAAO,YAAY;AAG/E,SAAgB,IAAoC;CAClD,OAAO,EAAO,GAAgB,IAAI;AACpC"}
@@ -82,6 +82,14 @@ export interface UseRouteTabsOptions {
82
82
  * `'module'`. Obrigatório nesse modo; retornar falsy cai em `route.path`.
83
83
  */
84
84
  moduleRoot?: (route: RouteLocationNormalizedLoaded) => string | null | undefined;
85
+ /**
86
+ * Modo `'module'`: trocar de path dentro da aba remonta a view. Devolva `false`
87
+ * para uma troca que é a MESMA tela mudando de identidade — o caso clássico é
88
+ * `/pedidos/novo` → `/pedidos/<id>` quando o rascunho nasce: a view fica viva e
89
+ * recebe os `props` novos, sem remontar, sem animação de entrada, sem reler o
90
+ * documento. Default: sempre remonta.
91
+ */
92
+ shouldRemount?: (from: RouteLocationNormalizedLoaded, to: RouteLocationNormalizedLoaded) => boolean;
85
93
  /** Título/ícone/closable da aba. O que faltar cai em defaults sensatos. */
86
94
  resolveTabMeta?: (route: RouteLocationNormalizedLoaded) => Partial<RouteTabMeta>;
87
95
  /** Quais rotas viram aba. Default: todas. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wgalleti/primevue-components",
3
- "version": "1.0.0",
3
+ "version": "1.1.2",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "publishConfig": {