@byline/ui 1.7.6 → 1.8.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 (101) hide show
  1. package/dist/components/accordion/accordion_module.css +2 -2
  2. package/dist/components/avatar/avatar_module.css +2 -2
  3. package/dist/components/badge/badge_module.css +2 -2
  4. package/dist/components/button/button-group_module.css +2 -2
  5. package/dist/components/button/button_module.css +2 -2
  6. package/dist/components/button/combo-button_module.css +2 -2
  7. package/dist/components/button/control-buttons_module.css +2 -2
  8. package/dist/components/button/copy-button_module.css +2 -2
  9. package/dist/components/card/card_module.css +2 -2
  10. package/dist/components/chips/chip_module.css +2 -2
  11. package/dist/components/container/container_module.css +2 -2
  12. package/dist/components/dropdown/dropdown_module.css +2 -2
  13. package/dist/components/hamburger/hamburger_module.css +2 -2
  14. package/dist/components/inputs/autocomplete_module.css +2 -2
  15. package/dist/components/inputs/calendar_module.css +2 -2
  16. package/dist/components/inputs/checkbox-group_module.css +2 -2
  17. package/dist/components/inputs/checkbox_module.css +2 -2
  18. package/dist/components/inputs/error-text_module.css +2 -2
  19. package/dist/components/inputs/help-text_module.css +2 -2
  20. package/dist/components/inputs/input-adornment_module.css +2 -2
  21. package/dist/components/inputs/input_module.css +2 -2
  22. package/dist/components/inputs/label_module.css +2 -2
  23. package/dist/components/inputs/radio-group_module.css +2 -2
  24. package/dist/components/inputs/select_module.css +2 -2
  25. package/dist/components/inputs/text-area_module.css +2 -2
  26. package/dist/components/notifications/alert_module.css +2 -2
  27. package/dist/components/notifications/toast_module.css +2 -2
  28. package/dist/components/pager/pagination_module.css +2 -2
  29. package/dist/components/scroll-area/scroll-area_module.css +2 -2
  30. package/dist/components/scroll-to-top/scroll-to-top_module.css +2 -2
  31. package/dist/components/section/section_module.css +2 -2
  32. package/dist/components/shimmer/shimmer_module.css +2 -2
  33. package/dist/components/table/table_module.css +2 -2
  34. package/dist/components/tabs/tabs_module.css +2 -2
  35. package/dist/components/tooltip/tooltip_module.css +2 -2
  36. package/dist/forms/form-renderer.js +1 -0
  37. package/dist/forms/path-widget.d.ts +10 -1
  38. package/dist/forms/path-widget.js +9 -4
  39. package/dist/icons/icons_module.css +2 -2
  40. package/dist/loaders/ellipses_module.css +2 -2
  41. package/dist/loaders/ring_module.css +2 -2
  42. package/dist/loaders/spinner_module.css +2 -2
  43. package/dist/styles/reset.css +1 -1
  44. package/dist/styles/styles.css +2 -2
  45. package/dist/styles/typography.css +3 -1
  46. package/dist/widgets/datepicker/datepicker_module.css +2 -2
  47. package/dist/widgets/drawer/drawer_module.css +2 -2
  48. package/dist/widgets/image-lightbox/image-lightbox_module.css +2 -2
  49. package/dist/widgets/modal/modal_module.css +2 -2
  50. package/dist/widgets/timeline/timeline_module.css +2 -2
  51. package/package.json +4 -4
  52. package/src/components/accordion/accordion.module.css +2 -2
  53. package/src/components/avatar/avatar.module.css +2 -2
  54. package/src/components/badge/badge.module.css +2 -2
  55. package/src/components/button/button-group.module.css +2 -2
  56. package/src/components/button/button.module.css +2 -2
  57. package/src/components/button/combo-button.module.css +2 -2
  58. package/src/components/button/control-buttons.module.css +2 -2
  59. package/src/components/button/copy-button.module.css +2 -2
  60. package/src/components/card/card.module.css +2 -2
  61. package/src/components/chips/chip.module.css +2 -2
  62. package/src/components/container/container.module.css +2 -2
  63. package/src/components/dropdown/dropdown.module.css +2 -2
  64. package/src/components/hamburger/hamburger.module.css +2 -2
  65. package/src/components/inputs/autocomplete.module.css +2 -2
  66. package/src/components/inputs/calendar.module.css +2 -2
  67. package/src/components/inputs/checkbox-group.module.css +2 -2
  68. package/src/components/inputs/checkbox.module.css +2 -2
  69. package/src/components/inputs/error-text.module.css +2 -2
  70. package/src/components/inputs/help-text.module.css +2 -2
  71. package/src/components/inputs/input-adornment.module.css +2 -2
  72. package/src/components/inputs/input.module.css +2 -2
  73. package/src/components/inputs/label.module.css +2 -2
  74. package/src/components/inputs/radio-group.module.css +2 -2
  75. package/src/components/inputs/select.module.css +2 -2
  76. package/src/components/inputs/text-area.module.css +2 -2
  77. package/src/components/notifications/alert.module.css +2 -2
  78. package/src/components/notifications/toast.module.css +2 -2
  79. package/src/components/pager/pagination.module.css +2 -2
  80. package/src/components/scroll-area/scroll-area.module.css +2 -2
  81. package/src/components/scroll-to-top/scroll-to-top.module.css +2 -2
  82. package/src/components/section/section.module.css +2 -2
  83. package/src/components/shimmer/shimmer.module.css +2 -2
  84. package/src/components/table/table.module.css +2 -2
  85. package/src/components/tabs/tabs.module.css +2 -2
  86. package/src/components/tooltip/tooltip.module.css +2 -2
  87. package/src/forms/form-renderer.tsx +1 -0
  88. package/src/forms/path-widget.tsx +43 -7
  89. package/src/icons/icons.module.css +2 -2
  90. package/src/loaders/ellipses.module.css +2 -2
  91. package/src/loaders/ring.module.css +2 -2
  92. package/src/loaders/spinner.module.css +2 -2
  93. package/src/styles/components/hamburger.css +2 -2
  94. package/src/styles/reset.css +2 -2
  95. package/src/styles/styles.css +2 -2
  96. package/src/styles/typography.css +2 -2
  97. package/src/widgets/datepicker/datepicker.module.css +2 -2
  98. package/src/widgets/drawer/drawer.module.css +2 -2
  99. package/src/widgets/image-lightbox/image-lightbox.module.css +2 -2
  100. package/src/widgets/modal/modal.module.css +2 -2
  101. package/src/widgets/timeline/timeline.module.css +2 -2
@@ -1,4 +1,4 @@
1
- @layer base, byline-base, theme, byline-theme, byline-functional, components;
1
+ @layer base, byline-base, theme, byline-theme, byline-functional, byline-typography, components;
2
2
 
3
3
  @layer byline-components {
4
4
  :is(.container-u5_VUp, .infonomic-datepicker-container) {
@@ -186,5 +186,5 @@
186
186
  }
187
187
  }
188
188
 
189
- @layer utilities, byline-utilities, byline-typography;
189
+ @layer utilities, byline-utilities;
190
190
 
@@ -1,4 +1,4 @@
1
- @layer base, byline-base, theme, byline-theme, byline-functional, components;
1
+ @layer base, byline-base, theme, byline-theme, byline-functional, byline-typography, components;
2
2
 
3
3
  @layer byline-components {
4
4
  :is(.backdrop-Ga1s55, .infonomic-drawer-backdrop) {
@@ -127,5 +127,5 @@
127
127
  }
128
128
  }
129
129
 
130
- @layer utilities, byline-utilities, byline-typography;
130
+ @layer utilities, byline-utilities;
131
131
 
@@ -1,4 +1,4 @@
1
- @layer base, byline-base, theme, byline-theme, byline-functional, components;
1
+ @layer base, byline-base, theme, byline-theme, byline-functional, byline-typography, components;
2
2
 
3
3
  @layer byline-components {
4
4
  .container-E7tMnX {
@@ -80,5 +80,5 @@
80
80
  }
81
81
  }
82
82
 
83
- @layer utilities, byline-utilities, byline-typography;
83
+ @layer utilities, byline-utilities;
84
84
 
@@ -1,4 +1,4 @@
1
- @layer base, byline-base, theme, byline-theme, byline-functional, components;
1
+ @layer base, byline-base, theme, byline-theme, byline-functional, byline-typography, components;
2
2
 
3
3
  @layer byline-components {
4
4
  :is(.backdrop-BgKon2, .infonomic-modal-backdrop) {
@@ -116,5 +116,5 @@
116
116
  }
117
117
  }
118
118
 
119
- @layer utilities, byline-utilities, byline-typography;
119
+ @layer utilities, byline-utilities;
120
120
 
@@ -1,4 +1,4 @@
1
- @layer base, byline-base, theme, byline-theme, byline-functional, components;
1
+ @layer base, byline-base, theme, byline-theme, byline-functional, byline-typography, components;
2
2
 
3
3
  @layer byline-components {
4
4
  :is(.timeline-qJOU85, .infonomic-timeline) {
@@ -81,5 +81,5 @@
81
81
  }
82
82
  }
83
83
 
84
- @layer utilities, byline-utilities, byline-typography;
84
+ @layer utilities, byline-utilities;
85
85
 
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "private": false,
4
4
  "type": "module",
5
5
  "license": "MPL-2.0",
6
- "version": "1.7.6",
6
+ "version": "1.8.0",
7
7
  "engines": {
8
8
  "node": ">=20.9.0"
9
9
  },
@@ -65,9 +65,9 @@
65
65
  "react-diff-viewer-continued": "^4.2.2",
66
66
  "zod": "^4.4.2",
67
67
  "zod-form-data": "^3.0.1",
68
- "@byline/core": "1.7.6",
69
- "@byline/admin": "1.7.6",
70
- "@byline/client": "1.7.6"
68
+ "@byline/client": "1.8.0",
69
+ "@byline/admin": "1.8.0",
70
+ "@byline/core": "1.8.0"
71
71
  },
72
72
  "peerDependencies": {
73
73
  "react": "^19.0.0",
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
  @layer byline-components {
5
5
  .item,
6
6
  :global(.infonomic-accordion-item) {
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  /* relative inline-flex h-10 w-10 rounded-full */
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .badge,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
  @layer byline-components {
5
5
  .button-group,
6
6
  :global(.infonomic-button-group) {
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .button,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
  @layer byline-components {
5
5
  .combo-button-wrapper,
6
6
  :global(.infonomic-combo-button-wrapper) {
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
  @layer byline-components {
5
5
  .stop-button,
6
6
  .play-button,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .copy-button-container,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .card,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .chip,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .container,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .dropdown-content,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .hamburger,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  /* ── Wrapper ── */
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .day-picker {
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  :global(.infonomic-checkbox-group),
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .container,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .text,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .text,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .adornment,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .input-wrapper,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .label,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  /* 'border-collapse w-full text-sm text-left text-gray-700 dark:text-gray-400 m-0', */
6
6
  @layer byline-components {
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .positioner,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .text-area,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .alert,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  /* ============================================
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .pagination-root,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .root,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
  @layer byline-components {
5
5
  .scroll-to-top,
6
6
  :global(.infonomic-scroll-to-top) {
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .section,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  /* 'border-collapse w-full text-sm text-left text-gray-700 dark:text-gray-400 m-0', */
6
6
  @layer byline-components {
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  /* 'border-collapse w-full text-sm text-left text-gray-700 dark:text-gray-400 m-0', */
6
6
  @layer byline-components {
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .tabs-root,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .tooltip,
@@ -721,6 +721,7 @@ const FormContent = ({
721
721
  useAsPath={useAsPath}
722
722
  collectionPath={collectionPath ?? ''}
723
723
  defaultLocale={defaultLocale}
724
+ activeLocale={contentLocale}
724
725
  mode={mode}
725
726
  />
726
727
  )}
@@ -35,6 +35,15 @@ export interface PathWidgetProps {
35
35
  collectionPath: string
36
36
  /** Default content locale, forwarded to the slugifier as context. */
37
37
  defaultLocale: string
38
+ /**
39
+ * The locale currently being edited in the form. When this differs
40
+ * from `defaultLocale` (i.e. the editor is editing a translation),
41
+ * the widget renders read-only — phase 1 paths are default-locale
42
+ * territory, and the lifecycle drops translation-locale path changes
43
+ * with a warn. Locking the input prevents the warn path being hit
44
+ * through the admin form and gives editors a clear cue.
45
+ */
46
+ activeLocale: string
38
47
  /** `'create'` shows the live derived preview as placeholder text. */
39
48
  mode: 'create' | 'edit'
40
49
  }
@@ -53,11 +62,23 @@ export interface PathWidgetProps {
53
62
  * Stable override handles: `.byline-form-path`, `.byline-form-path-header`,
54
63
  * `.byline-form-path-regenerate`.
55
64
  */
56
- export const PathWidget = ({ useAsPath, collectionPath, defaultLocale, mode }: PathWidgetProps) => {
65
+ export const PathWidget = ({
66
+ useAsPath,
67
+ collectionPath,
68
+ defaultLocale,
69
+ activeLocale,
70
+ mode,
71
+ }: PathWidgetProps) => {
57
72
  const { setSystemPath } = useFormContext()
58
73
  const systemPath = useSystemPath()
59
74
  const sourceValue = useFieldValue<unknown>(useAsPath ?? '')
60
75
 
76
+ // Phase 1: paths are written/edited only under the default content
77
+ // locale. When editing a translation, the widget locks down — the
78
+ // input is read-only, the Regenerate action is suppressed, and a
79
+ // helpText line explains why.
80
+ const isReadOnly = activeLocale !== defaultLocale
81
+
61
82
  // Live preview — what the server would derive from the current source
62
83
  // field value if no override were set. Used as placeholder in create
63
84
  // mode and as the target of the "Regenerate" action.
@@ -93,26 +114,40 @@ export const PathWidget = ({ useAsPath, collectionPath, defaultLocale, mode }: P
93
114
  return slugify(inputValue, { locale: defaultLocale, collectionPath })
94
115
  }, [inputValue, defaultLocale, collectionPath])
95
116
 
96
- const hint =
117
+ const validationHint =
97
118
  inputValue.length > 0 && formatted !== inputValue ? `Suggested: "${formatted}"` : undefined
98
119
 
120
+ // When read-only, replace the live validation hint with a fixed
121
+ // explanatory line so editors understand why the field is locked.
122
+ const readOnlyHint = isReadOnly
123
+ ? `Path is set in the default locale ("${defaultLocale}") and applies across translations.`
124
+ : undefined
125
+
126
+ const hint = readOnlyHint ?? validationHint
127
+
99
128
  const placeholder =
100
- mode === 'create' && livePreview.length > 0 ? `Will be saved as "${livePreview}"` : undefined
129
+ !isReadOnly && mode === 'create' && livePreview.length > 0
130
+ ? `Will be saved as "${livePreview}"`
131
+ : undefined
101
132
 
102
133
  // Screen-reader description. The input's base purpose ("System-managed
103
134
  // URL path") plus whichever of the visible hints (placeholder preview
104
- // in create mode, "Suggested" validation hint) currently applies. The
105
- // visible helpText/placeholder cover sighted users; this element makes
106
- // the same information addressable via aria-describedby for AT.
135
+ // in create mode, "Suggested" validation hint, or read-only explainer)
136
+ // currently applies. The visible helpText/placeholder cover sighted
137
+ // users; this element makes the same information addressable via
138
+ // aria-describedby for AT.
107
139
  const srDescription = ['System-managed URL path for this document.', placeholder, hint]
108
140
  .filter(Boolean)
109
141
  .join(' ')
110
142
 
143
+ const showRegenerate =
144
+ !isReadOnly && useAsPath && livePreview.length > 0 && livePreview !== systemPath
145
+
111
146
  return (
112
147
  <div className="byline-form-path">
113
148
  <div className={cx('byline-form-path-header', styles.header)}>
114
149
  <Label id="system-path-label" htmlFor="system-path" label="Path" />
115
- {useAsPath && livePreview.length > 0 && livePreview !== systemPath && (
150
+ {showRegenerate && (
116
151
  <button
117
152
  type="button"
118
153
  onClick={handleRegenerate}
@@ -130,6 +165,7 @@ export const PathWidget = ({ useAsPath, collectionPath, defaultLocale, mode }: P
130
165
  placeholder={placeholder}
131
166
  onChange={(e) => handleChange(e.target.value)}
132
167
  helpText={hint}
168
+ readOnly={isReadOnly}
133
169
  aria-describedby="system-path-description"
134
170
  />
135
171
  <span
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
  @layer byline-components {
5
5
  .element-root {
6
6
  width: 1.375rem;
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .loader-ellipsis,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .loader-ring,
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @layer byline-components {
6
6
  .loader-spinner,
@@ -1,8 +1,8 @@
1
1
  /* No longer used in our actual hamburger React and Astro components
2
2
  but left here as a reference. */
3
3
  @layer base, byline-base, theme, byline-theme,
4
- byline-functional, components, byline-components,
5
- utilities, byline-utilities, byline-typography;
4
+ byline-functional, byline-typography, components, byline-components,
5
+ utilities, byline-utilities;
6
6
 
7
7
  @layer byline-components {
8
8
  .component--hamburger {
@@ -23,8 +23,8 @@
23
23
  * Hosts using Tailwind don't need to declare layer order themselves.
24
24
  */
25
25
  @layer base, byline-base, theme, byline-theme,
26
- byline-functional, components, byline-components,
27
- utilities, byline-utilities, byline-typography;
26
+ byline-functional, byline-typography, components, byline-components,
27
+ utilities, byline-utilities;
28
28
 
29
29
  @layer byline-base {
30
30
  @scope (.byline-ui) {
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @import "./base/base.css";
6
6
  @import "./functional/functional.css";
@@ -1,6 +1,6 @@
1
1
  @layer base, byline-base, theme, byline-theme,
2
- byline-functional, components, byline-components,
3
- utilities, byline-utilities, byline-typography;
2
+ byline-functional, byline-typography, components, byline-components,
3
+ utilities, byline-utilities;
4
4
 
5
5
  @import "./typography/fonts.css";
6
6
  @import "./typography/prose.css";