@viax.io/uxm 4.39.0 → 4.40.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 (122) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +33 -44
  4. package/dist/hooks/index.cjs.map +1 -1
  5. package/dist/hooks/index.d.ts +1 -1
  6. package/dist/hooks/index.js.map +1 -1
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.ts +3 -3
  9. package/dist/index.js.map +1 -1
  10. package/dist/previews/index.cjs.map +1 -1
  11. package/dist/previews/index.d.ts +2 -2
  12. package/dist/previews/index.js.map +1 -1
  13. package/dist/studio/index.cjs.map +1 -1
  14. package/dist/studio/index.d.ts +2 -2
  15. package/dist/studio/index.js.map +1 -1
  16. package/dist/studio/lib/registry/buttons.cjs +2 -2
  17. package/dist/studio/lib/registry/buttons.cjs.map +1 -1
  18. package/dist/studio/lib/registry/buttons.js +2 -2
  19. package/dist/studio/lib/registry/buttons.js.map +1 -1
  20. package/dist/studio/lib/registry/composite/sidebar-nav-trigger.cjs +1 -1
  21. package/dist/studio/lib/registry/composite/sidebar-nav-trigger.cjs.map +1 -1
  22. package/dist/studio/lib/registry/composite/sidebar-nav-trigger.js +1 -1
  23. package/dist/studio/lib/registry/composite/sidebar-nav-trigger.js.map +1 -1
  24. package/dist/studio/lib/registry/diagram.cjs +1 -1
  25. package/dist/studio/lib/registry/diagram.cjs.map +1 -1
  26. package/dist/studio/lib/registry/diagram.js +1 -1
  27. package/dist/studio/lib/registry/diagram.js.map +1 -1
  28. package/dist/studio/lib/registry/display.cjs +2 -2
  29. package/dist/studio/lib/registry/display.cjs.map +1 -1
  30. package/dist/studio/lib/registry/display.js +2 -2
  31. package/dist/studio/lib/registry/display.js.map +1 -1
  32. package/dist/studio/lib/registry/feedback.cjs +3 -3
  33. package/dist/studio/lib/registry/feedback.cjs.map +1 -1
  34. package/dist/studio/lib/registry/feedback.js +3 -3
  35. package/dist/studio/lib/registry/feedback.js.map +1 -1
  36. package/dist/studio/lib/registry/inputs/color-input.cjs +1 -1
  37. package/dist/studio/lib/registry/inputs/color-input.cjs.map +1 -1
  38. package/dist/studio/lib/registry/inputs/color-input.js +1 -1
  39. package/dist/studio/lib/registry/inputs/color-input.js.map +1 -1
  40. package/dist/studio/lib/registry/inputs/currency-input.cjs +1 -1
  41. package/dist/studio/lib/registry/inputs/currency-input.cjs.map +1 -1
  42. package/dist/studio/lib/registry/inputs/currency-input.js +1 -1
  43. package/dist/studio/lib/registry/inputs/currency-input.js.map +1 -1
  44. package/dist/studio/lib/registry/inputs/editable-cell.cjs +1 -1
  45. package/dist/studio/lib/registry/inputs/editable-cell.cjs.map +1 -1
  46. package/dist/studio/lib/registry/inputs/editable-cell.js +1 -1
  47. package/dist/studio/lib/registry/inputs/editable-cell.js.map +1 -1
  48. package/dist/studio/lib/registry/inputs/file-upload.cjs +1 -1
  49. package/dist/studio/lib/registry/inputs/file-upload.cjs.map +1 -1
  50. package/dist/studio/lib/registry/inputs/file-upload.js +1 -1
  51. package/dist/studio/lib/registry/inputs/file-upload.js.map +1 -1
  52. package/dist/studio/lib/registry/inputs/input-text.cjs +1 -1
  53. package/dist/studio/lib/registry/inputs/input-text.cjs.map +1 -1
  54. package/dist/studio/lib/registry/inputs/input-text.js +1 -1
  55. package/dist/studio/lib/registry/inputs/input-text.js.map +1 -1
  56. package/dist/studio/lib/registry/inputs/listbox.cjs +1 -1
  57. package/dist/studio/lib/registry/inputs/listbox.cjs.map +1 -1
  58. package/dist/studio/lib/registry/inputs/listbox.js +1 -1
  59. package/dist/studio/lib/registry/inputs/listbox.js.map +1 -1
  60. package/dist/studio/lib/registry/inputs/menu.cjs +1 -1
  61. package/dist/studio/lib/registry/inputs/menu.cjs.map +1 -1
  62. package/dist/studio/lib/registry/inputs/menu.js +1 -1
  63. package/dist/studio/lib/registry/inputs/menu.js.map +1 -1
  64. package/dist/studio/lib/registry/inputs/number-input.cjs +1 -1
  65. package/dist/studio/lib/registry/inputs/number-input.cjs.map +1 -1
  66. package/dist/studio/lib/registry/inputs/number-input.js +1 -1
  67. package/dist/studio/lib/registry/inputs/number-input.js.map +1 -1
  68. package/dist/studio/lib/registry/inputs/password-input.cjs +1 -1
  69. package/dist/studio/lib/registry/inputs/password-input.cjs.map +1 -1
  70. package/dist/studio/lib/registry/inputs/password-input.js +1 -1
  71. package/dist/studio/lib/registry/inputs/password-input.js.map +1 -1
  72. package/dist/studio/lib/registry/inputs/phone-input.cjs +1 -1
  73. package/dist/studio/lib/registry/inputs/phone-input.cjs.map +1 -1
  74. package/dist/studio/lib/registry/inputs/phone-input.js +1 -1
  75. package/dist/studio/lib/registry/inputs/phone-input.js.map +1 -1
  76. package/dist/studio/lib/registry/inputs/slider.cjs +1 -1
  77. package/dist/studio/lib/registry/inputs/slider.cjs.map +1 -1
  78. package/dist/studio/lib/registry/inputs/slider.js +1 -1
  79. package/dist/studio/lib/registry/inputs/slider.js.map +1 -1
  80. package/dist/studio/lib/registry/inputs/time-input.cjs +1 -1
  81. package/dist/studio/lib/registry/inputs/time-input.cjs.map +1 -1
  82. package/dist/studio/lib/registry/inputs/time-input.js +1 -1
  83. package/dist/studio/lib/registry/inputs/time-input.js.map +1 -1
  84. package/dist/studio/lib/types.cjs.map +1 -1
  85. package/dist/studio/persistence/generate-css.cjs.map +1 -1
  86. package/dist/studio/persistence/generate-css.js.map +1 -1
  87. package/dist/ui/editable-cell/editable-cell-date.cjs +226 -0
  88. package/dist/ui/editable-cell/editable-cell-date.cjs.map +1 -0
  89. package/dist/ui/editable-cell/editable-cell-date.d.ts +4 -0
  90. package/dist/ui/editable-cell/editable-cell-date.d.ts.map +1 -0
  91. package/dist/ui/editable-cell/editable-cell-date.js +202 -0
  92. package/dist/ui/editable-cell/editable-cell-date.js.map +1 -0
  93. package/dist/ui/editable-cell/editable-cell-select.cjs +297 -0
  94. package/dist/ui/editable-cell/editable-cell-select.cjs.map +1 -0
  95. package/dist/ui/editable-cell/editable-cell-select.d.ts +4 -0
  96. package/dist/ui/editable-cell/editable-cell-select.d.ts.map +1 -0
  97. package/dist/ui/editable-cell/editable-cell-select.js +273 -0
  98. package/dist/ui/editable-cell/editable-cell-select.js.map +1 -0
  99. package/dist/ui/editable-cell/editable-cell-text.cjs +175 -0
  100. package/dist/ui/editable-cell/editable-cell-text.cjs.map +1 -0
  101. package/dist/ui/editable-cell/editable-cell-text.d.ts +4 -0
  102. package/dist/ui/editable-cell/editable-cell-text.d.ts.map +1 -0
  103. package/dist/ui/editable-cell/editable-cell-text.js +151 -0
  104. package/dist/ui/editable-cell/editable-cell-text.js.map +1 -0
  105. package/dist/ui/editable-cell/editable-cell.cjs +27 -705
  106. package/dist/ui/editable-cell/editable-cell.cjs.map +1 -1
  107. package/dist/ui/editable-cell/editable-cell.d.ts +1 -1
  108. package/dist/ui/editable-cell/editable-cell.d.ts.map +1 -1
  109. package/dist/ui/editable-cell/editable-cell.js +28 -706
  110. package/dist/ui/editable-cell/editable-cell.js.map +1 -1
  111. package/dist/ui/editable-cell/use-editable-cell.cjs +284 -0
  112. package/dist/ui/editable-cell/use-editable-cell.cjs.map +1 -0
  113. package/dist/ui/editable-cell/use-editable-cell.d.ts +51 -0
  114. package/dist/ui/editable-cell/use-editable-cell.d.ts.map +1 -0
  115. package/dist/ui/editable-cell/use-editable-cell.js +260 -0
  116. package/dist/ui/editable-cell/use-editable-cell.js.map +1 -0
  117. package/dist/ui/page-shell/page-shell.cjs.map +1 -1
  118. package/dist/ui/page-shell/page-shell.d.ts +1 -1
  119. package/dist/ui/page-shell/page-shell.d.ts.map +1 -1
  120. package/dist/ui/page-shell/page-shell.js.map +1 -1
  121. package/dist/ui/styles.css +1 -1
  122. package/package.json +5 -5
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ui/editable-cell/editable-cell-text.tsx"],"sourcesContent":["import { cn } from '@/helpers';\n\nimport { Banner } from '../banner';\nimport { HoverTooltip } from '../hover-tooltip';\nimport { Icon } from '../icon';\nimport { maskNumeric } from '../number-input';\nimport { Popover } from '../popover';\n\nimport type { EditableCellViewProps } from './use-editable-cell';\n\n/** `type=\"text\"` / `\"number\"` — a button in display mode, an input in edit mode. */\nexport function EditableCellTextView({ props, cell }: EditableCellViewProps) {\n const {\n value,\n disabled,\n placeholder,\n className,\n style,\n 'aria-label': ariaLabel,\n type,\n clearable,\n align,\n size,\n clearValueLabel,\n } = props;\n const {\n setIsEditing,\n draft,\n setDraft,\n submitting,\n error,\n setError,\n inputRef,\n wrapRef,\n handleCommit,\n handleClearDraft,\n handleKeyDown,\n editing,\n isEmpty,\n display,\n titleText,\n shownError,\n } = cell;\n\n // Text / number types\n if (!editing) {\n return (\n <button\n type=\"button\"\n className={cn(\n 'uxm-editable-cell',\n `uxm-editable-cell--${size}`,\n `uxm-editable-cell--align-${align}`,\n disabled && 'uxm-editable-cell--disabled',\n isEmpty && 'uxm-editable-cell--empty',\n className,\n )}\n style={style}\n onClick={() => {\n if (!disabled) setIsEditing(true);\n }}\n disabled={disabled}\n aria-label={ariaLabel ?? `Edit ${String(value ?? '')}`}\n >\n {/* The value needs its own element for ellipsis — text-overflow\n doesn't apply to a flex container's anonymous text. Values wider\n than the cell's max-width truncate instead of growing the column\n unboundedly; the hidden text surfaces in a hover tooltip (only\n when actually clipped) and stays editable by entering edit mode. */}\n <HoverTooltip content={titleText} disabled={disabled}>\n <span className=\"uxm-editable-cell__value\">{display}</span>\n </HoverTooltip>\n {/* Hover affordance — a pencil glyph fades in on hover / keyboard\n focus. The background tint alone can't signal editability inside\n a DataTable, where the row's own hover tint coincides with it.\n Absolute overlay in a reserved gutter (see editable-cell.scss) so\n it never shifts or collides with the value. Hidden when disabled. */}\n {!disabled && (\n <span className=\"uxm-editable-cell__pencil\" aria-hidden=\"true\">\n <Icon glyph=\"pencil\" size={16} strokeWidth={1.75} />\n </span>\n )}\n </button>\n );\n }\n\n return (\n <span\n ref={wrapRef}\n className={cn(\n 'uxm-editable-cell uxm-editable-cell--editing',\n `uxm-editable-cell--${size}`,\n `uxm-editable-cell--align-${align}`,\n clearable && 'uxm-editable-cell--clearable',\n shownError?.severity === 'error' && 'uxm-editable-cell--error',\n shownError?.severity === 'warning' && 'uxm-editable-cell--warning',\n className,\n )}\n style={style}\n >\n {/* Invisible width-keepers, stacked in the same grid cell as the\n input. The display content ghost preserves the exact min-content\n width this cell contributed before entering edit mode — without\n it, editing the column's WIDEST row would drop its contribution\n from auto table-column sizing and the column would visibly\n shrink. The draft ghost grows the cell naturally as the user\n types past the original width. */}\n <span className=\"uxm-editable-cell__ghost\" aria-hidden=\"true\">\n {display}\n </span>\n <span className=\"uxm-editable-cell__ghost\" aria-hidden=\"true\">\n {draft}\n </span>\n <input\n ref={inputRef}\n // `type=\"text\"` + `inputMode` — the input-family convention (see\n // NumberInput): native number inputs ship browser spinner UI, trigger\n // autofill, and disagree across browsers on accepted characters.\n // `maskNumeric` replaces the native filtering per keystroke (same as\n // the date editor's `maskDate`); without it, `Number()`'s loose\n // coercion would let e.g. \"0x1A\" commit as 26.\n type=\"text\"\n inputMode={type === 'number' ? 'decimal' : undefined}\n autoComplete=\"off\"\n className=\"uxm-editable-cell__input\"\n value={draft}\n onChange={(e) => {\n setDraft(\n type === 'number'\n ? maskNumeric(e.target.value, true, true, Number.POSITIVE_INFINITY)\n : e.target.value,\n );\n // Clear stale validation error as the user types — they'll\n // see a new one on the next commit attempt if it still fails.\n if (error) setError(null);\n }}\n onBlur={() => {\n // Don't double-commit while a previous commit is still pending.\n if (!submitting) handleCommit();\n }}\n onKeyDown={handleKeyDown}\n disabled={submitting}\n placeholder={placeholder}\n aria-invalid={Boolean(shownError)}\n aria-describedby={shownError ? 'uxm-editable-cell__error' : undefined}\n />\n {/* One-click ✕ (mirrors TextInput/NumberInput): empties the draft and\n keeps focus; hidden while the draft is already empty. The gutter is\n reserved via `--clearable` so its appearance never shifts text. */}\n {clearable && !submitting && draft !== '' && (\n <button\n type=\"button\"\n className=\"uxm-editable-cell__clear\"\n // Out of the tab order — see the date branch's note: the blur Tab\n // fires commits and unmounts this button, so leaving it focusable\n // would strand focus on a removed node instead of advancing to the\n // next cell.\n tabIndex={-1}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleClearDraft}\n aria-label={clearValueLabel}\n >\n <Icon glyph=\"close\" size={12} />\n </button>\n )}\n {/* Problems hang under the cell in a portal'd popover so the table\n row never changes height. The popover must not manage focus —\n the input keeps it for in-place correction / retry. Escape and\n outside clicks already have edit-mode semantics (cancel / blur-\n commit), so the popover's own close triggers are disabled; it\n opens and closes purely with the error state. */}\n <Popover\n open={Boolean(shownError)}\n onOpenChange={(next) => {\n if (!next) setError(null);\n }}\n anchor={wrapRef}\n placement=\"bottom-start\"\n closeOnEscape={false}\n closeOnOutsideClick={false}\n restoreFocus={false}\n role=\"presentation\"\n >\n {shownError && (\n <Banner\n variant={shownError.severity}\n id=\"uxm-editable-cell__error\"\n className=\"uxm-editable-cell__error-banner\"\n >\n {shownError.message}\n </Banner>\n )}\n </Popover>\n </span>\n );\n}\n"],"mappings":"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","names":[]}