rl-core-front 0.15.6 → 0.16.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/package.json +1 -1
- package/src/_services/api/schema.d.ts +267 -4
- package/src/_services/images/index.ts +81 -0
- package/src/_utils/upload-url.ts +27 -0
- package/src/components/index.ts +1 -0
- package/src/components/job-dock.tsx +118 -0
- package/src/components/ui/data-table.tsx +113 -2
- package/src/components/ui/image-upload.tsx +329 -0
- package/src/components/ui/index.ts +2 -0
- package/src/components/ui/tab-shortcuts.tsx +77 -0
- package/src/components/user-avatar.tsx +7 -13
- package/src/contexts/index.ts +2 -0
- package/src/contexts/jobs-context.tsx +146 -0
- package/src/contexts/jobs-store.ts +391 -0
- package/src/features/login/hooks/use-login-flow.ts +1 -1
- package/src/features/notifications/components/notification-item.tsx +34 -10
- package/src/features/notifications/hooks/use-notifications.ts +32 -1
- package/src/features/notifications/notifications-center.tsx +37 -15
- package/src/features/notifications/services/notifications.service.ts +10 -0
- package/src/features/profile/force-password-change.tsx +1 -1
- package/src/features/profile/profile-screen.tsx +4 -2
- package/src/features/recovery/reset-password-screen.tsx +1 -1
- package/src/features/shortcuts/components/shortcut-card.tsx +0 -5
- package/src/features/shortcuts/shortcuts-screen.tsx +14 -3
- package/src/hooks/use-image-upload.ts +169 -0
- package/src/hooks/use-request.ts +47 -5
- package/src/hooks/use-shortcut.ts +52 -3
- package/src/i18n/messages/en.ts +27 -1
- package/src/i18n/messages/pt.ts +27 -1
- package/src/index.ts +32 -0
- package/src/styles/core.css +31 -0
package/src/i18n/messages/pt.ts
CHANGED
|
@@ -93,6 +93,21 @@ export const pt = {
|
|
|
93
93
|
running: "Processando…",
|
|
94
94
|
completed: "Processamento concluído",
|
|
95
95
|
failed: "Não foi possível concluir o processamento",
|
|
96
|
+
dockRunning: "{count} em andamento",
|
|
97
|
+
dockFailed: "Algo não deu certo",
|
|
98
|
+
},
|
|
99
|
+
image: {
|
|
100
|
+
empty: "Arraste uma imagem, cole, ou",
|
|
101
|
+
choose: "escolha um arquivo",
|
|
102
|
+
urlLabel: "Ou cole o endereço de uma imagem",
|
|
103
|
+
urlAction: "Buscar",
|
|
104
|
+
remove: "Remover imagem",
|
|
105
|
+
replace: "Trocar imagem",
|
|
106
|
+
sending: "Enviando…",
|
|
107
|
+
tooLarge: "A imagem passa do limite de {size}MB",
|
|
108
|
+
invalidType: "Formato inválido — use JPEG, PNG ou WebP",
|
|
109
|
+
failed: "Não foi possível enviar a imagem",
|
|
110
|
+
hint: "A imagem é convertida para {format} em até {width}px.",
|
|
96
111
|
},
|
|
97
112
|
queues: {
|
|
98
113
|
title: "Filas",
|
|
@@ -129,12 +144,17 @@ export const pt = {
|
|
|
129
144
|
where: "Em qualquer listagem que tenha o botão de cadastrar.",
|
|
130
145
|
caveat: "Não dispara dentro de um campo de texto nem com um modal aberto",
|
|
131
146
|
},
|
|
147
|
+
tabs: {
|
|
148
|
+
name: "Trocar de aba",
|
|
149
|
+
where:
|
|
150
|
+
"Em qualquer tela com abas, o número abre a aba naquela posição — 1 é a primeira.",
|
|
151
|
+
caveat: "Não dispara dentro de um campo de texto nem com um modal aberto",
|
|
152
|
+
},
|
|
132
153
|
expand: {
|
|
133
154
|
name: "Ampliar o modal",
|
|
134
155
|
where:
|
|
135
156
|
"Com um modal aberto, alterna entre o tamanho normal e o ampliado. Vale em qualquer lugar do modal, como o Esc.",
|
|
136
157
|
caveat: "Funciona em qualquer campo, e não envia o formulário junto",
|
|
137
|
-
note: "No Mac, o Alt é a tecla Option (⌥) — em boa parte dos teclados ela vem escrita das duas formas.",
|
|
138
158
|
},
|
|
139
159
|
submit: {
|
|
140
160
|
name: "Enviar o formulário",
|
|
@@ -157,6 +177,8 @@ export const pt = {
|
|
|
157
177
|
},
|
|
158
178
|
table: {
|
|
159
179
|
columns: "Colunas",
|
|
180
|
+
selectAll: "Selecionar todas as linhas da página",
|
|
181
|
+
selectRow: "Selecionar esta linha",
|
|
160
182
|
columnsButton: "Colunas",
|
|
161
183
|
columnsTitle: "Configurar visualização de colunas",
|
|
162
184
|
columnsHint: "Selecione as colunas que deseja visualizar na tabela.",
|
|
@@ -181,6 +203,7 @@ export const pt = {
|
|
|
181
203
|
hint: "Preencha só os campos que quiser usar. Tudo é combinado com E.",
|
|
182
204
|
apply: "Aplicar",
|
|
183
205
|
clear: "Limpar",
|
|
206
|
+
close: "Fechar",
|
|
184
207
|
empty: "Esta listagem ainda não tem filtros.",
|
|
185
208
|
noOptions: "Nenhuma opção disponível",
|
|
186
209
|
all: "Todos",
|
|
@@ -239,6 +262,9 @@ export const pt = {
|
|
|
239
262
|
title: "Notificações",
|
|
240
263
|
all: "Todas",
|
|
241
264
|
unread: "Não lidas",
|
|
265
|
+
read: "Lidas",
|
|
266
|
+
clearRead: "Limpar lidas",
|
|
267
|
+
dismiss: "Tirar da lista",
|
|
242
268
|
markAllRead: "Marcar todas como lidas",
|
|
243
269
|
empty: "Nenhuma notificação",
|
|
244
270
|
},
|
package/src/index.ts
CHANGED
|
@@ -87,6 +87,8 @@ export type { UseFilterSchemaResult } from "#core/hooks/use-filter-schema";
|
|
|
87
87
|
export { useFilterSchema } from "#core/hooks/use-filter-schema";
|
|
88
88
|
export type { FilterMode, FiltersState } from "#core/hooks/use-filters";
|
|
89
89
|
export { useFilters } from "#core/hooks/use-filters";
|
|
90
|
+
export type { UseImageUploadResult } from "#core/hooks/use-image-upload";
|
|
91
|
+
export { useImageUpload } from "#core/hooks/use-image-upload";
|
|
90
92
|
export type {
|
|
91
93
|
JobState,
|
|
92
94
|
UseJobProgressResult,
|
|
@@ -104,10 +106,13 @@ export { useListQuery } from "#core/hooks/use-list-query";
|
|
|
104
106
|
export type { RunOptions, UseRequestResult } from "#core/hooks/use-request";
|
|
105
107
|
export type { ShortcutOptions } from "#core/hooks/use-shortcut";
|
|
106
108
|
export {
|
|
109
|
+
ALT_KEY_LABELS,
|
|
107
110
|
CREATE_SHORTCUT_KEYS,
|
|
108
111
|
CREATE_SHORTCUT_LABEL,
|
|
109
112
|
EXPAND_SHORTCUT_KEY,
|
|
110
113
|
EXPAND_SHORTCUT_LABEL,
|
|
114
|
+
MAX_TAB_SHORTCUTS,
|
|
115
|
+
TAB_SHORTCUT_DIGITS,
|
|
111
116
|
useShortcut,
|
|
112
117
|
} from "#core/hooks/use-shortcut";
|
|
113
118
|
export type { TableView, UseTableViewResult } from "#core/hooks/use-table-view";
|
|
@@ -125,3 +130,30 @@ export { toListParams } from "#core/_services/api/list-query";
|
|
|
125
130
|
export { en } from "#core/i18n/messages/en";
|
|
126
131
|
export type { Messages } from "#core/i18n/messages/pt";
|
|
127
132
|
export { pt } from "#core/i18n/messages/pt";
|
|
133
|
+
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
// Upload de imagem — o componente, o serviço e o painel de trabalhos
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
// O projeto declara o perfil no backend (tamanho, formato, pasta) e usa o
|
|
138
|
+
// componente com o nome dele: `<ImageUpload profile="funkos" … />`. O
|
|
139
|
+
// `JobsProvider` entra no layout, dentro do `SocketProvider` — é ele que
|
|
140
|
+
// mantém o acompanhamento vivo quando a pessoa troca de tela no meio de um
|
|
141
|
+
// upload, e é ele que renderiza o painel do rodapé.
|
|
142
|
+
export type {
|
|
143
|
+
ImageAccepted,
|
|
144
|
+
ImageJobSummary,
|
|
145
|
+
ImageProfileInfo,
|
|
146
|
+
} from "#core/_services/images";
|
|
147
|
+
export { ImageFit, ImageFormat, imagesService } from "#core/_services/images";
|
|
148
|
+
export { uploadUrlOf } from "#core/_utils/upload-url";
|
|
149
|
+
export { JobDock } from "#core/components/job-dock";
|
|
150
|
+
export type { ImageUploadProps } from "#core/components/ui/image-upload";
|
|
151
|
+
export { ImageUpload } from "#core/components/ui/image-upload";
|
|
152
|
+
export type { JobsContextType } from "#core/contexts/jobs-context";
|
|
153
|
+
export { JobsProvider, useJobs } from "#core/contexts/jobs-context";
|
|
154
|
+
export type {
|
|
155
|
+
JobHandle,
|
|
156
|
+
TrackedJob,
|
|
157
|
+
TrackedJobState,
|
|
158
|
+
} from "#core/contexts/jobs-store";
|
|
159
|
+
export { JobsStore } from "#core/contexts/jobs-store";
|
package/src/styles/core.css
CHANGED
|
@@ -237,3 +237,34 @@
|
|
|
237
237
|
width: 0%;
|
|
238
238
|
}
|
|
239
239
|
}
|
|
240
|
+
|
|
241
|
+
/*
|
|
242
|
+
* Listras andando na barra de progresso do painel de jobs.
|
|
243
|
+
*
|
|
244
|
+
* Existe porque um job de imagem não tem etapas contáveis: ele passa de "estou
|
|
245
|
+
* baixando" para "acabei" sem números no meio, e uma barra parada em 50% é
|
|
246
|
+
* indistinguível de uma barra travada. As listras dizem "ainda estou aqui" sem
|
|
247
|
+
* fingir precisão que o job não tem.
|
|
248
|
+
*/
|
|
249
|
+
.rl-job-stripes {
|
|
250
|
+
background-image: linear-gradient(
|
|
251
|
+
45deg,
|
|
252
|
+
rgb(255 255 255 / 0.3) 25%,
|
|
253
|
+
transparent 25%,
|
|
254
|
+
transparent 50%,
|
|
255
|
+
rgb(255 255 255 / 0.3) 50%,
|
|
256
|
+
rgb(255 255 255 / 0.3) 75%,
|
|
257
|
+
transparent 75%,
|
|
258
|
+
transparent
|
|
259
|
+
);
|
|
260
|
+
background-size: 1rem 1rem;
|
|
261
|
+
animation: rl-job-stripes 1s linear infinite;
|
|
262
|
+
}
|
|
263
|
+
@keyframes rl-job-stripes {
|
|
264
|
+
from {
|
|
265
|
+
background-position: 0 0;
|
|
266
|
+
}
|
|
267
|
+
to {
|
|
268
|
+
background-position: 1rem 0;
|
|
269
|
+
}
|
|
270
|
+
}
|