hazo_ui 6.12.3 → 6.12.5
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/CHANGE_LOG.md +48 -0
- package/README.md +4 -0
- package/dist/index.cjs +368 -221
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +368 -221
- package/dist/index.js.map +1 -1
- package/dist/index.locale-picker.cjs +217 -3
- package/dist/index.locale-picker.cjs.map +1 -1
- package/dist/index.locale-picker.d.cts +1 -1
- package/dist/index.locale-picker.d.ts +1 -1
- package/dist/index.locale-picker.js +217 -3
- package/dist/index.locale-picker.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -182,8 +182,8 @@ var require_extends = __commonJS({
|
|
|
182
182
|
function _extends11() {
|
|
183
183
|
return module.exports = _extends11 = Object.assign ? Object.assign.bind() : function(n) {
|
|
184
184
|
for (var e = 1; e < arguments.length; e++) {
|
|
185
|
-
var
|
|
186
|
-
for (var r in
|
|
185
|
+
var t35 = arguments[e];
|
|
186
|
+
for (var r in t35) ({}).hasOwnProperty.call(t35, r) && (n[r] = t35[r]);
|
|
187
187
|
}
|
|
188
188
|
return n;
|
|
189
189
|
}, module.exports.__esModule = true, module.exports["default"] = module.exports, _extends11.apply(null, arguments);
|
|
@@ -197,12 +197,12 @@ var require_objectWithoutPropertiesLoose = __commonJS({
|
|
|
197
197
|
"../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js"(exports, module) {
|
|
198
198
|
function _objectWithoutPropertiesLoose10(r, e) {
|
|
199
199
|
if (null == r) return {};
|
|
200
|
-
var
|
|
200
|
+
var t35 = {};
|
|
201
201
|
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
202
202
|
if (-1 !== e.indexOf(n)) continue;
|
|
203
|
-
|
|
203
|
+
t35[n] = r[n];
|
|
204
204
|
}
|
|
205
|
-
return
|
|
205
|
+
return t35;
|
|
206
206
|
}
|
|
207
207
|
module.exports = _objectWithoutPropertiesLoose10, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
208
208
|
}
|
|
@@ -817,7 +817,112 @@ var en_default = {
|
|
|
817
817
|
"icon_picker.search_placeholder": "Search icons...",
|
|
818
818
|
"common.loading": "Loading...",
|
|
819
819
|
"common.cancel": "Cancel",
|
|
820
|
-
"common.search": "Search..."
|
|
820
|
+
"common.search": "Search...",
|
|
821
|
+
"dialog.default_title": "Action required",
|
|
822
|
+
"dialog.cancel": "Cancel",
|
|
823
|
+
"dialog.ok": "OK",
|
|
824
|
+
"dialog.confirm": "Confirm",
|
|
825
|
+
"dialog.close": "Close",
|
|
826
|
+
"kanban.status_label": "Status",
|
|
827
|
+
"kanban.edit_fallback": "Edit {{id}}",
|
|
828
|
+
"kanban.update_description": "Update card details below.",
|
|
829
|
+
"kanban.saving": "Saving\u2026",
|
|
830
|
+
"kanban.save": "Save",
|
|
831
|
+
"kanban.cancel": "Cancel",
|
|
832
|
+
"kanban.select_placeholder": "Select {{label}}\u2026",
|
|
833
|
+
"kanban.select_priority": "Select priority\u2026",
|
|
834
|
+
"kanban.select_status": "Select status\u2026",
|
|
835
|
+
"markdown.placeholder": "Write in Markdown\u2026",
|
|
836
|
+
"markdown.upload_failed": "Upload failed.",
|
|
837
|
+
"markdown.loading_editor": "Loading editor\u2026",
|
|
838
|
+
"markdown.uploading_image": "Uploading image\u2026",
|
|
839
|
+
"cropper.title": "Crop photo",
|
|
840
|
+
"cropper.save": "Save",
|
|
841
|
+
"cropper.cancel": "Cancel",
|
|
842
|
+
"cropper.zoom": "Zoom",
|
|
843
|
+
"memory.search_placeholder": "Search history\u2026",
|
|
844
|
+
"memory.no_history": "No history yet",
|
|
845
|
+
"memory.remove_aria": "Remove {{label}} from history",
|
|
846
|
+
"celebration.close": "Close celebration",
|
|
847
|
+
"celebration.download_png": "Download PNG",
|
|
848
|
+
"celebration.share": "Share",
|
|
849
|
+
"celebration.copy_image": "Copy image",
|
|
850
|
+
"celebration.dismiss": "Dismiss",
|
|
851
|
+
"charts.date_range": "Date range",
|
|
852
|
+
"flex_input.must_be_valid_number": "Must be a valid number",
|
|
853
|
+
"flex_input.max_decimals": "Maximum {{count}} decimal places allowed",
|
|
854
|
+
"flex_input.min_value": "Must be at least {{min}}",
|
|
855
|
+
"flex_input.max_value": "Must be at most {{max}}",
|
|
856
|
+
"flex_input.alpha_only": "Only letters, numbers, and spaces are allowed",
|
|
857
|
+
"flex_input.must_be_valid_email": "Must be a valid email address",
|
|
858
|
+
"flex_input.min_characters": "Must be at least {{min}} characters",
|
|
859
|
+
"flex_input.max_characters": "Must be at most {{max}} characters",
|
|
860
|
+
"flex_input.invalid_format": "Invalid format",
|
|
861
|
+
"flex_input.invalid_input": "Invalid input",
|
|
862
|
+
"textbox.placeholder": "Type here...",
|
|
863
|
+
"textarea.placeholder": "Type here...",
|
|
864
|
+
"common.remove": "Remove",
|
|
865
|
+
"locale_picker.change_language": "Change language",
|
|
866
|
+
"app_logo.alt_fallback": "Logo",
|
|
867
|
+
"app_header.aria_label": "Application header",
|
|
868
|
+
"skeleton.loading_content": "Loading content",
|
|
869
|
+
"spinner.loading": "Loading",
|
|
870
|
+
"spinner.loading_text": "Loading...",
|
|
871
|
+
"rte.update_link": "Update Link",
|
|
872
|
+
"rte.add_link": "Add Link",
|
|
873
|
+
"rte.remove_link": "Remove",
|
|
874
|
+
"rte.select_size": "Select size",
|
|
875
|
+
"rte.custom_size": "Custom size",
|
|
876
|
+
"rte.insert_table": "Insert",
|
|
877
|
+
"rte.search_variables": "Search variables...",
|
|
878
|
+
"rte.no_variables": "No variables found.",
|
|
879
|
+
"rte.table_operations": "Table Operations",
|
|
880
|
+
"rte.add_row_above": "Add row above",
|
|
881
|
+
"rte.add_row_below": "Add row below",
|
|
882
|
+
"rte.add_col_left": "Add col left",
|
|
883
|
+
"rte.add_col_right": "Add col right",
|
|
884
|
+
"rte.delete_row": "Delete row",
|
|
885
|
+
"rte.delete_col": "Delete col",
|
|
886
|
+
"rte.delete_table": "Delete table",
|
|
887
|
+
"rte.insert_table_heading": "Insert Table",
|
|
888
|
+
"rte.placeholder": "Start typing...",
|
|
889
|
+
"sort.asc": "Asc",
|
|
890
|
+
"sort.desc": "Desc",
|
|
891
|
+
"sort.reorder_aria": "Reorder {{field}}",
|
|
892
|
+
"sort.priority_aria": "Sort priority {{n}}",
|
|
893
|
+
"sort.direction_aria": "Sort direction for {{field}}",
|
|
894
|
+
"sort.remove_aria": "Remove {{field}} from sort",
|
|
895
|
+
"sort.active_sorts": "Active sorts",
|
|
896
|
+
"sort.no_active_sorts": "No active sorts",
|
|
897
|
+
"sort.button_label": "Sort",
|
|
898
|
+
"sort.empty_message": "No sort fields yet. Add one below to start ordering rows.",
|
|
899
|
+
"sort.all_fields_added": "All fields added",
|
|
900
|
+
"sort.add_sort_field": "Add sort field",
|
|
901
|
+
"sort.no_fields_available": "No fields available.",
|
|
902
|
+
"kanban.dnd_pickup": "Picked up {{item}}. Currently in {{column}}. Use arrow keys to choose a different column. Press space to drop, escape to cancel.",
|
|
903
|
+
"kanban.dnd_over": "{{item}} over {{column}}.",
|
|
904
|
+
"kanban.dnd_drop": "{{item}} dropped in {{column}}, position {{pos}}.",
|
|
905
|
+
"kanban.dnd_reorder": "{{item}} reordered to position {{pos}} in {{column}}.",
|
|
906
|
+
"kanban.dnd_cancel": "Movement cancelled. {{item}} returned to {{column}}.",
|
|
907
|
+
"kanban.draggable_card": "draggable card",
|
|
908
|
+
"loading.still_loading": "We're still trying to load the {{label}}. The connection may be slow.",
|
|
909
|
+
"loading.try_again": "Try again",
|
|
910
|
+
"loading.gentle_message": "Loading {{label}}\u2026",
|
|
911
|
+
"loading.default_label": "content",
|
|
912
|
+
"loading.firm_message": "Still working on it \u2014 almost there.",
|
|
913
|
+
"icon_picker.emoji_tab": "Emoji",
|
|
914
|
+
"icon_picker.tools_group": "Tools",
|
|
915
|
+
"icon_picker.home_group": "Home",
|
|
916
|
+
"icon_picker.weather_group": "Weather",
|
|
917
|
+
"icon_picker.nature_group": "Nature",
|
|
918
|
+
"icon_picker.symbols_group": "Symbols",
|
|
919
|
+
"icon_picker.no_results": "No icons found",
|
|
920
|
+
"error.correlation_id": "Correlation ID",
|
|
921
|
+
"charts.total": "Total: {{value}}",
|
|
922
|
+
"charts.pct_of_first": "% of first: {{pct}}%",
|
|
923
|
+
"charts.pct_of_prev": "% of prev: {{pct}}%",
|
|
924
|
+
"charts.dropoff": "Drop-off: \u2212{{value}}",
|
|
925
|
+
"toast.missing_prefix": "Missing: {{items}}"
|
|
821
926
|
};
|
|
822
927
|
var t = i18n.createPackageT("hazo_ui", en_default);
|
|
823
928
|
function FilterFieldItem({
|
|
@@ -1305,7 +1410,7 @@ function SortableSortFieldItem({
|
|
|
1305
1410
|
...attributes,
|
|
1306
1411
|
...listeners,
|
|
1307
1412
|
className: "cls_drag_handle flex h-7 w-5 shrink-0 cursor-grab items-center justify-center rounded text-muted-foreground/60 hover:text-foreground active:cursor-grabbing",
|
|
1308
|
-
"aria-label":
|
|
1413
|
+
"aria-label": t2("sort.reorder_aria", { field: fieldLabel }),
|
|
1309
1414
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.GripVertical, { className: "cls_drag_icon h-4 w-4" })
|
|
1310
1415
|
}
|
|
1311
1416
|
),
|
|
@@ -1313,7 +1418,7 @@ function SortableSortFieldItem({
|
|
|
1313
1418
|
"span",
|
|
1314
1419
|
{
|
|
1315
1420
|
className: "cls_priority_badge inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-muted text-[10px] font-semibold tabular-nums text-muted-foreground",
|
|
1316
|
-
"aria-label":
|
|
1421
|
+
"aria-label": t2("sort.priority_aria", { n: priority }),
|
|
1317
1422
|
children: priority
|
|
1318
1423
|
}
|
|
1319
1424
|
),
|
|
@@ -1322,7 +1427,7 @@ function SortableSortFieldItem({
|
|
|
1322
1427
|
"div",
|
|
1323
1428
|
{
|
|
1324
1429
|
role: "radiogroup",
|
|
1325
|
-
"aria-label":
|
|
1430
|
+
"aria-label": t2("sort.direction_aria", { field: fieldLabel }),
|
|
1326
1431
|
className: "cls_direction_control inline-flex shrink-0 items-center rounded-md border border-border/70 bg-muted/40 p-0.5",
|
|
1327
1432
|
children: [
|
|
1328
1433
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -1336,7 +1441,7 @@ function SortableSortFieldItem({
|
|
|
1336
1441
|
className: "cls_dir_asc inline-flex items-center gap-1 rounded px-2 py-1 text-xs font-medium text-muted-foreground transition-colors data-[active=true]:bg-background data-[active=true]:text-foreground data-[active=true]:shadow-sm hover:text-foreground",
|
|
1337
1442
|
children: [
|
|
1338
1443
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUp, { className: "h-3 w-3" }),
|
|
1339
|
-
"
|
|
1444
|
+
t2("sort.asc")
|
|
1340
1445
|
]
|
|
1341
1446
|
}
|
|
1342
1447
|
),
|
|
@@ -1351,7 +1456,7 @@ function SortableSortFieldItem({
|
|
|
1351
1456
|
className: "cls_dir_desc inline-flex items-center gap-1 rounded px-2 py-1 text-xs font-medium text-muted-foreground transition-colors data-[active=true]:bg-background data-[active=true]:text-foreground data-[active=true]:shadow-sm hover:text-foreground",
|
|
1352
1457
|
children: [
|
|
1353
1458
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowDown, { className: "h-3 w-3" }),
|
|
1354
|
-
"
|
|
1459
|
+
t2("sort.desc")
|
|
1355
1460
|
]
|
|
1356
1461
|
}
|
|
1357
1462
|
)
|
|
@@ -1365,7 +1470,7 @@ function SortableSortFieldItem({
|
|
|
1365
1470
|
size: "sm",
|
|
1366
1471
|
onClick: onDelete,
|
|
1367
1472
|
className: "cls_delete_btn h-7 w-7 shrink-0 p-0 text-muted-foreground/60 hover:bg-destructive/10 hover:text-destructive",
|
|
1368
|
-
"aria-label":
|
|
1473
|
+
"aria-label": t2("sort.remove_aria", { field: fieldLabel }),
|
|
1369
1474
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "cls_delete_icon h-3.5 w-3.5" })
|
|
1370
1475
|
}
|
|
1371
1476
|
)
|
|
@@ -1478,16 +1583,16 @@ function HazoUiMultiSortDialog({
|
|
|
1478
1583
|
};
|
|
1479
1584
|
const hasActiveSorts = initialSortFields.length > 0;
|
|
1480
1585
|
const tooltipContent = hasActiveSorts ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cls_sort_tooltip_content space-y-1", children: [
|
|
1481
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_tooltip_title text-xs font-semibold mb-1", children: "
|
|
1586
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_tooltip_title text-xs font-semibold mb-1", children: t2("sort.active_sorts") }),
|
|
1482
1587
|
initialSortFields.map((sortConfig, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cls_tooltip_item text-xs", children: [
|
|
1483
1588
|
index + 1,
|
|
1484
1589
|
". ",
|
|
1485
1590
|
getFieldLabel(sortConfig.field),
|
|
1486
1591
|
" (",
|
|
1487
|
-
sortConfig.direction === "asc" ? "
|
|
1592
|
+
sortConfig.direction === "asc" ? t2("sort.asc") : t2("sort.desc"),
|
|
1488
1593
|
")"
|
|
1489
1594
|
] }, sortConfig.field))
|
|
1490
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_sort_tooltip_content text-xs", children: "
|
|
1595
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_sort_tooltip_content text-xs", children: t2("sort.no_active_sorts") });
|
|
1491
1596
|
return /* @__PURE__ */ jsxRuntime.jsxs(Dialog, { open: isOpen, onOpenChange: setIsOpen, children: [
|
|
1492
1597
|
/* @__PURE__ */ jsxRuntime.jsx(TooltipProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(Tooltip, { children: [
|
|
1493
1598
|
/* @__PURE__ */ jsxRuntime.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(DialogTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -1507,7 +1612,7 @@ function HazoUiMultiSortDialog({
|
|
|
1507
1612
|
)
|
|
1508
1613
|
}
|
|
1509
1614
|
),
|
|
1510
|
-
"
|
|
1615
|
+
t2("sort.button_label"),
|
|
1511
1616
|
hasActiveSorts && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cls_sort_count ml-2 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-blue-600 px-1 text-[10px] font-semibold text-white", children: initialSortFields.length })
|
|
1512
1617
|
]
|
|
1513
1618
|
}
|
|
@@ -1552,7 +1657,7 @@ function HazoUiMultiSortDialog({
|
|
|
1552
1657
|
}
|
|
1553
1658
|
)
|
|
1554
1659
|
}
|
|
1555
|
-
) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_empty_sort_fields rounded-lg border border-dashed border-border/70 bg-muted/20 px-4 py-6 text-center text-xs text-muted-foreground", children: "
|
|
1660
|
+
) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_empty_sort_fields rounded-lg border border-dashed border-border/70 bg-muted/20 px-4 py-6 text-center text-xs text-muted-foreground", children: t2("sort.empty_message") }),
|
|
1556
1661
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_add_field_section", children: /* @__PURE__ */ jsxRuntime.jsxs(Popover, { open: isComboboxOpen, onOpenChange: setIsComboboxOpen, children: [
|
|
1557
1662
|
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1558
1663
|
Button,
|
|
@@ -1564,13 +1669,13 @@ function HazoUiMultiSortDialog({
|
|
|
1564
1669
|
className: "cls_add_field_combobox w-full justify-start gap-2 border border-dashed border-border/70 text-sm font-medium text-muted-foreground hover:border-border hover:bg-muted/40 hover:text-foreground",
|
|
1565
1670
|
children: [
|
|
1566
1671
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "cls_plus_icon h-4 w-4" }),
|
|
1567
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: availableFieldsToAdd.length === 0 ? "
|
|
1672
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: availableFieldsToAdd.length === 0 ? t2("sort.all_fields_added") : t2("sort.add_sort_field") })
|
|
1568
1673
|
]
|
|
1569
1674
|
}
|
|
1570
1675
|
) }),
|
|
1571
1676
|
/* @__PURE__ */ jsxRuntime.jsx(PopoverContent, { className: "cls_combobox_popover w-[var(--radix-popover-trigger-width)] p-0", align: "start", children: /* @__PURE__ */ jsxRuntime.jsxs(Command, { children: [
|
|
1572
1677
|
/* @__PURE__ */ jsxRuntime.jsx(CommandInput, { placeholder: t2("sort.search_fields"), className: "cls_command_input" }),
|
|
1573
|
-
/* @__PURE__ */ jsxRuntime.jsx(CommandList, { children: availableFieldsToAdd.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(CommandEmpty, { children: "
|
|
1678
|
+
/* @__PURE__ */ jsxRuntime.jsx(CommandList, { children: availableFieldsToAdd.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(CommandEmpty, { children: t2("sort.no_fields_available") }) : /* @__PURE__ */ jsxRuntime.jsx(CommandGroup, { children: availableFieldsToAdd.map((field) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1574
1679
|
CommandItem,
|
|
1575
1680
|
{
|
|
1576
1681
|
value: field.label,
|
|
@@ -2106,11 +2211,11 @@ var SYMBOLS_ICONS = [
|
|
|
2106
2211
|
"Wrench"
|
|
2107
2212
|
];
|
|
2108
2213
|
var LUCIDE_GROUPS = [
|
|
2109
|
-
{ key: "tools",
|
|
2110
|
-
{ key: "home",
|
|
2111
|
-
{ key: "weather",
|
|
2112
|
-
{ key: "nature",
|
|
2113
|
-
{ key: "symbols",
|
|
2214
|
+
{ key: "tools", label_key: "icon_picker.tools_group", icons: TOOLS_ICONS },
|
|
2215
|
+
{ key: "home", label_key: "icon_picker.home_group", icons: HOME_ICONS },
|
|
2216
|
+
{ key: "weather", label_key: "icon_picker.weather_group", icons: WEATHER_ICONS },
|
|
2217
|
+
{ key: "nature", label_key: "icon_picker.nature_group", icons: NATURE_ICONS },
|
|
2218
|
+
{ key: "symbols", label_key: "icon_picker.symbols_group", icons: SYMBOLS_ICONS }
|
|
2114
2219
|
];
|
|
2115
2220
|
var EMOJI_ITEMS = [
|
|
2116
2221
|
// Faces
|
|
@@ -2323,11 +2428,11 @@ function HazoUiIconPicker({
|
|
|
2323
2428
|
name
|
|
2324
2429
|
);
|
|
2325
2430
|
}),
|
|
2326
|
-
filtered_search_results.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "col-span-8 py-4 text-center text-sm text-muted-foreground", children: "
|
|
2431
|
+
filtered_search_results.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "col-span-8 py-4 text-center text-sm text-muted-foreground", children: t3("icon_picker.no_results") })
|
|
2327
2432
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(Tabs, { defaultValue: "emoji", children: [
|
|
2328
2433
|
/* @__PURE__ */ jsxRuntime.jsxs(TabsList, { className: "grid w-full grid-cols-6", children: [
|
|
2329
|
-
/* @__PURE__ */ jsxRuntime.jsx(TabsTrigger, { value: "emoji", children: "
|
|
2330
|
-
LUCIDE_GROUPS.map((group) => /* @__PURE__ */ jsxRuntime.jsx(TabsTrigger, { value: group.key, children: group.
|
|
2434
|
+
/* @__PURE__ */ jsxRuntime.jsx(TabsTrigger, { value: "emoji", children: t3("icon_picker.emoji_tab") }),
|
|
2435
|
+
LUCIDE_GROUPS.map((group) => /* @__PURE__ */ jsxRuntime.jsx(TabsTrigger, { value: group.key, children: t3(group.label_key) }, group.key))
|
|
2331
2436
|
] }),
|
|
2332
2437
|
/* @__PURE__ */ jsxRuntime.jsx(TabsContent, { value: "emoji", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid max-h-56 grid-cols-8 gap-1 overflow-y-auto", children: EMOJI_ITEMS.map((emoji, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2333
2438
|
"button",
|
|
@@ -2359,6 +2464,7 @@ function HazoUiIconPicker({
|
|
|
2359
2464
|
}
|
|
2360
2465
|
) });
|
|
2361
2466
|
}
|
|
2467
|
+
var t4 = i18n.createPackageT("hazo_ui", en_default);
|
|
2362
2468
|
function validateInput(value, input_type, text_len_min, text_len_max, num_min, num_max, regex, num_decimals) {
|
|
2363
2469
|
if (value === "") {
|
|
2364
2470
|
return { isValid: true };
|
|
@@ -2367,36 +2473,36 @@ function validateInput(value, input_type, text_len_min, text_len_max, num_min, n
|
|
|
2367
2473
|
case "numeric": {
|
|
2368
2474
|
const numValue = parseFloat(value);
|
|
2369
2475
|
if (isNaN(numValue)) {
|
|
2370
|
-
return { isValid: false, errorMessage: "
|
|
2476
|
+
return { isValid: false, errorMessage: t4("flex_input.must_be_valid_number") };
|
|
2371
2477
|
}
|
|
2372
2478
|
if (num_decimals !== void 0) {
|
|
2373
2479
|
const decimalPlaces = value.split(".")[1]?.length || 0;
|
|
2374
2480
|
if (decimalPlaces > num_decimals) {
|
|
2375
2481
|
return {
|
|
2376
2482
|
isValid: false,
|
|
2377
|
-
errorMessage:
|
|
2483
|
+
errorMessage: t4("flex_input.max_decimals", { count: num_decimals })
|
|
2378
2484
|
};
|
|
2379
2485
|
}
|
|
2380
2486
|
}
|
|
2381
2487
|
if (num_min !== void 0 && numValue < num_min) {
|
|
2382
|
-
return { isValid: false, errorMessage:
|
|
2488
|
+
return { isValid: false, errorMessage: t4("flex_input.min_value", { min: num_min }) };
|
|
2383
2489
|
}
|
|
2384
2490
|
if (num_max !== void 0 && numValue > num_max) {
|
|
2385
|
-
return { isValid: false, errorMessage:
|
|
2491
|
+
return { isValid: false, errorMessage: t4("flex_input.max_value", { max: num_max }) };
|
|
2386
2492
|
}
|
|
2387
2493
|
break;
|
|
2388
2494
|
}
|
|
2389
2495
|
case "alpha": {
|
|
2390
2496
|
const alphaRegex = /^[A-Za-z0-9\s]*$/;
|
|
2391
2497
|
if (!alphaRegex.test(value)) {
|
|
2392
|
-
return { isValid: false, errorMessage: "
|
|
2498
|
+
return { isValid: false, errorMessage: t4("flex_input.alpha_only") };
|
|
2393
2499
|
}
|
|
2394
2500
|
break;
|
|
2395
2501
|
}
|
|
2396
2502
|
case "email": {
|
|
2397
2503
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
2398
2504
|
if (!emailRegex.test(value)) {
|
|
2399
|
-
return { isValid: false, errorMessage: "
|
|
2505
|
+
return { isValid: false, errorMessage: t4("flex_input.must_be_valid_email") };
|
|
2400
2506
|
}
|
|
2401
2507
|
break;
|
|
2402
2508
|
}
|
|
@@ -2404,13 +2510,13 @@ function validateInput(value, input_type, text_len_min, text_len_max, num_min, n
|
|
|
2404
2510
|
if (text_len_min !== void 0 && value.length < text_len_min) {
|
|
2405
2511
|
return {
|
|
2406
2512
|
isValid: false,
|
|
2407
|
-
errorMessage:
|
|
2513
|
+
errorMessage: t4("flex_input.min_characters", { min: text_len_min })
|
|
2408
2514
|
};
|
|
2409
2515
|
}
|
|
2410
2516
|
if (text_len_max !== void 0 && value.length > text_len_max) {
|
|
2411
2517
|
return {
|
|
2412
2518
|
isValid: false,
|
|
2413
|
-
errorMessage:
|
|
2519
|
+
errorMessage: t4("flex_input.max_characters", { max: text_len_max })
|
|
2414
2520
|
};
|
|
2415
2521
|
}
|
|
2416
2522
|
break;
|
|
@@ -2419,7 +2525,7 @@ function validateInput(value, input_type, text_len_min, text_len_max, num_min, n
|
|
|
2419
2525
|
if (regex) {
|
|
2420
2526
|
const regexPattern = typeof regex === "string" ? new RegExp(regex) : regex;
|
|
2421
2527
|
if (!regexPattern.test(value)) {
|
|
2422
|
-
return { isValid: false, errorMessage: "
|
|
2528
|
+
return { isValid: false, errorMessage: t4("flex_input.invalid_format") };
|
|
2423
2529
|
}
|
|
2424
2530
|
}
|
|
2425
2531
|
return { isValid: true };
|
|
@@ -2515,7 +2621,7 @@ var HazoUiFlexInput = React27__namespace.forwardRef(
|
|
|
2515
2621
|
num_decimals
|
|
2516
2622
|
);
|
|
2517
2623
|
if (!validation.isValid) {
|
|
2518
|
-
setErrorMessage(validation.errorMessage || format_guide || "
|
|
2624
|
+
setErrorMessage(validation.errorMessage || format_guide || t4("flex_input.invalid_input"));
|
|
2519
2625
|
} else {
|
|
2520
2626
|
setErrorMessage(void 0);
|
|
2521
2627
|
}
|
|
@@ -3745,10 +3851,10 @@ var BLOCK_TYPE_LABEL_KEYS = {
|
|
|
3745
3851
|
"code-block": "rte.block_type.code_block",
|
|
3746
3852
|
blockquote: "rte.block_type.blockquote"
|
|
3747
3853
|
};
|
|
3748
|
-
function get_translated_block_types(
|
|
3854
|
+
function get_translated_block_types(t35) {
|
|
3749
3855
|
return BLOCK_TYPES.map((type) => ({
|
|
3750
3856
|
...type,
|
|
3751
|
-
label:
|
|
3857
|
+
label: t35(BLOCK_TYPE_LABEL_KEYS[type.value])
|
|
3752
3858
|
}));
|
|
3753
3859
|
}
|
|
3754
3860
|
|
|
@@ -3795,7 +3901,7 @@ function get_file_extension(filename) {
|
|
|
3795
3901
|
function is_image_file(mime_type) {
|
|
3796
3902
|
return mime_type.startsWith("image/");
|
|
3797
3903
|
}
|
|
3798
|
-
var
|
|
3904
|
+
var t5 = i18n.createPackageT("hazo_ui", en_default);
|
|
3799
3905
|
var ALL_ON = {
|
|
3800
3906
|
undo_redo: true,
|
|
3801
3907
|
block_type: true,
|
|
@@ -3850,7 +3956,7 @@ var Toolbar = ({
|
|
|
3850
3956
|
}
|
|
3851
3957
|
const tb = { ...ALL_ON, ...toolbar };
|
|
3852
3958
|
const font_family_options = font_families && font_families.length > 0 ? font_families : FONT_FAMILIES;
|
|
3853
|
-
const block_type_options = get_translated_block_types(
|
|
3959
|
+
const block_type_options = get_translated_block_types(t5);
|
|
3854
3960
|
const get_current_font_size = () => {
|
|
3855
3961
|
const attrs = editor.getAttributes("textStyle");
|
|
3856
3962
|
return attrs.fontSize || FONT_SIZE_CONFIG.default;
|
|
@@ -3994,7 +4100,7 @@ var Toolbar = ({
|
|
|
3994
4100
|
{
|
|
3995
4101
|
onClick: () => editor.chain().focus().undo().run(),
|
|
3996
4102
|
disabled: !editor.can().undo(),
|
|
3997
|
-
tooltip:
|
|
4103
|
+
tooltip: t5("rte.undo"),
|
|
3998
4104
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuUndo2, { className: "h-4 w-4" })
|
|
3999
4105
|
},
|
|
4000
4106
|
"undo"
|
|
@@ -4004,7 +4110,7 @@ var Toolbar = ({
|
|
|
4004
4110
|
{
|
|
4005
4111
|
onClick: () => editor.chain().focus().redo().run(),
|
|
4006
4112
|
disabled: !editor.can().redo(),
|
|
4007
|
-
tooltip:
|
|
4113
|
+
tooltip: t5("rte.redo"),
|
|
4008
4114
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuRedo2, { className: "h-4 w-4" })
|
|
4009
4115
|
},
|
|
4010
4116
|
"redo"
|
|
@@ -4045,7 +4151,7 @@ var Toolbar = ({
|
|
|
4045
4151
|
ToolbarButton,
|
|
4046
4152
|
{
|
|
4047
4153
|
onClick: () => handle_font_size_change(-2),
|
|
4048
|
-
tooltip:
|
|
4154
|
+
tooltip: t5("rte.decrease_font_size"),
|
|
4049
4155
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuMinus, { className: "h-3 w-3" })
|
|
4050
4156
|
}
|
|
4051
4157
|
),
|
|
@@ -4054,7 +4160,7 @@ var Toolbar = ({
|
|
|
4054
4160
|
ToolbarButton,
|
|
4055
4161
|
{
|
|
4056
4162
|
onClick: () => handle_font_size_change(FONT_SIZE_CONFIG.step),
|
|
4057
|
-
tooltip:
|
|
4163
|
+
tooltip: t5("rte.increase_font_size"),
|
|
4058
4164
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPlus, { className: "h-3 w-3" })
|
|
4059
4165
|
}
|
|
4060
4166
|
)
|
|
@@ -4072,7 +4178,7 @@ var Toolbar = ({
|
|
|
4072
4178
|
{
|
|
4073
4179
|
onClick: () => editor.chain().focus().toggleBold().run(),
|
|
4074
4180
|
is_active: editor.isActive("bold"),
|
|
4075
|
-
tooltip:
|
|
4181
|
+
tooltip: t5("rte.bold"),
|
|
4076
4182
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuBold, { className: "h-4 w-4" })
|
|
4077
4183
|
},
|
|
4078
4184
|
"bold"
|
|
@@ -4086,7 +4192,7 @@ var Toolbar = ({
|
|
|
4086
4192
|
{
|
|
4087
4193
|
onClick: () => editor.chain().focus().toggleItalic().run(),
|
|
4088
4194
|
is_active: editor.isActive("italic"),
|
|
4089
|
-
tooltip:
|
|
4195
|
+
tooltip: t5("rte.italic"),
|
|
4090
4196
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuItalic, { className: "h-4 w-4" })
|
|
4091
4197
|
},
|
|
4092
4198
|
"italic"
|
|
@@ -4100,7 +4206,7 @@ var Toolbar = ({
|
|
|
4100
4206
|
{
|
|
4101
4207
|
onClick: () => editor.chain().focus().toggleUnderline().run(),
|
|
4102
4208
|
is_active: editor.isActive("underline"),
|
|
4103
|
-
tooltip:
|
|
4209
|
+
tooltip: t5("rte.underline"),
|
|
4104
4210
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuUnderline, { className: "h-4 w-4" })
|
|
4105
4211
|
},
|
|
4106
4212
|
"underline"
|
|
@@ -4114,7 +4220,7 @@ var Toolbar = ({
|
|
|
4114
4220
|
{
|
|
4115
4221
|
onClick: () => editor.chain().focus().toggleStrike().run(),
|
|
4116
4222
|
is_active: editor.isActive("strike"),
|
|
4117
|
-
tooltip:
|
|
4223
|
+
tooltip: t5("rte.strikethrough"),
|
|
4118
4224
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuStrikethrough, { className: "h-4 w-4" })
|
|
4119
4225
|
},
|
|
4120
4226
|
"strike"
|
|
@@ -4128,7 +4234,7 @@ var Toolbar = ({
|
|
|
4128
4234
|
{
|
|
4129
4235
|
onClick: () => editor.chain().focus().toggleSubscript().run(),
|
|
4130
4236
|
is_active: editor.isActive("subscript"),
|
|
4131
|
-
tooltip:
|
|
4237
|
+
tooltip: t5("rte.subscript"),
|
|
4132
4238
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSubscript, { className: "h-4 w-4" })
|
|
4133
4239
|
},
|
|
4134
4240
|
"sub"
|
|
@@ -4142,7 +4248,7 @@ var Toolbar = ({
|
|
|
4142
4248
|
{
|
|
4143
4249
|
onClick: () => editor.chain().focus().toggleSuperscript().run(),
|
|
4144
4250
|
is_active: editor.isActive("superscript"),
|
|
4145
|
-
tooltip:
|
|
4251
|
+
tooltip: t5("rte.superscript"),
|
|
4146
4252
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuSuperscript, { className: "h-4 w-4" })
|
|
4147
4253
|
},
|
|
4148
4254
|
"super"
|
|
@@ -4156,7 +4262,7 @@ var Toolbar = ({
|
|
|
4156
4262
|
if (tb.link) {
|
|
4157
4263
|
items.push(
|
|
4158
4264
|
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { open: link_popover_open, onOpenChange: set_link_popover_open, children: [
|
|
4159
|
-
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { is_active: editor.isActive("link"), tooltip:
|
|
4265
|
+
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { is_active: editor.isActive("link"), tooltip: t5("rte.link"), children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuLink, { className: "h-4 w-4" }) }) }),
|
|
4160
4266
|
/* @__PURE__ */ jsxRuntime.jsx(PopoverContent, { className: "w-80 p-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
4161
4267
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4162
4268
|
Input,
|
|
@@ -4168,17 +4274,14 @@ var Toolbar = ({
|
|
|
4168
4274
|
}
|
|
4169
4275
|
),
|
|
4170
4276
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
|
|
4171
|
-
/* @__PURE__ */ jsxRuntime.
|
|
4172
|
-
editor.isActive("link") ? "Update" : "Add",
|
|
4173
|
-
" Link"
|
|
4174
|
-
] }),
|
|
4277
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button, { size: "sm", onClick: handle_set_link, className: "flex-1", children: editor.isActive("link") ? t5("rte.update_link") : t5("rte.add_link") }),
|
|
4175
4278
|
editor.isActive("link") && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4176
4279
|
Button,
|
|
4177
4280
|
{
|
|
4178
4281
|
size: "sm",
|
|
4179
4282
|
variant: "destructive",
|
|
4180
4283
|
onClick: handle_remove_link,
|
|
4181
|
-
children: "
|
|
4284
|
+
children: t5("rte.remove_link")
|
|
4182
4285
|
}
|
|
4183
4286
|
)
|
|
4184
4287
|
] })
|
|
@@ -4192,7 +4295,7 @@ var Toolbar = ({
|
|
|
4192
4295
|
ToolbarButton,
|
|
4193
4296
|
{
|
|
4194
4297
|
onClick: () => editor.chain().focus().unsetAllMarks().clearNodes().run(),
|
|
4195
|
-
tooltip:
|
|
4298
|
+
tooltip: t5("rte.clear_formatting"),
|
|
4196
4299
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuRemoveFormatting, { className: "h-4 w-4" })
|
|
4197
4300
|
},
|
|
4198
4301
|
"clear"
|
|
@@ -4206,7 +4309,7 @@ var Toolbar = ({
|
|
|
4206
4309
|
if (tb.text_color) {
|
|
4207
4310
|
items.push(
|
|
4208
4311
|
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { open: text_color_open, onOpenChange: set_text_color_open, children: [
|
|
4209
|
-
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { tooltip:
|
|
4312
|
+
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { tooltip: t5("rte.text_color"), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center", children: [
|
|
4210
4313
|
/* @__PURE__ */ jsxRuntime.jsx(lu.LuPalette, { className: "h-4 w-4" }),
|
|
4211
4314
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4212
4315
|
"div",
|
|
@@ -4249,7 +4352,7 @@ var Toolbar = ({
|
|
|
4249
4352
|
if (tb.highlight_color) {
|
|
4250
4353
|
items.push(
|
|
4251
4354
|
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { open: highlight_color_open, onOpenChange: set_highlight_color_open, children: [
|
|
4252
|
-
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { tooltip:
|
|
4355
|
+
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { tooltip: t5("rte.highlight_color"), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center", children: [
|
|
4253
4356
|
/* @__PURE__ */ jsxRuntime.jsx(lu.LuHighlighter, { className: "h-4 w-4" }),
|
|
4254
4357
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4255
4358
|
"div",
|
|
@@ -4292,7 +4395,7 @@ var Toolbar = ({
|
|
|
4292
4395
|
{
|
|
4293
4396
|
onClick: () => editor.chain().focus().setTextAlign("left").run(),
|
|
4294
4397
|
is_active: editor.isActive({ textAlign: "left" }),
|
|
4295
|
-
tooltip:
|
|
4398
|
+
tooltip: t5("rte.align_left"),
|
|
4296
4399
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuAlignLeft, { className: "h-4 w-4" })
|
|
4297
4400
|
},
|
|
4298
4401
|
"align-left"
|
|
@@ -4302,7 +4405,7 @@ var Toolbar = ({
|
|
|
4302
4405
|
{
|
|
4303
4406
|
onClick: () => editor.chain().focus().setTextAlign("center").run(),
|
|
4304
4407
|
is_active: editor.isActive({ textAlign: "center" }),
|
|
4305
|
-
tooltip:
|
|
4408
|
+
tooltip: t5("rte.align_center"),
|
|
4306
4409
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuAlignCenter, { className: "h-4 w-4" })
|
|
4307
4410
|
},
|
|
4308
4411
|
"align-center"
|
|
@@ -4312,7 +4415,7 @@ var Toolbar = ({
|
|
|
4312
4415
|
{
|
|
4313
4416
|
onClick: () => editor.chain().focus().setTextAlign("right").run(),
|
|
4314
4417
|
is_active: editor.isActive({ textAlign: "right" }),
|
|
4315
|
-
tooltip:
|
|
4418
|
+
tooltip: t5("rte.align_right"),
|
|
4316
4419
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuAlignRight, { className: "h-4 w-4" })
|
|
4317
4420
|
},
|
|
4318
4421
|
"align-right"
|
|
@@ -4322,7 +4425,7 @@ var Toolbar = ({
|
|
|
4322
4425
|
{
|
|
4323
4426
|
onClick: () => editor.chain().focus().setTextAlign("justify").run(),
|
|
4324
4427
|
is_active: editor.isActive({ textAlign: "justify" }),
|
|
4325
|
-
tooltip:
|
|
4428
|
+
tooltip: t5("rte.justify"),
|
|
4326
4429
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuAlignJustify, { className: "h-4 w-4" })
|
|
4327
4430
|
},
|
|
4328
4431
|
"align-justify"
|
|
@@ -4338,7 +4441,7 @@ var Toolbar = ({
|
|
|
4338
4441
|
{
|
|
4339
4442
|
onClick: () => editor.chain().focus().toggleBulletList().run(),
|
|
4340
4443
|
is_active: editor.isActive("bulletList"),
|
|
4341
|
-
tooltip:
|
|
4444
|
+
tooltip: t5("rte.bullet_list"),
|
|
4342
4445
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuList, { className: "h-4 w-4" })
|
|
4343
4446
|
},
|
|
4344
4447
|
"bullet"
|
|
@@ -4352,7 +4455,7 @@ var Toolbar = ({
|
|
|
4352
4455
|
{
|
|
4353
4456
|
onClick: () => editor.chain().focus().toggleOrderedList().run(),
|
|
4354
4457
|
is_active: editor.isActive("orderedList"),
|
|
4355
|
-
tooltip:
|
|
4458
|
+
tooltip: t5("rte.ordered_list"),
|
|
4356
4459
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuListOrdered, { className: "h-4 w-4" })
|
|
4357
4460
|
},
|
|
4358
4461
|
"ordered"
|
|
@@ -4366,7 +4469,7 @@ var Toolbar = ({
|
|
|
4366
4469
|
{
|
|
4367
4470
|
onClick: () => editor.chain().focus().toggleTaskList().run(),
|
|
4368
4471
|
is_active: editor.isActive("taskList"),
|
|
4369
|
-
tooltip:
|
|
4472
|
+
tooltip: t5("rte.checklist"),
|
|
4370
4473
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuListChecks, { className: "h-4 w-4" })
|
|
4371
4474
|
},
|
|
4372
4475
|
"task"
|
|
@@ -4388,7 +4491,7 @@ var Toolbar = ({
|
|
|
4388
4491
|
}
|
|
4389
4492
|
},
|
|
4390
4493
|
disabled: !editor.can().liftListItem("listItem") && !editor.can().liftListItem("taskItem"),
|
|
4391
|
-
tooltip:
|
|
4494
|
+
tooltip: t5("rte.decrease_indent"),
|
|
4392
4495
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuIndentDecrease, { className: "h-4 w-4" })
|
|
4393
4496
|
},
|
|
4394
4497
|
"indent-dec"
|
|
@@ -4404,7 +4507,7 @@ var Toolbar = ({
|
|
|
4404
4507
|
}
|
|
4405
4508
|
},
|
|
4406
4509
|
disabled: !editor.can().sinkListItem("listItem") && !editor.can().sinkListItem("taskItem"),
|
|
4407
|
-
tooltip:
|
|
4510
|
+
tooltip: t5("rte.increase_indent"),
|
|
4408
4511
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuIndentIncrease, { className: "h-4 w-4" })
|
|
4409
4512
|
},
|
|
4410
4513
|
"indent-inc"
|
|
@@ -4415,7 +4518,7 @@ var Toolbar = ({
|
|
|
4415
4518
|
const items = [];
|
|
4416
4519
|
if (tb.horizontal_rule) {
|
|
4417
4520
|
items.push(
|
|
4418
|
-
/* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { onClick: handle_hr_insert, tooltip:
|
|
4521
|
+
/* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { onClick: handle_hr_insert, tooltip: t5("rte.horizontal_rule"), children: /* @__PURE__ */ jsxRuntime.jsx(rx.RxDividerHorizontal, { className: "h-4 w-4" }) }, "hr")
|
|
4419
4522
|
);
|
|
4420
4523
|
}
|
|
4421
4524
|
if (tb.image) {
|
|
@@ -4424,7 +4527,7 @@ var Toolbar = ({
|
|
|
4424
4527
|
ToolbarButton,
|
|
4425
4528
|
{
|
|
4426
4529
|
onClick: () => image_input_ref.current?.click(),
|
|
4427
|
-
tooltip:
|
|
4530
|
+
tooltip: t5("rte.insert_image"),
|
|
4428
4531
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuImage, { className: "h-4 w-4" })
|
|
4429
4532
|
},
|
|
4430
4533
|
"image"
|
|
@@ -4438,14 +4541,14 @@ var Toolbar = ({
|
|
|
4438
4541
|
ToolbarButton,
|
|
4439
4542
|
{
|
|
4440
4543
|
is_active: editor.isActive("table"),
|
|
4441
|
-
tooltip:
|
|
4544
|
+
tooltip: t5("rte.table"),
|
|
4442
4545
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuTable, { className: "h-4 w-4" })
|
|
4443
4546
|
}
|
|
4444
4547
|
) }),
|
|
4445
4548
|
/* @__PURE__ */ jsxRuntime.jsx(PopoverContent, { className: "w-auto p-3", align: "start", children: editor.isActive("table") ? (
|
|
4446
4549
|
// Table editing controls when inside a table
|
|
4447
4550
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
4448
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs font-medium mb-1", children: "
|
|
4551
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs font-medium mb-1", children: t5("rte.table_operations") }),
|
|
4449
4552
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-1", children: [
|
|
4450
4553
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4451
4554
|
Button,
|
|
@@ -4456,7 +4559,7 @@ var Toolbar = ({
|
|
|
4456
4559
|
onClick: handle_add_row_before,
|
|
4457
4560
|
children: [
|
|
4458
4561
|
/* @__PURE__ */ jsxRuntime.jsx(lu.LuTableRowsSplit, { className: "h-3 w-3 mr-1" }),
|
|
4459
|
-
"
|
|
4562
|
+
t5("rte.add_row_above")
|
|
4460
4563
|
]
|
|
4461
4564
|
}
|
|
4462
4565
|
),
|
|
@@ -4469,7 +4572,7 @@ var Toolbar = ({
|
|
|
4469
4572
|
onClick: handle_add_row_after,
|
|
4470
4573
|
children: [
|
|
4471
4574
|
/* @__PURE__ */ jsxRuntime.jsx(lu.LuTableRowsSplit, { className: "h-3 w-3 mr-1" }),
|
|
4472
|
-
"
|
|
4575
|
+
t5("rte.add_row_below")
|
|
4473
4576
|
]
|
|
4474
4577
|
}
|
|
4475
4578
|
),
|
|
@@ -4482,7 +4585,7 @@ var Toolbar = ({
|
|
|
4482
4585
|
onClick: handle_add_col_before,
|
|
4483
4586
|
children: [
|
|
4484
4587
|
/* @__PURE__ */ jsxRuntime.jsx(lu.LuTableColumnsSplit, { className: "h-3 w-3 mr-1" }),
|
|
4485
|
-
"
|
|
4588
|
+
t5("rte.add_col_left")
|
|
4486
4589
|
]
|
|
4487
4590
|
}
|
|
4488
4591
|
),
|
|
@@ -4495,7 +4598,7 @@ var Toolbar = ({
|
|
|
4495
4598
|
onClick: handle_add_col_after,
|
|
4496
4599
|
children: [
|
|
4497
4600
|
/* @__PURE__ */ jsxRuntime.jsx(lu.LuTableColumnsSplit, { className: "h-3 w-3 mr-1" }),
|
|
4498
|
-
"
|
|
4601
|
+
t5("rte.add_col_right")
|
|
4499
4602
|
]
|
|
4500
4603
|
}
|
|
4501
4604
|
),
|
|
@@ -4508,7 +4611,7 @@ var Toolbar = ({
|
|
|
4508
4611
|
onClick: handle_delete_row,
|
|
4509
4612
|
children: [
|
|
4510
4613
|
/* @__PURE__ */ jsxRuntime.jsx(lu.LuTrash2, { className: "h-3 w-3 mr-1" }),
|
|
4511
|
-
"
|
|
4614
|
+
t5("rte.delete_row")
|
|
4512
4615
|
]
|
|
4513
4616
|
}
|
|
4514
4617
|
),
|
|
@@ -4521,7 +4624,7 @@ var Toolbar = ({
|
|
|
4521
4624
|
onClick: handle_delete_col,
|
|
4522
4625
|
children: [
|
|
4523
4626
|
/* @__PURE__ */ jsxRuntime.jsx(lu.LuTrash2, { className: "h-3 w-3 mr-1" }),
|
|
4524
|
-
"
|
|
4627
|
+
t5("rte.delete_col")
|
|
4525
4628
|
]
|
|
4526
4629
|
}
|
|
4527
4630
|
)
|
|
@@ -4535,7 +4638,7 @@ var Toolbar = ({
|
|
|
4535
4638
|
onClick: handle_delete_table,
|
|
4536
4639
|
children: [
|
|
4537
4640
|
/* @__PURE__ */ jsxRuntime.jsx(lu.LuTrash2, { className: "h-3 w-3 mr-1" }),
|
|
4538
|
-
"
|
|
4641
|
+
t5("rte.delete_table")
|
|
4539
4642
|
]
|
|
4540
4643
|
}
|
|
4541
4644
|
)
|
|
@@ -4543,7 +4646,7 @@ var Toolbar = ({
|
|
|
4543
4646
|
) : (
|
|
4544
4647
|
// Table size picker when not in a table
|
|
4545
4648
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
4546
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs font-medium mb-1", children: "
|
|
4649
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs font-medium mb-1", children: t5("rte.insert_table_heading") }),
|
|
4547
4650
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-0.5", children: Array.from({ length: 6 }).map((_, row_idx) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-0.5", children: Array.from({ length: 6 }).map((_2, col_idx) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
4548
4651
|
"div",
|
|
4549
4652
|
{
|
|
@@ -4557,9 +4660,9 @@ var Toolbar = ({
|
|
|
4557
4660
|
},
|
|
4558
4661
|
col_idx
|
|
4559
4662
|
)) }, row_idx)) }),
|
|
4560
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-center text-muted-foreground", children: hovered_cell ? `${hovered_cell.col} x ${hovered_cell.row}` : "
|
|
4663
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-center text-muted-foreground", children: hovered_cell ? `${hovered_cell.col} x ${hovered_cell.row}` : t5("rte.select_size") }),
|
|
4561
4664
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t pt-2 mt-1", children: [
|
|
4562
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-muted-foreground mb-2", children: "
|
|
4665
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-muted-foreground mb-2", children: t5("rte.custom_size") }),
|
|
4563
4666
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
4564
4667
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4565
4668
|
Input,
|
|
@@ -4592,7 +4695,7 @@ var Toolbar = ({
|
|
|
4592
4695
|
onClick: () => handle_table_insert(table_rows, table_cols),
|
|
4593
4696
|
children: [
|
|
4594
4697
|
/* @__PURE__ */ jsxRuntime.jsx(lu.LuGrid3X3, { className: "h-3 w-3 mr-1" }),
|
|
4595
|
-
"
|
|
4698
|
+
t5("rte.insert_table")
|
|
4596
4699
|
]
|
|
4597
4700
|
}
|
|
4598
4701
|
)
|
|
@@ -4610,11 +4713,11 @@ var Toolbar = ({
|
|
|
4610
4713
|
if (tb.variables && variables.length > 0) {
|
|
4611
4714
|
items.push(
|
|
4612
4715
|
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { open: variables_menu_open, onOpenChange: set_variables_menu_open, children: [
|
|
4613
|
-
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { tooltip:
|
|
4716
|
+
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { tooltip: t5("rte.insert_variable"), children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuVariable, { className: "h-4 w-4" }) }) }),
|
|
4614
4717
|
/* @__PURE__ */ jsxRuntime.jsx(PopoverContent, { className: "w-64 p-0", align: "start", children: /* @__PURE__ */ jsxRuntime.jsxs(Command, { children: [
|
|
4615
|
-
/* @__PURE__ */ jsxRuntime.jsx(CommandInput, { placeholder: "
|
|
4718
|
+
/* @__PURE__ */ jsxRuntime.jsx(CommandInput, { placeholder: t5("rte.search_variables"), className: "h-8 text-xs" }),
|
|
4616
4719
|
/* @__PURE__ */ jsxRuntime.jsxs(CommandList, { children: [
|
|
4617
|
-
/* @__PURE__ */ jsxRuntime.jsx(CommandEmpty, { children: "
|
|
4720
|
+
/* @__PURE__ */ jsxRuntime.jsx(CommandEmpty, { children: t5("rte.no_variables") }),
|
|
4618
4721
|
/* @__PURE__ */ jsxRuntime.jsx(CommandGroup, { children: variables.map((variable) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
4619
4722
|
CommandItem,
|
|
4620
4723
|
{
|
|
@@ -4639,7 +4742,7 @@ var Toolbar = ({
|
|
|
4639
4742
|
ToolbarButton,
|
|
4640
4743
|
{
|
|
4641
4744
|
onClick: () => file_input_ref.current?.click(),
|
|
4642
|
-
tooltip:
|
|
4745
|
+
tooltip: t5("rte.attach_file"),
|
|
4643
4746
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuPaperclip, { className: "h-4 w-4" })
|
|
4644
4747
|
},
|
|
4645
4748
|
"attach"
|
|
@@ -4911,6 +5014,7 @@ var VariableExtension = core.Node.create({
|
|
|
4911
5014
|
};
|
|
4912
5015
|
}
|
|
4913
5016
|
});
|
|
5017
|
+
var t6 = i18n.createPackageT("hazo_ui", en_default);
|
|
4914
5018
|
function debounce_fn(func, wait) {
|
|
4915
5019
|
let timeout_id = null;
|
|
4916
5020
|
return (output) => {
|
|
@@ -4927,7 +5031,7 @@ var HazoUiRte = ({
|
|
|
4927
5031
|
attachments: initial_attachments = [],
|
|
4928
5032
|
variables = [],
|
|
4929
5033
|
on_change,
|
|
4930
|
-
placeholder
|
|
5034
|
+
placeholder,
|
|
4931
5035
|
min_height = "200px",
|
|
4932
5036
|
max_height = "400px",
|
|
4933
5037
|
disabled = false,
|
|
@@ -4936,6 +5040,7 @@ var HazoUiRte = ({
|
|
|
4936
5040
|
toolbar,
|
|
4937
5041
|
font_families
|
|
4938
5042
|
}) => {
|
|
5043
|
+
const resolved_placeholder = placeholder ?? t6("rte.placeholder");
|
|
4939
5044
|
const [attachments, set_attachments] = React27__namespace.useState(
|
|
4940
5045
|
initial_attachments
|
|
4941
5046
|
);
|
|
@@ -4985,7 +5090,7 @@ var HazoUiRte = ({
|
|
|
4985
5090
|
}
|
|
4986
5091
|
}),
|
|
4987
5092
|
Placeholder__default.default.configure({
|
|
4988
|
-
placeholder
|
|
5093
|
+
placeholder: resolved_placeholder
|
|
4989
5094
|
}),
|
|
4990
5095
|
HorizontalRule__default.default,
|
|
4991
5096
|
extensionTable.Table.configure({
|
|
@@ -5160,7 +5265,7 @@ var HazoUiRte = ({
|
|
|
5160
5265
|
);
|
|
5161
5266
|
};
|
|
5162
5267
|
HazoUiRte.displayName = "HazoUiRte";
|
|
5163
|
-
var
|
|
5268
|
+
var t7 = i18n.createPackageT("hazo_ui", en_default);
|
|
5164
5269
|
function CanvasTextToolbar({
|
|
5165
5270
|
bold,
|
|
5166
5271
|
italic,
|
|
@@ -5191,14 +5296,14 @@ function CanvasTextToolbar({
|
|
|
5191
5296
|
),
|
|
5192
5297
|
style,
|
|
5193
5298
|
children: [
|
|
5194
|
-
/* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { is_active: bold, onClick: onBold, tooltip:
|
|
5195
|
-
/* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { is_active: italic, onClick: onItalic, tooltip:
|
|
5299
|
+
/* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { is_active: bold, onClick: onBold, tooltip: t7("canvas_toolbar.bold"), children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuBold, { className: "h-4 w-4" }) }),
|
|
5300
|
+
/* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { is_active: italic, onClick: onItalic, tooltip: t7("canvas_toolbar.italic"), children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuItalic, { className: "h-4 w-4" }) }),
|
|
5196
5301
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5197
5302
|
ToolbarButton,
|
|
5198
5303
|
{
|
|
5199
5304
|
is_active: underline,
|
|
5200
5305
|
onClick: onUnderline,
|
|
5201
|
-
tooltip:
|
|
5306
|
+
tooltip: t7("canvas_toolbar.underline"),
|
|
5202
5307
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuUnderline, { className: "h-4 w-4" })
|
|
5203
5308
|
}
|
|
5204
5309
|
),
|
|
@@ -5208,7 +5313,7 @@ function CanvasTextToolbar({
|
|
|
5208
5313
|
{
|
|
5209
5314
|
is_active: align === "left",
|
|
5210
5315
|
onClick: () => onAlign?.("left"),
|
|
5211
|
-
tooltip:
|
|
5316
|
+
tooltip: t7("canvas_toolbar.align_left"),
|
|
5212
5317
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuAlignLeft, { className: "h-4 w-4" })
|
|
5213
5318
|
}
|
|
5214
5319
|
),
|
|
@@ -5217,7 +5322,7 @@ function CanvasTextToolbar({
|
|
|
5217
5322
|
{
|
|
5218
5323
|
is_active: align === "center",
|
|
5219
5324
|
onClick: () => onAlign?.("center"),
|
|
5220
|
-
tooltip:
|
|
5325
|
+
tooltip: t7("canvas_toolbar.align_center"),
|
|
5221
5326
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuAlignCenter, { className: "h-4 w-4" })
|
|
5222
5327
|
}
|
|
5223
5328
|
),
|
|
@@ -5226,7 +5331,7 @@ function CanvasTextToolbar({
|
|
|
5226
5331
|
{
|
|
5227
5332
|
is_active: align === "right",
|
|
5228
5333
|
onClick: () => onAlign?.("right"),
|
|
5229
|
-
tooltip:
|
|
5334
|
+
tooltip: t7("canvas_toolbar.align_right"),
|
|
5230
5335
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuAlignRight, { className: "h-4 w-4" })
|
|
5231
5336
|
}
|
|
5232
5337
|
),
|
|
@@ -5235,7 +5340,7 @@ function CanvasTextToolbar({
|
|
|
5235
5340
|
"label",
|
|
5236
5341
|
{
|
|
5237
5342
|
className: "relative flex h-8 w-8 cursor-pointer items-center justify-center rounded-md hover:bg-accent",
|
|
5238
|
-
title:
|
|
5343
|
+
title: t7("canvas_toolbar.text_color"),
|
|
5239
5344
|
children: [
|
|
5240
5345
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center", children: [
|
|
5241
5346
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-bold text-muted-foreground", children: "A" }),
|
|
@@ -5265,7 +5370,7 @@ function CanvasTextToolbar({
|
|
|
5265
5370
|
{
|
|
5266
5371
|
is_active: verticalAlign === "top",
|
|
5267
5372
|
onClick: () => onVerticalAlign?.("top"),
|
|
5268
|
-
tooltip:
|
|
5373
|
+
tooltip: t7("canvas_toolbar.align_top"),
|
|
5269
5374
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuAlignVerticalJustifyStart, { className: "h-4 w-4" })
|
|
5270
5375
|
}
|
|
5271
5376
|
),
|
|
@@ -5274,7 +5379,7 @@ function CanvasTextToolbar({
|
|
|
5274
5379
|
{
|
|
5275
5380
|
is_active: verticalAlign === "middle",
|
|
5276
5381
|
onClick: () => onVerticalAlign?.("middle"),
|
|
5277
|
-
tooltip:
|
|
5382
|
+
tooltip: t7("canvas_toolbar.align_middle"),
|
|
5278
5383
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuAlignVerticalJustifyCenter, { className: "h-4 w-4" })
|
|
5279
5384
|
}
|
|
5280
5385
|
),
|
|
@@ -5283,7 +5388,7 @@ function CanvasTextToolbar({
|
|
|
5283
5388
|
{
|
|
5284
5389
|
is_active: verticalAlign === "bottom",
|
|
5285
5390
|
onClick: () => onVerticalAlign?.("bottom"),
|
|
5286
|
-
tooltip:
|
|
5391
|
+
tooltip: t7("canvas_toolbar.align_bottom"),
|
|
5287
5392
|
children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuAlignVerticalJustifyEnd, { className: "h-4 w-4" })
|
|
5288
5393
|
}
|
|
5289
5394
|
),
|
|
@@ -5294,7 +5399,7 @@ function CanvasTextToolbar({
|
|
|
5294
5399
|
value: font,
|
|
5295
5400
|
onChange: (e) => onFont?.(e.target.value),
|
|
5296
5401
|
className: "h-8 text-xs rounded-md border border-border bg-background px-1 text-foreground focus:outline-none",
|
|
5297
|
-
title:
|
|
5402
|
+
title: t7("canvas_toolbar.font_family"),
|
|
5298
5403
|
children: [
|
|
5299
5404
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "sans-serif", children: "Sans" }),
|
|
5300
5405
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "serif", children: "Serif" }),
|
|
@@ -5306,18 +5411,19 @@ function CanvasTextToolbar({
|
|
|
5306
5411
|
}
|
|
5307
5412
|
),
|
|
5308
5413
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-1 h-6 w-px bg-border" }),
|
|
5309
|
-
/* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { is_active: bullet, onClick: onBullet, tooltip:
|
|
5414
|
+
/* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { is_active: bullet, onClick: onBullet, tooltip: t7("canvas_toolbar.bullet_list"), children: /* @__PURE__ */ jsxRuntime.jsx(lu.LuList, { className: "h-4 w-4" }) })
|
|
5310
5415
|
]
|
|
5311
5416
|
}
|
|
5312
5417
|
) });
|
|
5313
5418
|
}
|
|
5419
|
+
var t8 = i18n.createPackageT("hazo_ui", en_default);
|
|
5314
5420
|
var MdEditorLazy = React27.lazy(() => import('@uiw/react-md-editor'));
|
|
5315
5421
|
var EDITOR_TEXTAREA_SELECTOR = ".w-md-editor-text-input";
|
|
5316
5422
|
function MarkdownEditor({
|
|
5317
5423
|
value,
|
|
5318
5424
|
onChange,
|
|
5319
5425
|
height = 600,
|
|
5320
|
-
placeholder
|
|
5426
|
+
placeholder,
|
|
5321
5427
|
className,
|
|
5322
5428
|
colorMode = "light",
|
|
5323
5429
|
preview = "edit",
|
|
@@ -5400,13 +5506,13 @@ function MarkdownEditor({
|
|
|
5400
5506
|
try {
|
|
5401
5507
|
const url = await onImageUpload(file);
|
|
5402
5508
|
if (!url) {
|
|
5403
|
-
setError("
|
|
5509
|
+
setError(t8("markdown.upload_failed"));
|
|
5404
5510
|
onChange(before + after);
|
|
5405
5511
|
return;
|
|
5406
5512
|
}
|
|
5407
5513
|
onChange(before + `` + after);
|
|
5408
5514
|
} catch {
|
|
5409
|
-
setError("
|
|
5515
|
+
setError(t8("markdown.upload_failed"));
|
|
5410
5516
|
onChange(before + after);
|
|
5411
5517
|
} finally {
|
|
5412
5518
|
setUploading(false);
|
|
@@ -5430,7 +5536,7 @@ function MarkdownEditor({
|
|
|
5430
5536
|
{
|
|
5431
5537
|
className: "flex items-center justify-center rounded-md border border-border bg-muted/30 text-sm text-muted-foreground",
|
|
5432
5538
|
style: { height },
|
|
5433
|
-
children: "
|
|
5539
|
+
children: t8("markdown.loading_editor")
|
|
5434
5540
|
}
|
|
5435
5541
|
),
|
|
5436
5542
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -5442,7 +5548,7 @@ function MarkdownEditor({
|
|
|
5442
5548
|
preview: effectivePreview,
|
|
5443
5549
|
visibleDragbar: false,
|
|
5444
5550
|
commands: editorCommands,
|
|
5445
|
-
textareaProps: { placeholder, onPaste: handlePaste }
|
|
5551
|
+
textareaProps: { placeholder: placeholder ?? t8("markdown.placeholder"), onPaste: handlePaste }
|
|
5446
5552
|
}
|
|
5447
5553
|
)
|
|
5448
5554
|
}
|
|
@@ -5451,7 +5557,7 @@ function MarkdownEditor({
|
|
|
5451
5557
|
{
|
|
5452
5558
|
className: "flex items-center justify-center rounded-md border border-border bg-muted/30 text-sm text-muted-foreground",
|
|
5453
5559
|
style: { height },
|
|
5454
|
-
children: "
|
|
5560
|
+
children: t8("markdown.loading_editor")
|
|
5455
5561
|
}
|
|
5456
5562
|
) }),
|
|
5457
5563
|
useCustomPreview && showPreview && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -5465,7 +5571,7 @@ function MarkdownEditor({
|
|
|
5465
5571
|
]
|
|
5466
5572
|
}
|
|
5467
5573
|
),
|
|
5468
|
-
uploading && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-xs text-muted-foreground", children: "
|
|
5574
|
+
uploading && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-xs text-muted-foreground", children: t8("markdown.uploading_image") }),
|
|
5469
5575
|
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-xs text-destructive", children: error })
|
|
5470
5576
|
] });
|
|
5471
5577
|
}
|
|
@@ -6164,6 +6270,7 @@ var Text = core.Node.create({
|
|
|
6164
6270
|
renderMarkdown: (node) => node.text || ""
|
|
6165
6271
|
});
|
|
6166
6272
|
var index_default3 = Text;
|
|
6273
|
+
var t9 = i18n.createPackageT("hazo_ui", en_default);
|
|
6167
6274
|
var SingleLineDocument = index_default.extend({
|
|
6168
6275
|
content: "paragraph"
|
|
6169
6276
|
});
|
|
@@ -6201,7 +6308,7 @@ var HazoUiTextbox = ({
|
|
|
6201
6308
|
value,
|
|
6202
6309
|
default_value,
|
|
6203
6310
|
prefixes,
|
|
6204
|
-
placeholder
|
|
6311
|
+
placeholder,
|
|
6205
6312
|
disabled = false,
|
|
6206
6313
|
className,
|
|
6207
6314
|
pill_variant = "default",
|
|
@@ -6212,6 +6319,7 @@ var HazoUiTextbox = ({
|
|
|
6212
6319
|
on_command_change,
|
|
6213
6320
|
on_command_remove
|
|
6214
6321
|
}) => {
|
|
6322
|
+
const resolved_placeholder = placeholder ?? t9("textbox.placeholder");
|
|
6215
6323
|
const generated_instance_id = React27__namespace.useId();
|
|
6216
6324
|
const instance_id = provided_instance_id || generated_instance_id;
|
|
6217
6325
|
const [suggestion_state, set_suggestion_state] = React27__namespace.useState(null);
|
|
@@ -6244,7 +6352,7 @@ var HazoUiTextbox = ({
|
|
|
6244
6352
|
index_default2,
|
|
6245
6353
|
index_default3,
|
|
6246
6354
|
Placeholder__default.default.configure({
|
|
6247
|
-
placeholder
|
|
6355
|
+
placeholder: resolved_placeholder
|
|
6248
6356
|
}),
|
|
6249
6357
|
CommandNodeExtension.configure({}),
|
|
6250
6358
|
...suggestion_extensions
|
|
@@ -6623,7 +6731,7 @@ var HazoUiTextbox = ({
|
|
|
6623
6731
|
edit_selected_index === edit_commands.length && "bg-destructive/10"
|
|
6624
6732
|
),
|
|
6625
6733
|
onClick: handle_command_remove,
|
|
6626
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: "
|
|
6734
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: t9("common.remove") })
|
|
6627
6735
|
}
|
|
6628
6736
|
)
|
|
6629
6737
|
] })
|
|
@@ -6701,6 +6809,7 @@ var HardBreak = core.Node.create({
|
|
|
6701
6809
|
}
|
|
6702
6810
|
});
|
|
6703
6811
|
var index_default4 = HardBreak;
|
|
6812
|
+
var t10 = i18n.createPackageT("hazo_ui", en_default);
|
|
6704
6813
|
var get_editor_output2 = (editor) => {
|
|
6705
6814
|
if (!editor) {
|
|
6706
6815
|
return { plain_text: "", display_text: "", commands: [] };
|
|
@@ -6755,7 +6864,7 @@ var HazoUiTextarea = ({
|
|
|
6755
6864
|
value,
|
|
6756
6865
|
default_value,
|
|
6757
6866
|
prefixes,
|
|
6758
|
-
placeholder
|
|
6867
|
+
placeholder,
|
|
6759
6868
|
disabled = false,
|
|
6760
6869
|
className,
|
|
6761
6870
|
pill_variant = "default",
|
|
@@ -6769,6 +6878,7 @@ var HazoUiTextarea = ({
|
|
|
6769
6878
|
on_command_change,
|
|
6770
6879
|
on_command_remove
|
|
6771
6880
|
}) => {
|
|
6881
|
+
const resolved_placeholder = placeholder ?? t10("textarea.placeholder");
|
|
6772
6882
|
const generated_instance_id = React27__namespace.useId();
|
|
6773
6883
|
const instance_id = provided_instance_id || generated_instance_id;
|
|
6774
6884
|
const [suggestion_state, set_suggestion_state] = React27__namespace.useState(null);
|
|
@@ -6803,7 +6913,7 @@ var HazoUiTextarea = ({
|
|
|
6803
6913
|
index_default3,
|
|
6804
6914
|
index_default4,
|
|
6805
6915
|
Placeholder__default.default.configure({
|
|
6806
|
-
placeholder
|
|
6916
|
+
placeholder: resolved_placeholder
|
|
6807
6917
|
}),
|
|
6808
6918
|
CommandNodeExtension.configure({}),
|
|
6809
6919
|
...suggestion_extensions
|
|
@@ -7193,7 +7303,7 @@ var HazoUiTextarea = ({
|
|
|
7193
7303
|
backgroundColor: edit_selected_index === edit_commands.length ? "rgba(239, 68, 68, 0.1)" : "inherit"
|
|
7194
7304
|
},
|
|
7195
7305
|
onClick: handle_command_remove,
|
|
7196
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: "
|
|
7306
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: t10("common.remove") })
|
|
7197
7307
|
}
|
|
7198
7308
|
)
|
|
7199
7309
|
] })
|
|
@@ -7253,6 +7363,7 @@ function resolve_animation_classes(open_anim = "zoom", close_anim = "zoom") {
|
|
|
7253
7363
|
const close_classes = close_anim in ANIMATION_PRESETS ? ANIMATION_PRESETS[close_anim].close : close_anim;
|
|
7254
7364
|
return `${open_classes} ${close_classes}`;
|
|
7255
7365
|
}
|
|
7366
|
+
var t11 = i18n.createPackageT("hazo_ui", en_default);
|
|
7256
7367
|
var VARIANT_PRESETS = {
|
|
7257
7368
|
info: {
|
|
7258
7369
|
header_background_color: "var(--dialog-info-bg)",
|
|
@@ -7302,11 +7413,11 @@ function HazoUiDialog({
|
|
|
7302
7413
|
children,
|
|
7303
7414
|
onConfirm,
|
|
7304
7415
|
onCancel,
|
|
7305
|
-
title
|
|
7416
|
+
title,
|
|
7306
7417
|
description,
|
|
7307
7418
|
actionButtonText: actionButtonTextProp,
|
|
7308
7419
|
actionButtonVariant,
|
|
7309
|
-
cancelButtonText
|
|
7420
|
+
cancelButtonText,
|
|
7310
7421
|
showCancelButton: showCancelButtonProp,
|
|
7311
7422
|
showActionButton = true,
|
|
7312
7423
|
closeOnConfirm: closeOnConfirmProp,
|
|
@@ -7346,9 +7457,11 @@ function HazoUiDialog({
|
|
|
7346
7457
|
const cancel_ref = React27__namespace.useRef(null);
|
|
7347
7458
|
const variant_preset = variant !== "default" ? VARIANT_PRESETS[variant] : is_status_kind || is_confirm_kind ? NEUTRAL_VARIANT_PRESET : void 0;
|
|
7348
7459
|
const resolved_action_button_variant = actionButtonVariant ?? variant_preset?.action_button_variant ?? "default";
|
|
7460
|
+
const resolved_title = title ?? t11("dialog.default_title");
|
|
7461
|
+
const resolved_cancel_text = cancelButtonText ?? t11("dialog.cancel");
|
|
7349
7462
|
const showCancelButton = showCancelButtonProp ?? (is_status_kind ? false : true);
|
|
7350
7463
|
const closeOnConfirm = closeOnConfirmProp ?? (is_status_kind || is_confirm_kind ? true : false);
|
|
7351
|
-
const actionButtonText = actionButtonTextProp ?? (is_status_kind ? "
|
|
7464
|
+
const actionButtonText = actionButtonTextProp ?? (is_status_kind ? t11("dialog.ok") : is_confirm_kind ? showCancelButton ? t11("dialog.confirm") : t11("dialog.ok") : t11("dialog.confirm"));
|
|
7352
7465
|
const actionButtonLoading = actionButtonLoadingProp ?? (is_confirm_kind ? internal_confirm_loading : false);
|
|
7353
7466
|
const handleConfirm = () => {
|
|
7354
7467
|
if (is_confirm_kind) {
|
|
@@ -7483,7 +7596,7 @@ function HazoUiDialog({
|
|
|
7483
7596
|
},
|
|
7484
7597
|
children: [
|
|
7485
7598
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cls_confirm_dialog_body px-6 pt-7 pb-5", children: [
|
|
7486
|
-
/* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Title, { className: "cls_confirm_dialog_title text-[17px] font-semibold text-foreground mb-2.5", children:
|
|
7599
|
+
/* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Title, { className: "cls_confirm_dialog_title text-[17px] font-semibold text-foreground mb-2.5", children: resolved_title }),
|
|
7487
7600
|
children ? /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Description, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_confirm_dialog_children text-sm text-muted-foreground leading-relaxed", children }) }) : description ? /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Description, { className: "cls_confirm_dialog_description text-sm text-muted-foreground leading-relaxed", children: description }) : null
|
|
7488
7601
|
] }),
|
|
7489
7602
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_confirm_dialog_separator border-t border-border" }),
|
|
@@ -7498,7 +7611,7 @@ function HazoUiDialog({
|
|
|
7498
7611
|
onClick: handleCancel,
|
|
7499
7612
|
disabled: actionButtonLoading,
|
|
7500
7613
|
style: cancelButtonStyles,
|
|
7501
|
-
children:
|
|
7614
|
+
children: resolved_cancel_text
|
|
7502
7615
|
}
|
|
7503
7616
|
),
|
|
7504
7617
|
showActionButton && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -7564,7 +7677,7 @@ function HazoUiDialog({
|
|
|
7564
7677
|
...finalHeaderBackgroundColor && { backgroundColor: finalHeaderBackgroundColor },
|
|
7565
7678
|
...finalHeaderTextColor && { color: finalHeaderTextColor }
|
|
7566
7679
|
},
|
|
7567
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { className: titleClassName, children:
|
|
7680
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { className: titleClassName, children: resolved_title })
|
|
7568
7681
|
}
|
|
7569
7682
|
),
|
|
7570
7683
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -7595,7 +7708,7 @@ function HazoUiDialog({
|
|
|
7595
7708
|
),
|
|
7596
7709
|
style: headerStyles,
|
|
7597
7710
|
children: [
|
|
7598
|
-
/* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { className: titleClassName, children:
|
|
7711
|
+
/* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { className: titleClassName, children: resolved_title }),
|
|
7599
7712
|
description && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7600
7713
|
DialogDescription,
|
|
7601
7714
|
{
|
|
@@ -7646,7 +7759,7 @@ function HazoUiDialog({
|
|
|
7646
7759
|
variant: "outline",
|
|
7647
7760
|
onClick: handleCancel,
|
|
7648
7761
|
style: cancelButtonStyles,
|
|
7649
|
-
children:
|
|
7762
|
+
children: resolved_cancel_text
|
|
7650
7763
|
}
|
|
7651
7764
|
),
|
|
7652
7765
|
showActionButton && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -7675,7 +7788,7 @@ function HazoUiDialog({
|
|
|
7675
7788
|
style: headerBar ? { color: "var(--dialog-header-bar-fg)" } : finalHeaderTextColor ? { color: finalHeaderTextColor } : void 0,
|
|
7676
7789
|
children: [
|
|
7677
7790
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4" }),
|
|
7678
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "
|
|
7791
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: t11("dialog.close") })
|
|
7679
7792
|
]
|
|
7680
7793
|
}
|
|
7681
7794
|
)
|
|
@@ -7684,7 +7797,7 @@ function HazoUiDialog({
|
|
|
7684
7797
|
)
|
|
7685
7798
|
] }) });
|
|
7686
7799
|
}
|
|
7687
|
-
var
|
|
7800
|
+
var t12 = i18n.createPackageT("hazo_ui", en_default);
|
|
7688
7801
|
function HazoUiConfirmDialog({
|
|
7689
7802
|
open,
|
|
7690
7803
|
onOpenChange,
|
|
@@ -7693,7 +7806,7 @@ function HazoUiConfirmDialog({
|
|
|
7693
7806
|
children,
|
|
7694
7807
|
variant = "default",
|
|
7695
7808
|
confirmLabel,
|
|
7696
|
-
cancelLabel =
|
|
7809
|
+
cancelLabel = t12("confirm.cancel"),
|
|
7697
7810
|
showCancelButton = true,
|
|
7698
7811
|
onConfirm,
|
|
7699
7812
|
onCancel,
|
|
@@ -7742,6 +7855,7 @@ var Slider = React27__namespace.forwardRef(({ className, ...props }, ref) => /*
|
|
|
7742
7855
|
}
|
|
7743
7856
|
));
|
|
7744
7857
|
Slider.displayName = SliderPrimitive__namespace.Root.displayName;
|
|
7858
|
+
var t13 = i18n.createPackageT("hazo_ui", en_default);
|
|
7745
7859
|
async function getCroppedImg(imageSrc, areaPixels, outputSize, quality) {
|
|
7746
7860
|
const img = await new Promise((resolve, reject) => {
|
|
7747
7861
|
const image = new Image();
|
|
@@ -7787,7 +7901,7 @@ var HazoUiImageCropper = React27__namespace.forwardRef(function HazoUiImageCropp
|
|
|
7787
7901
|
onCropped,
|
|
7788
7902
|
outputSize = 512,
|
|
7789
7903
|
quality = 0.9,
|
|
7790
|
-
zoomLabel
|
|
7904
|
+
zoomLabel,
|
|
7791
7905
|
className
|
|
7792
7906
|
}, ref) {
|
|
7793
7907
|
const [crop, set_crop] = React27__namespace.useState({
|
|
@@ -7795,6 +7909,7 @@ var HazoUiImageCropper = React27__namespace.forwardRef(function HazoUiImageCropp
|
|
|
7795
7909
|
y: 0
|
|
7796
7910
|
});
|
|
7797
7911
|
const [zoom, set_zoom] = React27__namespace.useState(1);
|
|
7912
|
+
const resolved_zoom_label = zoomLabel ?? t13("cropper.zoom");
|
|
7798
7913
|
const cropped_area_pixels_ref = React27__namespace.useRef(null);
|
|
7799
7914
|
const handle_crop_complete = React27__namespace.useCallback(
|
|
7800
7915
|
(_croppedArea, croppedAreaPixels) => {
|
|
@@ -7851,7 +7966,7 @@ var HazoUiImageCropper = React27__namespace.forwardRef(function HazoUiImageCropp
|
|
|
7851
7966
|
{
|
|
7852
7967
|
className: "cls_zoom_label text-sm font-medium text-foreground",
|
|
7853
7968
|
id: "hazo-cropper-zoom-label",
|
|
7854
|
-
children:
|
|
7969
|
+
children: resolved_zoom_label
|
|
7855
7970
|
}
|
|
7856
7971
|
),
|
|
7857
7972
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -7869,19 +7984,24 @@ var HazoUiImageCropper = React27__namespace.forwardRef(function HazoUiImageCropp
|
|
|
7869
7984
|
] });
|
|
7870
7985
|
});
|
|
7871
7986
|
HazoUiImageCropper.displayName = "HazoUiImageCropper";
|
|
7987
|
+
var t14 = i18n.createPackageT("hazo_ui", en_default);
|
|
7872
7988
|
function HazoUiImageCropperDialog({
|
|
7873
7989
|
open,
|
|
7874
7990
|
onOpenChange,
|
|
7875
7991
|
file,
|
|
7876
7992
|
onConfirm,
|
|
7877
7993
|
onCancel,
|
|
7878
|
-
title
|
|
7879
|
-
confirmLabel
|
|
7880
|
-
cancelLabel
|
|
7881
|
-
zoomLabel
|
|
7994
|
+
title,
|
|
7995
|
+
confirmLabel,
|
|
7996
|
+
cancelLabel,
|
|
7997
|
+
zoomLabel,
|
|
7882
7998
|
outputSize = 512,
|
|
7883
7999
|
quality = 0.9
|
|
7884
8000
|
}) {
|
|
8001
|
+
const resolved_title = title ?? t14("cropper.title");
|
|
8002
|
+
const resolved_confirm_label = confirmLabel ?? t14("cropper.save");
|
|
8003
|
+
const resolved_cancel_label = cancelLabel ?? t14("cropper.cancel");
|
|
8004
|
+
const resolved_zoom_label = zoomLabel ?? t14("cropper.zoom");
|
|
7885
8005
|
const cropper_ref = React27__namespace.useRef(null);
|
|
7886
8006
|
const [image_src, set_image_src] = React27__namespace.useState(null);
|
|
7887
8007
|
const [is_confirming, set_is_confirming] = React27__namespace.useState(false);
|
|
@@ -7912,9 +8032,9 @@ function HazoUiImageCropperDialog({
|
|
|
7912
8032
|
{
|
|
7913
8033
|
open,
|
|
7914
8034
|
onOpenChange,
|
|
7915
|
-
title,
|
|
7916
|
-
actionButtonText:
|
|
7917
|
-
cancelButtonText:
|
|
8035
|
+
title: resolved_title,
|
|
8036
|
+
actionButtonText: resolved_confirm_label,
|
|
8037
|
+
cancelButtonText: resolved_cancel_label,
|
|
7918
8038
|
onConfirm: handle_confirm,
|
|
7919
8039
|
onCancel,
|
|
7920
8040
|
actionButtonLoading: is_confirming,
|
|
@@ -7927,7 +8047,7 @@ function HazoUiImageCropperDialog({
|
|
|
7927
8047
|
imageSrc: image_src,
|
|
7928
8048
|
outputSize,
|
|
7929
8049
|
quality,
|
|
7930
|
-
zoomLabel
|
|
8050
|
+
zoomLabel: resolved_zoom_label
|
|
7931
8051
|
}
|
|
7932
8052
|
)
|
|
7933
8053
|
}
|
|
@@ -8367,6 +8487,7 @@ var CardFooter = React27__namespace.forwardRef(
|
|
|
8367
8487
|
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("flex items-center p-6 pt-0", className), ...props })
|
|
8368
8488
|
);
|
|
8369
8489
|
CardFooter.displayName = "CardFooter";
|
|
8490
|
+
var t15 = i18n.createPackageT("hazo_ui", en_default);
|
|
8370
8491
|
function Spinner({ className, size = "md" }) {
|
|
8371
8492
|
const sizeClasses = { sm: "h-4 w-4", md: "h-8 w-8", lg: "h-12 w-12" };
|
|
8372
8493
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -8374,8 +8495,8 @@ function Spinner({ className, size = "md" }) {
|
|
|
8374
8495
|
{
|
|
8375
8496
|
className: cn("animate-spin rounded-full border-2 border-current border-t-transparent text-primary", sizeClasses[size], className),
|
|
8376
8497
|
role: "status",
|
|
8377
|
-
"aria-label": "
|
|
8378
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "
|
|
8498
|
+
"aria-label": t15("spinner.loading"),
|
|
8499
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: t15("spinner.loading_text") })
|
|
8379
8500
|
}
|
|
8380
8501
|
);
|
|
8381
8502
|
}
|
|
@@ -8511,6 +8632,7 @@ var InputAffix = React27__namespace.forwardRef(
|
|
|
8511
8632
|
}
|
|
8512
8633
|
);
|
|
8513
8634
|
InputAffix.displayName = "InputAffix";
|
|
8635
|
+
var t16 = i18n.createPackageT("hazo_ui", en_default);
|
|
8514
8636
|
var SkeletonBase = React27__namespace.forwardRef(
|
|
8515
8637
|
({ className, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
8516
8638
|
"div",
|
|
@@ -8552,18 +8674,19 @@ function SkeletonRect({ width = "100%", height = 96, radius = 6, className }) {
|
|
|
8552
8674
|
}
|
|
8553
8675
|
);
|
|
8554
8676
|
}
|
|
8555
|
-
function SkeletonGroup({ label
|
|
8677
|
+
function SkeletonGroup({ label, children, className, ...rest }) {
|
|
8678
|
+
const resolved_label = label ?? t16("skeleton.loading_content");
|
|
8556
8679
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8557
8680
|
"div",
|
|
8558
8681
|
{
|
|
8559
8682
|
role: "status",
|
|
8560
8683
|
"aria-busy": "true",
|
|
8561
|
-
"aria-label":
|
|
8684
|
+
"aria-label": resolved_label,
|
|
8562
8685
|
className: cn("space-y-2", className),
|
|
8563
8686
|
...rest,
|
|
8564
8687
|
children: [
|
|
8565
8688
|
children,
|
|
8566
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children:
|
|
8689
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: resolved_label })
|
|
8567
8690
|
]
|
|
8568
8691
|
}
|
|
8569
8692
|
);
|
|
@@ -8598,7 +8721,7 @@ function EmptyState({
|
|
|
8598
8721
|
}
|
|
8599
8722
|
);
|
|
8600
8723
|
}
|
|
8601
|
-
var
|
|
8724
|
+
var t17 = i18n.createPackageT("hazo_ui", en_default);
|
|
8602
8725
|
function ErrorBanner({
|
|
8603
8726
|
severity = "error",
|
|
8604
8727
|
title,
|
|
@@ -8633,7 +8756,7 @@ function ErrorBanner({
|
|
|
8633
8756
|
{
|
|
8634
8757
|
type: "button",
|
|
8635
8758
|
onClick: onDismiss,
|
|
8636
|
-
"aria-label":
|
|
8759
|
+
"aria-label": t17("error.dismiss"),
|
|
8637
8760
|
className: "flex-shrink-0 rounded p-1 hover:bg-black/5 focus:outline-none focus:ring-2 focus:ring-offset-2 dark:hover:bg-white/5",
|
|
8638
8761
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4", "aria-hidden": "true" })
|
|
8639
8762
|
}
|
|
@@ -8642,9 +8765,9 @@ function ErrorBanner({
|
|
|
8642
8765
|
}
|
|
8643
8766
|
);
|
|
8644
8767
|
}
|
|
8645
|
-
var
|
|
8768
|
+
var t18 = i18n.createPackageT("hazo_ui", en_default);
|
|
8646
8769
|
function ErrorPage({
|
|
8647
|
-
title
|
|
8770
|
+
title,
|
|
8648
8771
|
description,
|
|
8649
8772
|
errorCode,
|
|
8650
8773
|
correlationId,
|
|
@@ -8652,6 +8775,7 @@ function ErrorPage({
|
|
|
8652
8775
|
illustration,
|
|
8653
8776
|
className
|
|
8654
8777
|
}) {
|
|
8778
|
+
const resolved_title = title ?? t18("error.something_went_wrong");
|
|
8655
8779
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8656
8780
|
"div",
|
|
8657
8781
|
{
|
|
@@ -8664,10 +8788,10 @@ function ErrorPage({
|
|
|
8664
8788
|
children: [
|
|
8665
8789
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-destructive", children: illustration ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.OctagonAlert, { className: "h-16 w-16", "aria-hidden": "true" }) }),
|
|
8666
8790
|
errorCode ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-full bg-muted px-3 py-1 text-xs font-mono uppercase tracking-wider text-muted-foreground", children: errorCode }) : null,
|
|
8667
|
-
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-2xl font-semibold text-foreground", children:
|
|
8791
|
+
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-2xl font-semibold text-foreground", children: resolved_title }),
|
|
8668
8792
|
description ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", children: description }) : null,
|
|
8669
8793
|
correlationId ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full rounded-md border bg-muted/40 px-3 py-2 text-left", children: [
|
|
8670
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[10px] uppercase tracking-wider text-muted-foreground", children: "
|
|
8794
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[10px] uppercase tracking-wider text-muted-foreground", children: t18("error.correlation_id") }),
|
|
8671
8795
|
/* @__PURE__ */ jsxRuntime.jsx("code", { className: "break-all text-xs", children: correlationId })
|
|
8672
8796
|
] }) : null,
|
|
8673
8797
|
actions ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex flex-wrap items-center justify-center gap-2", children: actions }) : null
|
|
@@ -8675,16 +8799,17 @@ function ErrorPage({
|
|
|
8675
8799
|
}
|
|
8676
8800
|
);
|
|
8677
8801
|
}
|
|
8678
|
-
var
|
|
8802
|
+
var t19 = i18n.createPackageT("hazo_ui", en_default);
|
|
8679
8803
|
function LoadingTimeout({
|
|
8680
8804
|
active,
|
|
8681
8805
|
children,
|
|
8682
8806
|
skeleton,
|
|
8683
8807
|
onRetry,
|
|
8684
8808
|
thresholds,
|
|
8685
|
-
label
|
|
8809
|
+
label,
|
|
8686
8810
|
className
|
|
8687
8811
|
}) {
|
|
8812
|
+
const resolved_label = label ?? t19("loading.default_label");
|
|
8688
8813
|
const timeouts = {
|
|
8689
8814
|
gentle: thresholds?.gentle ?? 5e3,
|
|
8690
8815
|
firm: thresholds?.firm ?? 15e3,
|
|
@@ -8714,15 +8839,15 @@ function LoadingTimeout({
|
|
|
8714
8839
|
ErrorBanner,
|
|
8715
8840
|
{
|
|
8716
8841
|
severity: "error",
|
|
8717
|
-
title:
|
|
8718
|
-
message:
|
|
8842
|
+
title: t19("loading.taking_longer"),
|
|
8843
|
+
message: t19("loading.still_loading", { label: resolved_label }),
|
|
8719
8844
|
action: onRetry ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
8720
8845
|
"button",
|
|
8721
8846
|
{
|
|
8722
8847
|
type: "button",
|
|
8723
8848
|
onClick: onRetry,
|
|
8724
8849
|
className: "rounded bg-foreground/10 px-3 py-1.5 text-sm font-medium hover:bg-foreground/15",
|
|
8725
|
-
children: "
|
|
8850
|
+
children: t19("loading.try_again")
|
|
8726
8851
|
}
|
|
8727
8852
|
) : null
|
|
8728
8853
|
}
|
|
@@ -8730,12 +8855,8 @@ function LoadingTimeout({
|
|
|
8730
8855
|
}
|
|
8731
8856
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, role: "status", "aria-busy": "true", "aria-live": "polite", children: [
|
|
8732
8857
|
skeleton,
|
|
8733
|
-
phase === "gentle" ? /* @__PURE__ */ jsxRuntime.
|
|
8734
|
-
|
|
8735
|
-
label,
|
|
8736
|
-
"\u2026"
|
|
8737
|
-
] }) : null,
|
|
8738
|
-
phase === "firm" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 text-center text-sm text-muted-foreground", children: "Still working on it \u2014 almost there." }) : null
|
|
8858
|
+
phase === "gentle" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 text-center text-sm text-muted-foreground", children: t19("loading.gentle_message", { label: resolved_label }) }) : null,
|
|
8859
|
+
phase === "firm" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 text-center text-sm text-muted-foreground", children: t19("loading.firm_message") }) : null
|
|
8739
8860
|
] });
|
|
8740
8861
|
}
|
|
8741
8862
|
function ProgressiveImage({
|
|
@@ -8816,7 +8937,7 @@ function NotificationCountBadge({
|
|
|
8816
8937
|
}
|
|
8817
8938
|
);
|
|
8818
8939
|
}
|
|
8819
|
-
var
|
|
8940
|
+
var t20 = i18n.createPackageT("hazo_ui", en_default);
|
|
8820
8941
|
function NotificationItem({
|
|
8821
8942
|
isRead,
|
|
8822
8943
|
timestamp,
|
|
@@ -8847,7 +8968,7 @@ function NotificationItem({
|
|
|
8847
8968
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_notification_item_dot_col flex-shrink-0 pt-1.5", children: !isRead ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
8848
8969
|
"span",
|
|
8849
8970
|
{
|
|
8850
|
-
"aria-label":
|
|
8971
|
+
"aria-label": t20("notification.unread"),
|
|
8851
8972
|
className: "cls_notification_item_dot block w-2 h-2 rounded-full bg-primary"
|
|
8852
8973
|
}
|
|
8853
8974
|
) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block w-2 h-2", "aria-hidden": "true" }) }),
|
|
@@ -8871,13 +8992,13 @@ function NotificationItem({
|
|
|
8871
8992
|
}
|
|
8872
8993
|
);
|
|
8873
8994
|
}
|
|
8874
|
-
var
|
|
8995
|
+
var t21 = i18n.createPackageT("hazo_ui", en_default);
|
|
8875
8996
|
function LoadingSkeletons() {
|
|
8876
8997
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
8877
8998
|
"div",
|
|
8878
8999
|
{
|
|
8879
9000
|
"aria-busy": "true",
|
|
8880
|
-
"aria-label":
|
|
9001
|
+
"aria-label": t21("notification.loading"),
|
|
8881
9002
|
className: "cls_notification_panel_loading space-y-0",
|
|
8882
9003
|
children: [0, 1, 2].map((i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8883
9004
|
"div",
|
|
@@ -8936,7 +9057,7 @@ function NotificationPanel({
|
|
|
8936
9057
|
}
|
|
8937
9058
|
);
|
|
8938
9059
|
}
|
|
8939
|
-
var
|
|
9060
|
+
var t22 = i18n.createPackageT("hazo_ui", en_default);
|
|
8940
9061
|
function HazoUiToaster({
|
|
8941
9062
|
position = "bottom-right",
|
|
8942
9063
|
closeButton = true,
|
|
@@ -8982,12 +9103,14 @@ function permissionToast({
|
|
|
8982
9103
|
action,
|
|
8983
9104
|
duration = 5e3
|
|
8984
9105
|
}) {
|
|
8985
|
-
const description = missingPermissions.length === 0 ?
|
|
8986
|
-
|
|
8987
|
-
|
|
8988
|
-
|
|
9106
|
+
const description = missingPermissions.length === 0 ? t22("toast.permission_denied_message") : t22("toast.missing_prefix", {
|
|
9107
|
+
items: missingPermissions.map((key) => {
|
|
9108
|
+
const label = descriptions?.[key];
|
|
9109
|
+
return label ? `\`${key}\` \u2014 ${label}` : `\`${key}\``;
|
|
9110
|
+
}).join("; ")
|
|
9111
|
+
});
|
|
8989
9112
|
return errorToast({
|
|
8990
|
-
title:
|
|
9113
|
+
title: t22("toast.permission_required"),
|
|
8991
9114
|
description,
|
|
8992
9115
|
action,
|
|
8993
9116
|
duration
|
|
@@ -9245,6 +9368,7 @@ function use_fullscreen() {
|
|
|
9245
9368
|
const { isFullscreen, toggle } = useFullscreen(ref);
|
|
9246
9369
|
return { is_fullscreen: isFullscreen, toggle, ref };
|
|
9247
9370
|
}
|
|
9371
|
+
var t23 = i18n.createPackageT("hazo_ui", en_default);
|
|
9248
9372
|
function KanbanCard({
|
|
9249
9373
|
item,
|
|
9250
9374
|
renderCard,
|
|
@@ -9306,7 +9430,7 @@ function KanbanCard({
|
|
|
9306
9430
|
...listeners,
|
|
9307
9431
|
role: "button",
|
|
9308
9432
|
tabIndex: 0,
|
|
9309
|
-
"aria-roledescription": "
|
|
9433
|
+
"aria-roledescription": t23("kanban.draggable_card"),
|
|
9310
9434
|
"aria-grabbed": isDragging,
|
|
9311
9435
|
onDoubleClick: () => {
|
|
9312
9436
|
if (showEdit && onEditRequest && !dragging) onEditRequest(item);
|
|
@@ -9631,6 +9755,7 @@ function KanbanLaneStrip({
|
|
|
9631
9755
|
}
|
|
9632
9756
|
);
|
|
9633
9757
|
}
|
|
9758
|
+
var t24 = i18n.createPackageT("hazo_ui", en_default);
|
|
9634
9759
|
var DEFAULT_PRIORITIES = ["P0", "P1", "P2", "P3"];
|
|
9635
9760
|
function humanize(key) {
|
|
9636
9761
|
return key.replace(/[_\-]+/g, " ").replace(/([a-z])([A-Z])/g, "$1 $2").replace(/\s+/g, " ").trim().split(" ").map((w) => w ? w[0].toUpperCase() + w.slice(1) : w).join(" ");
|
|
@@ -9645,7 +9770,7 @@ function auto_detect_fields(item, columns) {
|
|
|
9645
9770
|
}
|
|
9646
9771
|
}
|
|
9647
9772
|
if (columns.length > 0) {
|
|
9648
|
-
out.push({ key: "columnKey", type: "status", label: "
|
|
9773
|
+
out.push({ key: "columnKey", type: "status", label: t24("kanban.status_label") });
|
|
9649
9774
|
}
|
|
9650
9775
|
return out;
|
|
9651
9776
|
}
|
|
@@ -9742,7 +9867,7 @@ function KanbanEditor({
|
|
|
9742
9867
|
isDirty: is_dirty
|
|
9743
9868
|
};
|
|
9744
9869
|
const open = item !== null;
|
|
9745
|
-
const title = item && titleFn ? titleFn(item) : item ?
|
|
9870
|
+
const title = item && titleFn ? titleFn(item) : item ? t24("kanban.edit_fallback", { id: item.id }) : "";
|
|
9746
9871
|
const priority_var = item?.priority ? `--hazo-kanban-priority-${String(item.priority).toLowerCase()}` : null;
|
|
9747
9872
|
const header_bar_color = priority_var ? `hsl(var(${priority_var}))` : void 0;
|
|
9748
9873
|
const use_default_footer = !(renderBody && hideFooter);
|
|
@@ -9754,18 +9879,18 @@ function KanbanEditor({
|
|
|
9754
9879
|
if (!o && !saving) onClose();
|
|
9755
9880
|
},
|
|
9756
9881
|
title,
|
|
9757
|
-
description: "
|
|
9882
|
+
description: t24("kanban.update_description"),
|
|
9758
9883
|
sizeWidth: "min(90vw, 480px)",
|
|
9759
9884
|
openAnimation: "none",
|
|
9760
9885
|
closeAnimation: "none",
|
|
9761
9886
|
headerBar: !!priority_var,
|
|
9762
9887
|
headerBarColor: header_bar_color,
|
|
9763
9888
|
contentClassName: cn("cls_hazo_kanban_editor", priority_var && "pt-0"),
|
|
9764
|
-
actionButtonText: saving ? "
|
|
9889
|
+
actionButtonText: saving ? t24("kanban.saving") : t24("kanban.save"),
|
|
9765
9890
|
actionButtonIcon: saving ? void 0 : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-4 w-4 mr-2" }),
|
|
9766
9891
|
actionButtonLoading: saving,
|
|
9767
9892
|
actionButtonDisabled: !is_dirty || !all_required_filled || saving,
|
|
9768
|
-
cancelButtonText: "
|
|
9893
|
+
cancelButtonText: t24("kanban.cancel"),
|
|
9769
9894
|
showCancelButton: true,
|
|
9770
9895
|
onConfirm: handle_save,
|
|
9771
9896
|
onCancel: onClose,
|
|
@@ -9870,7 +9995,7 @@ function KanbanEditorFieldRow({
|
|
|
9870
9995
|
/* @__PURE__ */ jsxRuntime.jsx(SelectTrigger, { id, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
9871
9996
|
SelectValue,
|
|
9872
9997
|
{
|
|
9873
|
-
placeholder: field.placeholder ??
|
|
9998
|
+
placeholder: field.placeholder ?? t24("kanban.select_placeholder", { label })
|
|
9874
9999
|
}
|
|
9875
10000
|
) }),
|
|
9876
10001
|
/* @__PURE__ */ jsxRuntime.jsx(SelectContent, { children: (field.options ?? []).map((opt) => /* @__PURE__ */ jsxRuntime.jsx(SelectItem, { value: opt, children: opt }, opt)) })
|
|
@@ -9886,7 +10011,7 @@ function KanbanEditorFieldRow({
|
|
|
9886
10011
|
/* @__PURE__ */ jsxRuntime.jsx(SelectTrigger, { id, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
9887
10012
|
SelectValue,
|
|
9888
10013
|
{
|
|
9889
|
-
placeholder: field.placeholder ?? "
|
|
10014
|
+
placeholder: field.placeholder ?? t24("kanban.select_priority")
|
|
9890
10015
|
}
|
|
9891
10016
|
) }),
|
|
9892
10017
|
/* @__PURE__ */ jsxRuntime.jsx(SelectContent, { children: priorities.map((p) => /* @__PURE__ */ jsxRuntime.jsx(SelectItem, { value: p, children: p }, p)) })
|
|
@@ -9902,7 +10027,7 @@ function KanbanEditorFieldRow({
|
|
|
9902
10027
|
/* @__PURE__ */ jsxRuntime.jsx(SelectTrigger, { id, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
9903
10028
|
SelectValue,
|
|
9904
10029
|
{
|
|
9905
|
-
placeholder: field.placeholder ?? "
|
|
10030
|
+
placeholder: field.placeholder ?? t24("kanban.select_status")
|
|
9906
10031
|
}
|
|
9907
10032
|
) }),
|
|
9908
10033
|
/* @__PURE__ */ jsxRuntime.jsx(SelectContent, { children: columns.map((col) => /* @__PURE__ */ jsxRuntime.jsx(SelectItem, { value: col.key, children: col.title }, col.key)) })
|
|
@@ -9911,6 +10036,7 @@ function KanbanEditorFieldRow({
|
|
|
9911
10036
|
)
|
|
9912
10037
|
] });
|
|
9913
10038
|
}
|
|
10039
|
+
var t25 = i18n.createPackageT("hazo_ui", en_default);
|
|
9914
10040
|
var EMPTY_FILTER = {
|
|
9915
10041
|
search: "",
|
|
9916
10042
|
categories: [],
|
|
@@ -9918,7 +10044,7 @@ var EMPTY_FILTER = {
|
|
|
9918
10044
|
};
|
|
9919
10045
|
function HazoUiKanbanFilter({
|
|
9920
10046
|
search = true,
|
|
9921
|
-
searchPlaceholder
|
|
10047
|
+
searchPlaceholder,
|
|
9922
10048
|
categories,
|
|
9923
10049
|
priorities,
|
|
9924
10050
|
value,
|
|
@@ -9926,6 +10052,7 @@ function HazoUiKanbanFilter({
|
|
|
9926
10052
|
onChange,
|
|
9927
10053
|
className
|
|
9928
10054
|
}) {
|
|
10055
|
+
const resolved_search_placeholder = searchPlaceholder ?? t25("common.search");
|
|
9929
10056
|
const is_controlled = value !== void 0;
|
|
9930
10057
|
const [internal, set_internal] = React27__namespace.useState(
|
|
9931
10058
|
defaultValue ?? EMPTY_FILTER
|
|
@@ -9952,7 +10079,7 @@ function HazoUiKanbanFilter({
|
|
|
9952
10079
|
{
|
|
9953
10080
|
value: current.search,
|
|
9954
10081
|
onChange: (e) => update({ ...current, search: e.target.value }),
|
|
9955
|
-
placeholder:
|
|
10082
|
+
placeholder: resolved_search_placeholder,
|
|
9956
10083
|
className: "cls_hazo_kanban_filter_search w-full sm:w-64"
|
|
9957
10084
|
}
|
|
9958
10085
|
),
|
|
@@ -10037,16 +10164,25 @@ function applyKanbanFilter(items, filter) {
|
|
|
10037
10164
|
return true;
|
|
10038
10165
|
});
|
|
10039
10166
|
}
|
|
10167
|
+
var t26 = i18n.createPackageT("hazo_ui", en_default);
|
|
10040
10168
|
var UNMATCHED_LANE_KEY = "__hazo_lane_unmatched__";
|
|
10041
10169
|
function bucket_key(lane_key, column_key) {
|
|
10042
10170
|
return lane_key == null ? column_key : `${lane_key}\0${column_key}`;
|
|
10043
10171
|
}
|
|
10044
10172
|
function default_announcements(itemLabel) {
|
|
10045
10173
|
return {
|
|
10046
|
-
onDragStart: ({ item, fromColumn }) =>
|
|
10047
|
-
onDragOver: ({ item, overColumn }) => overColumn ?
|
|
10048
|
-
onDragEnd: ({ item, fromColumn, toColumn, newIndex }) => fromColumn === toColumn ?
|
|
10049
|
-
|
|
10174
|
+
onDragStart: ({ item, fromColumn }) => t26("kanban.dnd_pickup", { item: itemLabel(item), column: fromColumn }),
|
|
10175
|
+
onDragOver: ({ item, overColumn }) => overColumn ? t26("kanban.dnd_over", { item: itemLabel(item), column: overColumn }) : "",
|
|
10176
|
+
onDragEnd: ({ item, fromColumn, toColumn, newIndex }) => fromColumn === toColumn ? t26("kanban.dnd_reorder", {
|
|
10177
|
+
item: itemLabel(item),
|
|
10178
|
+
pos: newIndex + 1,
|
|
10179
|
+
column: toColumn
|
|
10180
|
+
}) : t26("kanban.dnd_drop", {
|
|
10181
|
+
item: itemLabel(item),
|
|
10182
|
+
column: toColumn,
|
|
10183
|
+
pos: newIndex + 1
|
|
10184
|
+
}),
|
|
10185
|
+
onDragCancel: ({ item, fromColumn }) => t26("kanban.dnd_cancel", { item: itemLabel(item), column: fromColumn })
|
|
10050
10186
|
};
|
|
10051
10187
|
}
|
|
10052
10188
|
function group_items_by_column(items, overlay, columns, lanes) {
|
|
@@ -10850,7 +10986,7 @@ function serializeFilter(filter) {
|
|
|
10850
10986
|
const fields = (filter.fields ?? []).map((f) => `${f.field}:${f.operator ?? ""}:${String(f.value)}`).join(",");
|
|
10851
10987
|
return `${filter.search ?? ""}|${fields}`;
|
|
10852
10988
|
}
|
|
10853
|
-
var
|
|
10989
|
+
var t27 = i18n.createPackageT("hazo_ui", en_default);
|
|
10854
10990
|
function HazoUiTable(props) {
|
|
10855
10991
|
const state = useTableState(props);
|
|
10856
10992
|
const { columns, rows, getRowKey, className, caption } = props;
|
|
@@ -10885,12 +11021,12 @@ function HazoUiTable(props) {
|
|
|
10885
11021
|
) }) : state.serverError != null ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_hazo_ui_table_mobile_error py-6", children: renderErrorState(props.error, state.serverError) }) : state.displayed.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_hazo_ui_table_mobile_empty py-6", children: noActiveFilters(state.filter) && rows.length === 0 ? typeof props.empty === "string" || props.empty === void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
10886
11022
|
EmptyState,
|
|
10887
11023
|
{
|
|
10888
|
-
title: typeof props.empty === "string" && props.empty ||
|
|
11024
|
+
title: typeof props.empty === "string" && props.empty || t27("table.empty")
|
|
10889
11025
|
}
|
|
10890
11026
|
) : props.empty : typeof props.noResults === "string" || props.noResults === void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
10891
11027
|
EmptyState,
|
|
10892
11028
|
{
|
|
10893
|
-
title: typeof props.noResults === "string" && props.noResults ||
|
|
11029
|
+
title: typeof props.noResults === "string" && props.noResults || t27("table.no_results")
|
|
10894
11030
|
}
|
|
10895
11031
|
) : props.noResults }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
10896
11032
|
TableMobileCards,
|
|
@@ -10913,7 +11049,7 @@ function HazoUiTable(props) {
|
|
|
10913
11049
|
{
|
|
10914
11050
|
type: "button",
|
|
10915
11051
|
onClick: (e) => state.cycleHeaderSort(c.key, e.shiftKey),
|
|
10916
|
-
title:
|
|
11052
|
+
title: t27("table.sort_tooltip"),
|
|
10917
11053
|
className: "cls_hazo_ui_table_sort_btn inline-flex items-center gap-1 hover:text-foreground",
|
|
10918
11054
|
children: [
|
|
10919
11055
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: c.label }),
|
|
@@ -10945,12 +11081,12 @@ function HazoUiTable(props) {
|
|
|
10945
11081
|
children: noActiveFilters(state.filter) && rows.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_hazo_ui_table_empty_wrap py-6", children: typeof props.empty === "string" || props.empty === void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
10946
11082
|
EmptyState,
|
|
10947
11083
|
{
|
|
10948
|
-
title: typeof props.empty === "string" && props.empty ||
|
|
11084
|
+
title: typeof props.empty === "string" && props.empty || t27("table.empty")
|
|
10949
11085
|
}
|
|
10950
11086
|
) : props.empty }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_hazo_ui_table_no_results_wrap py-6", children: typeof props.noResults === "string" || props.noResults === void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
10951
11087
|
EmptyState,
|
|
10952
11088
|
{
|
|
10953
|
-
title: typeof props.noResults === "string" && props.noResults ||
|
|
11089
|
+
title: typeof props.noResults === "string" && props.noResults || t27("table.no_results")
|
|
10954
11090
|
}
|
|
10955
11091
|
) : props.noResults })
|
|
10956
11092
|
}
|
|
@@ -11064,7 +11200,7 @@ function PaginationFooter({
|
|
|
11064
11200
|
const end = Math.min((page + 1) * pageSize, total);
|
|
11065
11201
|
const lastPage = Math.max(0, Math.ceil(total / pageSize) - 1);
|
|
11066
11202
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cls_hazo_ui_table_pagination flex items-center justify-between gap-3 pt-2 text-sm", children: [
|
|
11067
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "cls_hazo_ui_table_page_counter text-muted-foreground", children:
|
|
11203
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "cls_hazo_ui_table_page_counter text-muted-foreground", children: t27("table.showing", {
|
|
11068
11204
|
start: String(start),
|
|
11069
11205
|
end: String(end),
|
|
11070
11206
|
total: String(total)
|
|
@@ -11077,8 +11213,8 @@ function PaginationFooter({
|
|
|
11077
11213
|
size: "sm",
|
|
11078
11214
|
onClick: () => onPageChange(Math.max(0, page - 1)),
|
|
11079
11215
|
disabled: page === 0,
|
|
11080
|
-
"aria-label":
|
|
11081
|
-
children:
|
|
11216
|
+
"aria-label": t27("table.prev_aria"),
|
|
11217
|
+
children: t27("table.prev")
|
|
11082
11218
|
}
|
|
11083
11219
|
),
|
|
11084
11220
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -11088,8 +11224,8 @@ function PaginationFooter({
|
|
|
11088
11224
|
size: "sm",
|
|
11089
11225
|
onClick: () => onPageChange(Math.min(lastPage, page + 1)),
|
|
11090
11226
|
disabled: page >= lastPage,
|
|
11091
|
-
"aria-label":
|
|
11092
|
-
children:
|
|
11227
|
+
"aria-label": t27("table.next_aria"),
|
|
11228
|
+
children: t27("table.next")
|
|
11093
11229
|
}
|
|
11094
11230
|
)
|
|
11095
11231
|
] })
|
|
@@ -11133,7 +11269,7 @@ function Toolbar2(props) {
|
|
|
11133
11269
|
setSearchValue(v);
|
|
11134
11270
|
onSearchChange(v);
|
|
11135
11271
|
},
|
|
11136
|
-
placeholder: searchPlaceholder ??
|
|
11272
|
+
placeholder: searchPlaceholder ?? t27("table.search_placeholder"),
|
|
11137
11273
|
className: "cls_hazo_ui_table_search w-full sm:max-w-xs"
|
|
11138
11274
|
}
|
|
11139
11275
|
) : /* @__PURE__ */ jsxRuntime.jsx("div", {}),
|
|
@@ -11181,8 +11317,8 @@ function renderErrorState(error, serverError) {
|
|
|
11181
11317
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
11182
11318
|
EmptyState,
|
|
11183
11319
|
{
|
|
11184
|
-
title:
|
|
11185
|
-
description: msg ||
|
|
11320
|
+
title: t27("table.error_title"),
|
|
11321
|
+
description: msg || t27("table.error_description")
|
|
11186
11322
|
}
|
|
11187
11323
|
);
|
|
11188
11324
|
}
|
|
@@ -11418,18 +11554,20 @@ function StackedBars({
|
|
|
11418
11554
|
}
|
|
11419
11555
|
);
|
|
11420
11556
|
}
|
|
11557
|
+
var t28 = i18n.createPackageT("hazo_ui", en_default);
|
|
11421
11558
|
function DateRangeSelector({
|
|
11422
11559
|
value,
|
|
11423
11560
|
onChange,
|
|
11424
11561
|
options,
|
|
11425
11562
|
className,
|
|
11426
|
-
ariaLabel
|
|
11563
|
+
ariaLabel
|
|
11427
11564
|
}) {
|
|
11565
|
+
const resolved_aria = ariaLabel ?? t28("charts.date_range");
|
|
11428
11566
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
11429
11567
|
"div",
|
|
11430
11568
|
{
|
|
11431
11569
|
role: "group",
|
|
11432
|
-
"aria-label":
|
|
11570
|
+
"aria-label": resolved_aria,
|
|
11433
11571
|
className: cn(
|
|
11434
11572
|
"cls_hazo_date_range_selector inline-flex items-center gap-0 rounded-md border bg-background p-0.5",
|
|
11435
11573
|
className
|
|
@@ -11456,6 +11594,7 @@ function DateRangeSelector({
|
|
|
11456
11594
|
}
|
|
11457
11595
|
);
|
|
11458
11596
|
}
|
|
11597
|
+
var t29 = i18n.createPackageT("hazo_ui", en_default);
|
|
11459
11598
|
var PAD_LEFT2 = 80;
|
|
11460
11599
|
var PAD_RIGHT2 = 72;
|
|
11461
11600
|
var PAD_TOP2 = 12;
|
|
@@ -11606,12 +11745,12 @@ function FunnelChart({
|
|
|
11606
11745
|
const bubble_anchor_y = bar_y + BAR_H / 2;
|
|
11607
11746
|
const lines = [
|
|
11608
11747
|
{ text: step.label, accent: true },
|
|
11609
|
-
{ text:
|
|
11610
|
-
{ text:
|
|
11748
|
+
{ text: t29("charts.total", { value: fmt(total) }), accent: false },
|
|
11749
|
+
{ text: t29("charts.pct_of_first", { pct: pct_first }), accent: false }
|
|
11611
11750
|
];
|
|
11612
11751
|
if (i > 0) {
|
|
11613
|
-
lines.push({ text:
|
|
11614
|
-
lines.push({ text:
|
|
11752
|
+
lines.push({ text: t29("charts.pct_of_prev", { pct: pct_prev }), accent: false });
|
|
11753
|
+
lines.push({ text: t29("charts.dropoff", { value: fmt(dropoff) }), accent: false });
|
|
11615
11754
|
}
|
|
11616
11755
|
if (step.segments) {
|
|
11617
11756
|
step.segments.forEach((seg) => {
|
|
@@ -11672,6 +11811,7 @@ function FunnelChart({
|
|
|
11672
11811
|
|
|
11673
11812
|
// src/assets/celebration-chime.mp3
|
|
11674
11813
|
var celebration_chime_default = "data:text/plain;charset=utf-8,";
|
|
11814
|
+
var t30 = i18n.createPackageT("hazo_ui", en_default);
|
|
11675
11815
|
var CELEBRATION_GRADIENT = "linear-gradient(135deg, #667eea 0%, #764ba2 100%)";
|
|
11676
11816
|
var CARD_SIZE = 1080;
|
|
11677
11817
|
var PREVIEW_SIZE = 400;
|
|
@@ -11869,7 +12009,7 @@ function CelebrationModalInner({
|
|
|
11869
12009
|
{
|
|
11870
12010
|
className: "cls_celebration_close_btn absolute top-3 right-3 z-10 p-1.5 rounded-full hover:bg-black/10 transition-colors",
|
|
11871
12011
|
onClick: close_modal,
|
|
11872
|
-
"aria-label": "
|
|
12012
|
+
"aria-label": t30("celebration.close"),
|
|
11873
12013
|
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4 text-gray-600" })
|
|
11874
12014
|
}
|
|
11875
12015
|
),
|
|
@@ -11932,21 +12072,21 @@ function CelebrationModalInner({
|
|
|
11932
12072
|
disabled: is_downloading,
|
|
11933
12073
|
children: [
|
|
11934
12074
|
is_downloading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-3.5 w-3.5 mr-1.5 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { className: "h-3.5 w-3.5 mr-1.5" }),
|
|
11935
|
-
"
|
|
12075
|
+
t30("celebration.download_png")
|
|
11936
12076
|
]
|
|
11937
12077
|
}
|
|
11938
12078
|
),
|
|
11939
12079
|
can_share && /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "outline", size: "sm", onClick: handle_share, children: [
|
|
11940
12080
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Share2, { className: "h-3.5 w-3.5 mr-1.5" }),
|
|
11941
|
-
"
|
|
12081
|
+
t30("celebration.share")
|
|
11942
12082
|
] }),
|
|
11943
12083
|
/* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "outline", size: "sm", onClick: handle_copy, children: [
|
|
11944
12084
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, { className: "h-3.5 w-3.5 mr-1.5" }),
|
|
11945
|
-
"
|
|
12085
|
+
t30("celebration.copy_image")
|
|
11946
12086
|
] })
|
|
11947
12087
|
] })
|
|
11948
12088
|
] }),
|
|
11949
|
-
!shareableCard && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_celebration_footer pb-8", children: /* @__PURE__ */ jsxRuntime.jsx(Button, { size: "sm", onClick: close_modal, children: "
|
|
12089
|
+
!shareableCard && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cls_celebration_footer pb-8", children: /* @__PURE__ */ jsxRuntime.jsx(Button, { size: "sm", onClick: close_modal, children: t30("celebration.dismiss") }) })
|
|
11950
12090
|
]
|
|
11951
12091
|
}
|
|
11952
12092
|
)
|
|
@@ -11968,8 +12108,8 @@ function computeEta(durationWindow, unitCount, concurrency = 1, fallbackUnitMs =
|
|
|
11968
12108
|
}
|
|
11969
12109
|
function easeToward(elapsed, eta, maxCap = 0.95) {
|
|
11970
12110
|
if (eta <= 0 || elapsed <= 0) return 0;
|
|
11971
|
-
const
|
|
11972
|
-
return maxCap * (1 - Math.exp(-1.5 *
|
|
12111
|
+
const t35 = elapsed / eta;
|
|
12112
|
+
return maxCap * (1 - Math.exp(-1.5 * t35));
|
|
11973
12113
|
}
|
|
11974
12114
|
function HazoUiProgressBar({
|
|
11975
12115
|
value,
|
|
@@ -12145,13 +12285,16 @@ function upsertEntry(entries, entry) {
|
|
|
12145
12285
|
function removeEntry(entries, id) {
|
|
12146
12286
|
return entries.filter((e) => e.id !== id);
|
|
12147
12287
|
}
|
|
12288
|
+
var t31 = i18n.createPackageT("hazo_ui", en_default);
|
|
12148
12289
|
function HazoUiMemoryDropdown({
|
|
12149
12290
|
history_key,
|
|
12150
|
-
placeholder
|
|
12291
|
+
placeholder,
|
|
12151
12292
|
on_select,
|
|
12152
12293
|
add_entry,
|
|
12153
|
-
empty_label
|
|
12294
|
+
empty_label
|
|
12154
12295
|
}) {
|
|
12296
|
+
const resolved_placeholder = placeholder ?? t31("memory.search_placeholder");
|
|
12297
|
+
const resolved_empty_label = empty_label ?? t31("memory.no_history");
|
|
12155
12298
|
const { value: stored, setValue } = client$2.useHazoState(history_key, {
|
|
12156
12299
|
level: "scope",
|
|
12157
12300
|
fallback: []
|
|
@@ -12189,7 +12332,7 @@ function HazoUiMemoryDropdown({
|
|
|
12189
12332
|
type: "text",
|
|
12190
12333
|
value: query,
|
|
12191
12334
|
onChange: (e) => setQuery(e.target.value),
|
|
12192
|
-
placeholder,
|
|
12335
|
+
placeholder: resolved_placeholder,
|
|
12193
12336
|
style: {
|
|
12194
12337
|
width: "100%",
|
|
12195
12338
|
background: "#FFFFFF",
|
|
@@ -12219,7 +12362,7 @@ function HazoUiMemoryDropdown({
|
|
|
12219
12362
|
fontStyle: "italic",
|
|
12220
12363
|
fontSize: 13
|
|
12221
12364
|
},
|
|
12222
|
-
children:
|
|
12365
|
+
children: resolved_empty_label
|
|
12223
12366
|
}
|
|
12224
12367
|
) : filtered.map((entry) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
12225
12368
|
EntryRow,
|
|
@@ -12276,7 +12419,7 @@ function EntryRow({ entry, on_select, onDelete }) {
|
|
|
12276
12419
|
onClick: (e) => onDelete(entry.id, e),
|
|
12277
12420
|
onMouseEnter: () => setDeleteHovered(true),
|
|
12278
12421
|
onMouseLeave: () => setDeleteHovered(false),
|
|
12279
|
-
"aria-label":
|
|
12422
|
+
"aria-label": t31("memory.remove_aria", { label: entry.label }),
|
|
12280
12423
|
style: {
|
|
12281
12424
|
flexShrink: 0,
|
|
12282
12425
|
background: "none",
|
|
@@ -12295,6 +12438,7 @@ function EntryRow({ entry, on_select, onDelete }) {
|
|
|
12295
12438
|
}
|
|
12296
12439
|
);
|
|
12297
12440
|
}
|
|
12441
|
+
var t32 = i18n.createPackageT("hazo_ui", en_default);
|
|
12298
12442
|
function Logo({
|
|
12299
12443
|
logoUrl,
|
|
12300
12444
|
logoUrlDark,
|
|
@@ -12304,7 +12448,7 @@ function Logo({
|
|
|
12304
12448
|
className,
|
|
12305
12449
|
imgClassName
|
|
12306
12450
|
}) {
|
|
12307
|
-
const alt = appTitle ?? "
|
|
12451
|
+
const alt = appTitle ?? t32("app_logo.alt_fallback");
|
|
12308
12452
|
let content = null;
|
|
12309
12453
|
if (logoUrl) {
|
|
12310
12454
|
content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -12339,11 +12483,12 @@ function Logo({
|
|
|
12339
12483
|
}
|
|
12340
12484
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("inline-flex items-center gap-2", className), children: content });
|
|
12341
12485
|
}
|
|
12486
|
+
var t33 = i18n.createPackageT("hazo_ui", en_default);
|
|
12342
12487
|
function AppHeader({ identity, homeHref, navItems, actions, className }) {
|
|
12343
12488
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12344
12489
|
"header",
|
|
12345
12490
|
{
|
|
12346
|
-
"aria-label": "
|
|
12491
|
+
"aria-label": t33("app_header.aria_label"),
|
|
12347
12492
|
className: cn(
|
|
12348
12493
|
"flex w-full items-center justify-between gap-4 border-b bg-navbar text-navbar-fg border-navbar-border px-4 py-2.5",
|
|
12349
12494
|
className
|
|
@@ -12851,6 +12996,7 @@ function HazoBrowserTab({
|
|
|
12851
12996
|
}
|
|
12852
12997
|
);
|
|
12853
12998
|
}
|
|
12999
|
+
var t34 = i18n.createPackageT("hazo_ui", en_default);
|
|
12854
13000
|
var native_name_cache = /* @__PURE__ */ new Map();
|
|
12855
13001
|
function get_native_name(code) {
|
|
12856
13002
|
const cached = native_name_cache.get(code);
|
|
@@ -12922,9 +13068,10 @@ function LocalePicker({
|
|
|
12922
13068
|
flags = false,
|
|
12923
13069
|
alternates,
|
|
12924
13070
|
activeLocale,
|
|
12925
|
-
triggerLabel
|
|
13071
|
+
triggerLabel,
|
|
12926
13072
|
className
|
|
12927
13073
|
}) {
|
|
13074
|
+
const resolved_trigger_label = triggerLabel ?? t34("locale_picker.change_language");
|
|
12928
13075
|
const options = React27__namespace.useMemo(() => {
|
|
12929
13076
|
return Object.entries(alternates ?? {}).map(([code, url]) => {
|
|
12930
13077
|
const href = safeHref(url);
|
|
@@ -12939,7 +13086,7 @@ function LocalePicker({
|
|
|
12939
13086
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12940
13087
|
"nav",
|
|
12941
13088
|
{
|
|
12942
|
-
"aria-label":
|
|
13089
|
+
"aria-label": resolved_trigger_label,
|
|
12943
13090
|
className: cn("cls_locale_picker_inline flex items-center gap-1", className),
|
|
12944
13091
|
children: options.map((opt) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12945
13092
|
"a",
|
|
@@ -12969,7 +13116,7 @@ function LocalePicker({
|
|
|
12969
13116
|
variant: "outline",
|
|
12970
13117
|
size: "sm",
|
|
12971
13118
|
lang: activeLocale,
|
|
12972
|
-
"aria-label":
|
|
13119
|
+
"aria-label": resolved_trigger_label,
|
|
12973
13120
|
className: cn("cls_locale_picker_trigger gap-1.5", className),
|
|
12974
13121
|
children: [
|
|
12975
13122
|
flags && /* @__PURE__ */ jsxRuntime.jsx(FlagIcon, { code: active_option?.code ?? options[0].code }),
|