mui-atelier 0.1.0

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.
Files changed (77) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE +21 -0
  3. package/NOTICE +32 -0
  4. package/README.md +282 -0
  5. package/dist/components/AddressFields.js +83 -0
  6. package/dist/components/AuthCard.js +94 -0
  7. package/dist/components/AuthSplash.js +88 -0
  8. package/dist/components/BrandHeader.js +81 -0
  9. package/dist/components/BrandLink.js +22 -0
  10. package/dist/components/BrandMark.js +69 -0
  11. package/dist/components/BrandProvider.js +14 -0
  12. package/dist/components/Breadcrumbs.js +62 -0
  13. package/dist/components/CardHead.js +46 -0
  14. package/dist/components/ConfirmProvider.js +77 -0
  15. package/dist/components/DashboardLayout.js +645 -0
  16. package/dist/components/DataTable.js +546 -0
  17. package/dist/components/DetailRows.js +42 -0
  18. package/dist/components/EmptyNote.js +28 -0
  19. package/dist/components/Eyebrow.js +21 -0
  20. package/dist/components/HeadingHelp.js +38 -0
  21. package/dist/components/HeadingLevel.js +18 -0
  22. package/dist/components/IconTile.js +42 -0
  23. package/dist/components/ImagePreviewDialog.js +86 -0
  24. package/dist/components/LabeledField.js +156 -0
  25. package/dist/components/LanguageSwitcher.js +43 -0
  26. package/dist/components/ListRow.js +59 -0
  27. package/dist/components/ModeToggle.js +35 -0
  28. package/dist/components/PageHeader.js +65 -0
  29. package/dist/components/PasswordField.js +43 -0
  30. package/dist/components/PublicLayout.js +27 -0
  31. package/dist/components/PublicNav.js +17 -0
  32. package/dist/components/RouteMessage.js +31 -0
  33. package/dist/components/RowList.js +10 -0
  34. package/dist/components/SafeHtml.js +57 -0
  35. package/dist/components/SaveState.js +13 -0
  36. package/dist/components/SectionPanel.js +48 -0
  37. package/dist/components/SectionTabs.js +139 -0
  38. package/dist/components/SiteNav.js +130 -0
  39. package/dist/components/Skeletons.js +63 -0
  40. package/dist/components/Sortable.js +81 -0
  41. package/dist/components/StatTile.js +66 -0
  42. package/dist/components/StatusChip.js +17 -0
  43. package/dist/components/StatusDot.js +42 -0
  44. package/dist/components/SubCard.js +30 -0
  45. package/dist/components/TabbedCard.js +20 -0
  46. package/dist/components/TableFilters.js +247 -0
  47. package/dist/components/ToastProvider.js +65 -0
  48. package/dist/eslint/chipRules.mjs +65 -0
  49. package/dist/hooks/useDocumentTitle.js +19 -0
  50. package/dist/hooks/useOverflowTabs.js +53 -0
  51. package/dist/hooks/useUnsavedChanges.js +46 -0
  52. package/dist/i18n/loadMessages.js +15 -0
  53. package/dist/i18n/mergeMessages.js +13 -0
  54. package/dist/i18n/messages/en.json +103 -0
  55. package/dist/i18n/messages/es.json +103 -0
  56. package/dist/i18n/messages/zh.json +103 -0
  57. package/dist/lib/authCard.js +4 -0
  58. package/dist/lib/chipTone.js +46 -0
  59. package/dist/lib/countryRegionData.js +29 -0
  60. package/dist/lib/countryRegionData.json +1 -0
  61. package/dist/lib/navLock.js +22 -0
  62. package/dist/lib/navTabSx.js +78 -0
  63. package/dist/lib/orgTime.js +243 -0
  64. package/dist/lib/pageHtml.js +139 -0
  65. package/dist/lib/safeNext.js +13 -0
  66. package/dist/lib/sanitizeHtml.js +36 -0
  67. package/dist/lib/slugify.js +7 -0
  68. package/dist/lib/tableFilter.js +147 -0
  69. package/dist/lib/tableStyle.js +87 -0
  70. package/dist/test/jsdomShims.js +53 -0
  71. package/dist/test/themeContract.js +178 -0
  72. package/dist/theme/OrgThemeRegistry.js +71 -0
  73. package/dist/theme/ThemeRegistry.js +17 -0
  74. package/dist/theme/berryNavRow.js +21 -0
  75. package/dist/theme/createSiteTheme.js +974 -0
  76. package/dist/theme/themes.js +438 -0
  77. package/package.json +118 -0
@@ -0,0 +1,103 @@
1
+ {
2
+ "language": {
3
+ "label": "Language"
4
+ },
5
+ "account": {
6
+ "signOut": "Sign out"
7
+ },
8
+ "search": {
9
+ "placeholder": "Search…"
10
+ },
11
+ "confirm": {
12
+ "title": "Are you sure?",
13
+ "cancel": "Cancel",
14
+ "confirm": "Confirm",
15
+ "delete": "Delete"
16
+ },
17
+ "nav": {
18
+ "open": "Open menu",
19
+ "close": "Close menu",
20
+ "skipToContent": "Skip to content",
21
+ "sections": "Sections",
22
+ "more": "More"
23
+ },
24
+ "route": {
25
+ "retry": "Try again",
26
+ "home": "Go to the homepage",
27
+ "dashboard": "Go to dashboard",
28
+ "back": "Go back",
29
+ "notFoundTitle": "Page not found",
30
+ "notFoundBody": "That address doesn’t exist, or it has moved. Check the link and try again.",
31
+ "errorTitle": "Something went wrong",
32
+ "errorBody": "This page couldn’t be loaded. Trying again often fixes it."
33
+ },
34
+ "mode": {
35
+ "label": "Colour mode",
36
+ "light": "Colour mode: light",
37
+ "dark": "Colour mode: dark",
38
+ "system": "Colour mode: system"
39
+ },
40
+ "address": {
41
+ "country": "Country",
42
+ "region": "State / province / region",
43
+ "line1": "Address line 1",
44
+ "line2": "Address line 2",
45
+ "city": "City",
46
+ "postalCode": "Postal code"
47
+ },
48
+ "shell": {
49
+ "soon": "Soon",
50
+ "openNav": "Open navigation",
51
+ "accountMenu": "Account menu"
52
+ },
53
+ "image": {
54
+ "close": "Close preview",
55
+ "previous": "Previous image",
56
+ "next": "Next image"
57
+ },
58
+ "sortable": {
59
+ "drag": "Drag to reorder"
60
+ },
61
+ "password": {
62
+ "show": "Show password",
63
+ "hide": "Hide password"
64
+ },
65
+ "save": {
66
+ "unsaved": "Unsaved changes",
67
+ "saving": "Saving…"
68
+ },
69
+ "optional": "(optional)",
70
+ "breadcrumb": {
71
+ "aria": "Breadcrumb"
72
+ },
73
+ "table": {
74
+ "search": "Search",
75
+ "filters": "Filters",
76
+ "hideFilters": "Hide filters",
77
+ "clearAll": "Clear all",
78
+ "countSelected": "{count} selected",
79
+ "countOf": "{count} of {total}",
80
+ "selectAll": "Select all rows",
81
+ "selectRow": "Select {name}",
82
+ "expandRow": "Show details for {name}",
83
+ "collapseRow": "Hide details for {name}",
84
+ "rowsPerPage": "Rows per page:",
85
+ "displayedRows": "{from}–{to} of {count}",
86
+ "allSelected": "All {count} selected.",
87
+ "clearSelection": "Clear selection",
88
+ "exactPlaceholder": "e.g. 12, 14, 31",
89
+ "containsPlaceholder": "Contains… (comma-separate for any of)",
90
+ "dateFromLabel": "{column} from",
91
+ "dateToLabel": "{column} to",
92
+ "dateBetween": "{from} – {to}",
93
+ "dateFrom": "from {from}",
94
+ "dateTo": "up to {to}",
95
+ "numberFromLabel": "{column} at least",
96
+ "numberToLabel": "{column} at most",
97
+ "numberBetween": "{from} – {to}",
98
+ "numberFrom": "{from} or more",
99
+ "numberTo": "{to} or fewer",
100
+ "sortBy": "Sort by",
101
+ "clearSearch": "Clear search"
102
+ }
103
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "language": {
3
+ "label": "Idioma"
4
+ },
5
+ "account": {
6
+ "signOut": "Cerrar sesión"
7
+ },
8
+ "search": {
9
+ "placeholder": "Buscar…"
10
+ },
11
+ "confirm": {
12
+ "title": "¿Está seguro?",
13
+ "cancel": "Cancelar",
14
+ "confirm": "Confirmar",
15
+ "delete": "Eliminar"
16
+ },
17
+ "nav": {
18
+ "open": "Abrir menú",
19
+ "close": "Cerrar menú",
20
+ "skipToContent": "Saltar al contenido",
21
+ "sections": "Secciones",
22
+ "more": "Más"
23
+ },
24
+ "route": {
25
+ "retry": "Reintentar",
26
+ "home": "Ir al inicio",
27
+ "dashboard": "Ir al panel",
28
+ "back": "Volver",
29
+ "notFoundTitle": "Página no encontrada",
30
+ "notFoundBody": "Esa dirección no existe o ha cambiado. Compruebe el enlace e inténtelo de nuevo.",
31
+ "errorTitle": "Algo ha salido mal",
32
+ "errorBody": "No se pudo cargar esta página. Reintentar suele solucionarlo."
33
+ },
34
+ "mode": {
35
+ "label": "Modo de color",
36
+ "light": "Modo de color: claro",
37
+ "dark": "Modo de color: oscuro",
38
+ "system": "Modo de color: sistema"
39
+ },
40
+ "address": {
41
+ "country": "País",
42
+ "region": "Estado / provincia / región",
43
+ "line1": "Dirección",
44
+ "line2": "Dirección (línea 2)",
45
+ "city": "Ciudad",
46
+ "postalCode": "Código postal"
47
+ },
48
+ "shell": {
49
+ "soon": "Pronto",
50
+ "openNav": "Abrir navegación",
51
+ "accountMenu": "Menú de cuenta"
52
+ },
53
+ "image": {
54
+ "close": "Cerrar vista previa",
55
+ "previous": "Imagen anterior",
56
+ "next": "Imagen siguiente"
57
+ },
58
+ "sortable": {
59
+ "drag": "Arrastrar para reordenar"
60
+ },
61
+ "password": {
62
+ "show": "Mostrar contraseña",
63
+ "hide": "Ocultar contraseña"
64
+ },
65
+ "save": {
66
+ "unsaved": "Cambios sin guardar",
67
+ "saving": "Guardando…"
68
+ },
69
+ "optional": "(opcional)",
70
+ "breadcrumb": {
71
+ "aria": "Ruta de navegación"
72
+ },
73
+ "table": {
74
+ "search": "Buscar",
75
+ "filters": "Filtros",
76
+ "hideFilters": "Ocultar filtros",
77
+ "clearAll": "Borrar todo",
78
+ "countSelected": "{count} seleccionados",
79
+ "countOf": "{count} de {total}",
80
+ "selectAll": "Seleccionar todas las filas",
81
+ "selectRow": "Seleccionar {name}",
82
+ "expandRow": "Mostrar detalles de {name}",
83
+ "collapseRow": "Ocultar detalles de {name}",
84
+ "rowsPerPage": "Filas por página:",
85
+ "displayedRows": "{from}–{to} de {count}",
86
+ "allSelected": "{count} seleccionadas en total.",
87
+ "clearSelection": "Borrar selección",
88
+ "exactPlaceholder": "p. ej. 12, 14, 31",
89
+ "containsPlaceholder": "Contiene… (separa con comas para cualquiera)",
90
+ "dateFromLabel": "{column} desde",
91
+ "dateToLabel": "{column} hasta",
92
+ "dateBetween": "{from} – {to}",
93
+ "dateFrom": "desde {from}",
94
+ "dateTo": "hasta {to}",
95
+ "numberFromLabel": "{column} como mínimo",
96
+ "numberToLabel": "{column} como máximo",
97
+ "numberBetween": "{from} – {to}",
98
+ "numberFrom": "{from} o más",
99
+ "numberTo": "{to} o menos",
100
+ "sortBy": "Ordenar por",
101
+ "clearSearch": "Borrar búsqueda"
102
+ }
103
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "language": {
3
+ "label": "语言"
4
+ },
5
+ "account": {
6
+ "signOut": "退出登录"
7
+ },
8
+ "search": {
9
+ "placeholder": "搜索…"
10
+ },
11
+ "confirm": {
12
+ "title": "确定吗?",
13
+ "cancel": "取消",
14
+ "confirm": "确认",
15
+ "delete": "删除"
16
+ },
17
+ "nav": {
18
+ "open": "打开菜单",
19
+ "close": "关闭菜单",
20
+ "skipToContent": "跳到主要内容",
21
+ "sections": "栏目",
22
+ "more": "更多"
23
+ },
24
+ "route": {
25
+ "retry": "重试",
26
+ "home": "前往首页",
27
+ "dashboard": "前往仪表板",
28
+ "back": "返回",
29
+ "notFoundTitle": "页面不存在",
30
+ "notFoundBody": "该地址不存在或已变更。请检查链接后重试。",
31
+ "errorTitle": "出了点问题",
32
+ "errorBody": "此页面无法加载。重试通常可以解决。"
33
+ },
34
+ "mode": {
35
+ "label": "配色模式",
36
+ "light": "配色模式:浅色",
37
+ "dark": "配色模式:深色",
38
+ "system": "配色模式:跟随系统"
39
+ },
40
+ "address": {
41
+ "country": "国家/地区",
42
+ "region": "州/省/地区",
43
+ "line1": "地址",
44
+ "line2": "地址(第二行)",
45
+ "city": "城市",
46
+ "postalCode": "邮政编码"
47
+ },
48
+ "shell": {
49
+ "soon": "即将推出",
50
+ "openNav": "打开导航",
51
+ "accountMenu": "账户菜单"
52
+ },
53
+ "image": {
54
+ "close": "关闭预览",
55
+ "previous": "上一张图片",
56
+ "next": "下一张图片"
57
+ },
58
+ "sortable": {
59
+ "drag": "拖动以重新排序"
60
+ },
61
+ "password": {
62
+ "show": "显示密码",
63
+ "hide": "隐藏密码"
64
+ },
65
+ "save": {
66
+ "unsaved": "有未保存的更改",
67
+ "saving": "保存中…"
68
+ },
69
+ "optional": "(可选)",
70
+ "breadcrumb": {
71
+ "aria": "面包屑导航"
72
+ },
73
+ "table": {
74
+ "search": "搜索",
75
+ "filters": "筛选",
76
+ "hideFilters": "隐藏筛选",
77
+ "clearAll": "全部清除",
78
+ "countSelected": "已选 {count} 项",
79
+ "countOf": "{count} / {total}",
80
+ "selectAll": "全选所有行",
81
+ "selectRow": "选择 {name}",
82
+ "expandRow": "显示 {name} 的详情",
83
+ "collapseRow": "隐藏 {name} 的详情",
84
+ "rowsPerPage": "每页行数:",
85
+ "displayedRows": "第 {from}–{to} 项,共 {count} 项",
86
+ "allSelected": "已选择全部 {count} 项。",
87
+ "clearSelection": "清除选择",
88
+ "exactPlaceholder": "例如 12、14、31",
89
+ "containsPlaceholder": "包含…(用逗号分隔以匹配任一)",
90
+ "dateFromLabel": "{column} 起",
91
+ "dateToLabel": "{column} 至",
92
+ "dateBetween": "{from} – {to}",
93
+ "dateFrom": "{from} 起",
94
+ "dateTo": "至 {to}",
95
+ "numberFromLabel": "{column} 最少",
96
+ "numberToLabel": "{column} 最多",
97
+ "numberBetween": "{from} – {to}",
98
+ "numberFrom": "{from} 或更多",
99
+ "numberTo": "{to} 或更少",
100
+ "sortBy": "排序方式",
101
+ "clearSearch": "清除搜索"
102
+ }
103
+ }
@@ -0,0 +1,4 @@
1
+ const AUTH_CARD_MAX_WIDTH = 475;
2
+ export {
3
+ AUTH_CARD_MAX_WIDTH
4
+ };
@@ -0,0 +1,46 @@
1
+ const ROLES = {
2
+ progress: "info",
3
+ done: "success",
4
+ caution: "warning",
5
+ bad: "error",
6
+ idle: "default",
7
+ tag: "primary"
8
+ };
9
+ const TAG_SLOTS = ["primary", "success"];
10
+ const TAG_SLOTS_WITH_SECONDARY = ["primary", "success", "secondary"];
11
+ const hashOf = (label) => {
12
+ const key = String(label ?? "");
13
+ let hash = 2166136261;
14
+ for (let i = 0; i < key.length; i += 1) {
15
+ hash ^= key.charCodeAt(i);
16
+ hash = Math.imul(hash, 16777619) >>> 0;
17
+ }
18
+ return hash;
19
+ };
20
+ function tagStyle(label, secondaryIsOwnColour = false, index = null) {
21
+ const slots = secondaryIsOwnColour ? TAG_SLOTS_WITH_SECONDARY : TAG_SLOTS;
22
+ const combos = [
23
+ ...slots.map((color) => ({ color, variant: "filled" })),
24
+ ...slots.map((color) => ({ color, variant: "outlined" }))
25
+ ];
26
+ const pick = index == null ? hashOf(label) : index;
27
+ return combos[pick % combos.length];
28
+ }
29
+ function tagColor(label, secondaryIsOwnColour = false) {
30
+ return tagStyle(label, secondaryIsOwnColour).color;
31
+ }
32
+ function chipPalette() {
33
+ return ROLES;
34
+ }
35
+ function chipColor(role, tag, secondaryIsOwnColour = false) {
36
+ if (role === "tag") return tagColor(tag, secondaryIsOwnColour);
37
+ return ROLES[role] ?? "default";
38
+ }
39
+ const CHIP_ROLES = Object.keys(ROLES);
40
+ export {
41
+ CHIP_ROLES,
42
+ chipColor,
43
+ chipPalette,
44
+ tagColor,
45
+ tagStyle
46
+ };
@@ -0,0 +1,29 @@
1
+ import DATA from "./countryRegionData.json";
2
+ const COUNTRIES = [...DATA].sort((a, b) => a.countryName.localeCompare(b.countryName));
3
+ const BY_CODE = new Map(DATA.map((c) => [c.countryShortCode, c]));
4
+ function regionsForCountry(countryCode) {
5
+ return BY_CODE.get(countryCode)?.regions ?? [];
6
+ }
7
+ function regionCode(countryCode, region) {
8
+ return region?.shortCode ? `${countryCode}-${region.shortCode}` : region?.name ?? "";
9
+ }
10
+ function countryName(countryCode) {
11
+ if (!countryCode) return "";
12
+ return BY_CODE.get(countryCode)?.countryName ?? countryCode;
13
+ }
14
+ function regionName(countryCode, region) {
15
+ if (!region) return "";
16
+ const regions = regionsForCountry(countryCode);
17
+ const suffix = region.startsWith(`${countryCode}-`) ? region.slice(countryCode.length + 1) : region;
18
+ const byCode = regions.find((r) => r.shortCode && r.shortCode === suffix);
19
+ if (byCode) return byCode.name;
20
+ const byName = regions.find((r) => r.name === region);
21
+ return byName ? byName.name : region;
22
+ }
23
+ export {
24
+ COUNTRIES,
25
+ countryName,
26
+ regionCode,
27
+ regionName,
28
+ regionsForCountry
29
+ };