@radix-ng/primitives 1.0.0-beta.0 → 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  2. package/fesm2022/radix-ng-primitives-calendar.mjs +95 -83
  3. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  4. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  5. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  6. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  7. package/fesm2022/radix-ng-primitives-core.mjs +114 -4
  8. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  9. package/fesm2022/radix-ng-primitives-cropper.mjs +287 -308
  10. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  11. package/fesm2022/radix-ng-primitives-date-field.mjs +55 -15
  12. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  13. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-drawer.mjs +6 -105
  15. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-editable.mjs +304 -23
  17. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
  19. package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-menu.mjs +409 -1
  21. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  22. package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -1
  23. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  24. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  25. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  26. package/fesm2022/radix-ng-primitives-popper.mjs +21 -4
  27. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
  29. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  31. package/fesm2022/radix-ng-primitives-scroll-area.mjs +923 -0
  32. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -0
  33. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  34. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  35. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  36. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  37. package/fesm2022/radix-ng-primitives-tabs.mjs +11 -2
  38. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  39. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  40. package/fesm2022/radix-ng-primitives-toast.mjs +839 -0
  41. package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -0
  42. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  43. package/fesm2022/radix-ng-primitives-tooltip.mjs +9 -1
  44. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  45. package/package.json +10 -2
  46. package/types/radix-ng-primitives-accordion.d.ts +3 -2
  47. package/types/radix-ng-primitives-calendar.d.ts +38 -18
  48. package/types/radix-ng-primitives-checkbox.d.ts +5 -5
  49. package/types/radix-ng-primitives-collapsible.d.ts +2 -1
  50. package/types/radix-ng-primitives-context-menu.d.ts +3 -2
  51. package/types/radix-ng-primitives-core.d.ts +42 -3
  52. package/types/radix-ng-primitives-cropper.d.ts +89 -56
  53. package/types/radix-ng-primitives-date-field.d.ts +11 -5
  54. package/types/radix-ng-primitives-dialog.d.ts +2 -1
  55. package/types/radix-ng-primitives-drawer.d.ts +5 -27
  56. package/types/radix-ng-primitives-editable.d.ts +90 -13
  57. package/types/radix-ng-primitives-field.d.ts +3 -2
  58. package/types/radix-ng-primitives-fieldset.d.ts +3 -2
  59. package/types/radix-ng-primitives-focus-scope.d.ts +2 -1
  60. package/types/radix-ng-primitives-menu.d.ts +16 -4
  61. package/types/radix-ng-primitives-menubar.d.ts +2 -1
  62. package/types/radix-ng-primitives-meter.d.ts +3 -2
  63. package/types/radix-ng-primitives-navigation-menu.d.ts +1 -1
  64. package/types/radix-ng-primitives-number-field.d.ts +6 -6
  65. package/types/radix-ng-primitives-popover.d.ts +2 -1
  66. package/types/radix-ng-primitives-popper.d.ts +19 -2
  67. package/types/radix-ng-primitives-preview-card.d.ts +1 -1
  68. package/types/radix-ng-primitives-progress.d.ts +3 -2
  69. package/types/radix-ng-primitives-roving-focus.d.ts +4 -3
  70. package/types/radix-ng-primitives-scroll-area.d.ts +253 -0
  71. package/types/radix-ng-primitives-select.d.ts +6 -6
  72. package/types/radix-ng-primitives-slider.d.ts +1 -1
  73. package/types/radix-ng-primitives-switch.d.ts +1 -1
  74. package/types/radix-ng-primitives-tabs.d.ts +1 -1
  75. package/types/radix-ng-primitives-toast.d.ts +378 -0
  76. package/types/radix-ng-primitives-toggle-group.d.ts +2 -1
  77. package/types/radix-ng-primitives-toolbar.d.ts +3 -2
  78. package/types/radix-ng-primitives-tooltip.d.ts +3 -2
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, model, input, booleanAttribute, numberAttribute, computed, signal, afterNextRender, Directive } from '@angular/core';
3
- import { createContext, watch } from '@radix-ng/primitives/core';
2
+ import { inject, model, input, booleanAttribute, numberAttribute, output, computed, linkedSignal, signal, effect, afterRenderEffect, Directive, ElementRef, afterNextRender, NgModule } from '@angular/core';
3
+ import { createContext, watch, ENTER } from '@radix-ng/primitives/core';
4
4
  import * as i1 from '@radix-ng/primitives/dismissable-layer';
5
5
  import { RdxFocusOutside, RdxPointerDownOutside } from '@radix-ng/primitives/dismissable-layer';
6
6
 
@@ -15,16 +15,19 @@ const rootContext = () => {
15
15
  isEditing: context.isEditing,
16
16
  submitMode: context.submitMode,
17
17
  activationMode: context.activationMode,
18
- edit: context.edit,
19
- cancel: context.cancel,
20
- submit: context.submit,
18
+ edit: () => context.edit(),
19
+ cancel: () => context.cancel(),
20
+ submit: () => context.submit(),
21
21
  maxLength: context.maxLength,
22
+ required: context.required,
22
23
  startWithEditMode: context.startWithEditMode,
23
24
  isEmpty: context.isEmpty,
24
25
  readonly: context.readonly,
25
26
  autoResize: context.autoResize,
26
27
  selectOnFocus: context.selectOnFocus,
27
- inputRef: context.inputRef
28
+ inputRef: context.inputRef,
29
+ previewRef: context.previewRef,
30
+ canActivateOnFocus: () => context.canActivateOnFocus()
28
31
  };
29
32
  };
30
33
  /**
@@ -35,6 +38,8 @@ class RdxEditableRoot {
35
38
  this.focusOutside = inject(RdxFocusOutside);
36
39
  this.pointerDownOutside = inject(RdxPointerDownOutside);
37
40
  this.value = model(...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
41
+ /** Uncontrolled initial value. */
42
+ this.defaultValue = input(...(ngDevMode ? [undefined, { debugName: "defaultValue" }] : /* istanbul ignore next */ []));
38
43
  this.placeholder = input('Enter text...', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
39
44
  this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
40
45
  this.readonly = input(false, { ...(ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
@@ -48,18 +53,28 @@ class RdxEditableRoot {
48
53
  this.activationMode = input('focus', ...(ngDevMode ? [{ debugName: "activationMode" }] : /* istanbul ignore next */ []));
49
54
  this.autoResize = input(false, { ...(ngDevMode ? { debugName: "autoResize" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
50
55
  this.required = input(false, { ...(ngDevMode ? { debugName: "required" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
51
- this.isEmpty = computed(() => this.value() === '', ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
56
+ /** Emitted when the value is committed (on submit). */
57
+ this.onValueChange = output();
58
+ this.isEmpty = computed(() => {
59
+ const value = this.value();
60
+ return value === undefined || value === null || value === '';
61
+ }, ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
52
62
  this.$placeholder = computed(() => {
53
- return typeof this.placeholder() === 'string'
54
- ? { edit: this.placeholder(), preview: this.placeholder() }
55
- : this.placeholder();
63
+ const placeholder = this.placeholder();
64
+ return { edit: placeholder, preview: placeholder };
56
65
  }, ...(ngDevMode ? [{ debugName: "$placeholder" }] : /* istanbul ignore next */ []));
57
- this.isEditing = signal(false, ...(ngDevMode ? [{ debugName: "isEditing" }] : /* istanbul ignore next */ []));
58
- this.inputValue = signal(this.value(), ...(ngDevMode ? [{ debugName: "inputValue" }] : /* istanbul ignore next */ []));
66
+ /** Seeded from `startWithEditMode`; flipped imperatively by edit/submit/cancel. */
67
+ this.isEditing = linkedSignal(() => this.startWithEditMode(), ...(ngDevMode ? [{ debugName: "isEditing" }] : /* istanbul ignore next */ []));
68
+ /** Working copy of the value while editing; reseeded whenever the committed value changes. */
69
+ this.inputValue = linkedSignal(() => this.value(), ...(ngDevMode ? [{ debugName: "inputValue" }] : /* istanbul ignore next */ []));
59
70
  this.inputRef = signal(undefined, ...(ngDevMode ? [{ debugName: "inputRef" }] : /* istanbul ignore next */ []));
60
- watch([this.value], ([value]) => {
61
- if (value) {
62
- this.inputValue.set(this.value());
71
+ this.previewRef = signal(undefined, ...(ngDevMode ? [{ debugName: "previewRef" }] : /* istanbul ignore next */ []));
72
+ this.restoreFocusOnExit = false;
73
+ /** True while focus is being restored programmatically, to avoid re-entering edit mode. */
74
+ this.suppressFocusActivation = false;
75
+ effect(() => {
76
+ if (this.defaultValue() !== undefined) {
77
+ this.value.set(this.defaultValue());
63
78
  }
64
79
  });
65
80
  watch([this.isEditing], ([value]) => {
@@ -68,11 +83,24 @@ class RdxEditableRoot {
68
83
  });
69
84
  this.pointerDownOutside.pointerDownOutside.subscribe(() => this.handleDismiss());
70
85
  this.focusOutside.focusOutside.subscribe(() => this.handleDismiss());
71
- afterNextRender(() => {
72
- this.isEditing.set(this.startWithEditMode() ?? false);
73
- this.inputValue.set(this.value());
86
+ // Restore focus to the preview after leaving edit mode, once the input is hidden
87
+ // and the preview is visible again. Runs after render so the DOM reflects isEditing.
88
+ afterRenderEffect(() => {
89
+ const editing = this.isEditing();
90
+ if (!editing && this.restoreFocusOnExit) {
91
+ this.restoreFocusOnExit = false;
92
+ const preview = this.previewRef();
93
+ if (preview) {
94
+ this.suppressFocusActivation = true;
95
+ preview.focus({ preventScroll: true });
96
+ this.suppressFocusActivation = false;
97
+ }
98
+ }
74
99
  });
75
100
  }
101
+ canActivateOnFocus() {
102
+ return !this.suppressFocusActivation;
103
+ }
76
104
  handleDismiss() {
77
105
  if (this.isEditing()) {
78
106
  if (this.submitMode() === 'blur' || this.submitMode() === 'both') {
@@ -84,18 +112,23 @@ class RdxEditableRoot {
84
112
  }
85
113
  }
86
114
  submit() {
87
- this.value.set(this.inputValue());
115
+ const value = this.inputValue() ?? '';
116
+ this.value.set(value);
117
+ this.onValueChange.emit(value);
118
+ this.restoreFocusOnExit = true;
88
119
  this.isEditing.set(false);
89
120
  }
90
121
  cancel() {
122
+ this.inputValue.set(this.value());
123
+ this.restoreFocusOnExit = true;
91
124
  this.isEditing.set(false);
92
125
  }
93
126
  edit() {
94
- this.isEditing.set(true);
95
127
  this.inputValue.set(this.value());
128
+ this.isEditing.set(true);
96
129
  }
97
130
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableRoot, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
98
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxEditableRoot, isStandalone: true, selector: "[rdxEditableRoot]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, selectOnFocus: { classPropertyName: "selectOnFocus", publicName: "selectOnFocus", isSignal: true, isRequired: false, transformFunction: null }, submitMode: { classPropertyName: "submitMode", publicName: "submitMode", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, startWithEditMode: { classPropertyName: "startWithEditMode", publicName: "startWithEditMode", isSignal: true, isRequired: false, transformFunction: null }, activationMode: { classPropertyName: "activationMode", publicName: "activationMode", isSignal: true, isRequired: false, transformFunction: null }, autoResize: { classPropertyName: "autoResize", publicName: "autoResize", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "attr.data-dismissable-layer": "\"\"" } }, providers: [provideEditableRootContext(rootContext)], exportAs: ["rdxEditableRoot"], hostDirectives: [{ directive: i1.RdxFocusOutside }, { directive: i1.RdxPointerDownOutside }], ngImport: i0 }); }
131
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxEditableRoot, isStandalone: true, selector: "[rdxEditableRoot]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, selectOnFocus: { classPropertyName: "selectOnFocus", publicName: "selectOnFocus", isSignal: true, isRequired: false, transformFunction: null }, submitMode: { classPropertyName: "submitMode", publicName: "submitMode", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, startWithEditMode: { classPropertyName: "startWithEditMode", publicName: "startWithEditMode", isSignal: true, isRequired: false, transformFunction: null }, activationMode: { classPropertyName: "activationMode", publicName: "activationMode", isSignal: true, isRequired: false, transformFunction: null }, autoResize: { classPropertyName: "autoResize", publicName: "autoResize", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", onValueChange: "onValueChange" }, host: { properties: { "attr.data-dismissable-layer": "\"\"" } }, providers: [provideEditableRootContext(rootContext)], exportAs: ["rdxEditableRoot"], hostDirectives: [{ directive: i1.RdxFocusOutside }, { directive: i1.RdxPointerDownOutside }], ngImport: i0 }); }
99
132
  }
100
133
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableRoot, decorators: [{
101
134
  type: Directive,
@@ -108,11 +141,259 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
108
141
  '[attr.data-dismissable-layer]': '""'
109
142
  }
110
143
  }]
111
- }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], selectOnFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectOnFocus", required: false }] }], submitMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitMode", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], startWithEditMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "startWithEditMode", required: false }] }], activationMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "activationMode", required: false }] }], autoResize: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoResize", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }] } });
144
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], selectOnFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectOnFocus", required: false }] }], submitMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitMode", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], startWithEditMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "startWithEditMode", required: false }] }], activationMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "activationMode", required: false }] }], autoResize: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoResize", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], onValueChange: [{ type: i0.Output, args: ["onValueChange"] }] } });
145
+
146
+ class RdxEditableArea {
147
+ constructor() {
148
+ this.rootContext = injectEditableRootContext();
149
+ }
150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableArea, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
151
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxEditableArea, isStandalone: true, selector: "[rdxEditableArea]", host: { properties: { "attr.data-placeholder-shown": "rootContext.isEditing() ? undefined : \"\"", "attr.data-focus": "rootContext.isEditing() ? \"\" : undefined", "attr.data-empty": "rootContext.isEmpty() ? \"\" : undefined", "attr.data-readonly": "rootContext.readonly() ? \"\" : undefined", "attr.data-disabled": "rootContext.disabled() ? \"\" : undefined", "attr.data-auto-resize": "rootContext.autoResize() ? \"\" : undefined", "style.display": "rootContext.autoResize() ? \"inline-grid\" : undefined" } }, ngImport: i0 }); }
152
+ }
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableArea, decorators: [{
154
+ type: Directive,
155
+ args: [{
156
+ selector: '[rdxEditableArea]',
157
+ host: {
158
+ '[attr.data-placeholder-shown]': 'rootContext.isEditing() ? undefined : ""',
159
+ '[attr.data-focus]': 'rootContext.isEditing() ? "" : undefined',
160
+ '[attr.data-empty]': 'rootContext.isEmpty() ? "" : undefined',
161
+ '[attr.data-readonly]': 'rootContext.readonly() ? "" : undefined',
162
+ '[attr.data-disabled]': 'rootContext.disabled() ? "" : undefined',
163
+ '[attr.data-auto-resize]': 'rootContext.autoResize() ? "" : undefined',
164
+ // Auto-resize overlays the preview and input in a single grid cell so the area
165
+ // sizes to the larger of the two. This is the layout mechanism for the feature,
166
+ // not theming; consumers style everything else via the data-* attributes above.
167
+ '[style.display]': 'rootContext.autoResize() ? "inline-grid" : undefined'
168
+ }
169
+ }]
170
+ }] });
171
+
172
+ class RdxEditableCancelTrigger {
173
+ constructor() {
174
+ this.rootContext = injectEditableRootContext();
175
+ /** Accessible label for the trigger. Override to localize. */
176
+ this.ariaLabel = input('cancel', { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
177
+ }
178
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableCancelTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
179
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxEditableCancelTrigger, isStandalone: true, selector: "button[rdxEditableCancelTrigger]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "rootContext.cancel()" }, properties: { "attr.aria-label": "ariaLabel()", "attr.data-disabled": "rootContext.disabled() ? \"\" : undefined", "attr.disabled": "rootContext.disabled() ? \"\" : undefined", "attr.hidden": "rootContext.isEditing() ? \"\" : undefined" } }, ngImport: i0 }); }
180
+ }
181
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableCancelTrigger, decorators: [{
182
+ type: Directive,
183
+ args: [{
184
+ selector: 'button[rdxEditableCancelTrigger]',
185
+ host: {
186
+ type: 'button',
187
+ '[attr.aria-label]': 'ariaLabel()',
188
+ '[attr.data-disabled]': 'rootContext.disabled() ? "" : undefined',
189
+ '[attr.disabled]': 'rootContext.disabled() ? "" : undefined',
190
+ '[attr.hidden]': 'rootContext.isEditing() ? "" : undefined',
191
+ '(click)': 'rootContext.cancel()'
192
+ }
193
+ }]
194
+ }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
195
+
196
+ class RdxEditableEditTrigger {
197
+ constructor() {
198
+ this.rootContext = injectEditableRootContext();
199
+ /** Accessible label for the trigger. Override to localize. */
200
+ this.ariaLabel = input('edit', { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
201
+ }
202
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableEditTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
203
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxEditableEditTrigger, isStandalone: true, selector: "button[rdxEditableEditTrigger]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "rootContext.edit()" }, properties: { "attr.aria-label": "ariaLabel()", "attr.data-disabled": "rootContext.disabled() ? \"\" : undefined", "attr.disabled": "rootContext.disabled() ? \"\" : undefined", "attr.hidden": "rootContext.isEditing() ? \"\" : undefined" } }, ngImport: i0 }); }
204
+ }
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableEditTrigger, decorators: [{
206
+ type: Directive,
207
+ args: [{
208
+ selector: 'button[rdxEditableEditTrigger]',
209
+ host: {
210
+ type: 'button',
211
+ '[attr.aria-label]': 'ariaLabel()',
212
+ '[attr.data-disabled]': 'rootContext.disabled() ? "" : undefined',
213
+ '[attr.disabled]': 'rootContext.disabled() ? "" : undefined',
214
+ '[attr.hidden]': 'rootContext.isEditing() ? "" : undefined',
215
+ '(click)': 'rootContext.edit()'
216
+ }
217
+ }]
218
+ }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
219
+
220
+ class RdxEditableInput {
221
+ constructor() {
222
+ this.inputRef = inject(ElementRef).nativeElement;
223
+ this.rootContext = injectEditableRootContext();
224
+ /** Accessible label for the input. Override to localize. */
225
+ this.ariaLabel = input('editable input', { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
226
+ this.placeholder = computed(() => this.rootContext.placeholder().edit, ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
227
+ this.disabled = computed(() => this.rootContext.disabled(), ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
228
+ afterNextRender(() => {
229
+ this.rootContext.inputRef.set(this.inputRef);
230
+ });
231
+ // Focus (and optionally select) the input whenever it enters edit mode.
232
+ // Runs after render so the input is no longer hidden, and is browser-only (SSR-safe).
233
+ afterRenderEffect(() => {
234
+ const editing = this.rootContext.isEditing();
235
+ const el = this.rootContext.inputRef();
236
+ if (editing && el) {
237
+ el.focus({ preventScroll: true });
238
+ if (this.rootContext.selectOnFocus()) {
239
+ el.select();
240
+ }
241
+ }
242
+ });
243
+ }
244
+ handleInput(event) {
245
+ this.rootContext.inputValue.set(event.target.value);
246
+ }
247
+ handleSubmitKeyDown(event) {
248
+ const keyEvent = event;
249
+ if ((this.rootContext.submitMode() === 'enter' || this.rootContext.submitMode() === 'both') &&
250
+ keyEvent.key === ENTER &&
251
+ !keyEvent.shiftKey &&
252
+ !keyEvent.metaKey) {
253
+ this.rootContext.submit();
254
+ }
255
+ }
256
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
257
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxEditableInput, isStandalone: true, selector: "input[rdxEditableInput]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "handleInput($event)", "keydown.escape": "rootContext.cancel()", "keydown.enter": "handleSubmitKeyDown($event)" }, properties: { "attr.aria-label": "ariaLabel()", "attr.aria-required": "rootContext.required() ? \"true\" : undefined", "attr.data-disabled": "disabled() ? \"\" : undefined", "attr.data-readonly": "rootContext.readonly() ? \"\" : undefined", "readonly": "rootContext.readonly()", "required": "rootContext.required()", "attr.disabled": "disabled() ? \"\" : undefined", "attr.maxlength": "rootContext.maxLength()", "attr.value": "rootContext.inputValue()", "attr.placeholder": "placeholder()", "attr.data-auto-resize": "rootContext.autoResize() ? \"\" : undefined", "attr.hidden": "rootContext.autoResize() || rootContext.isEditing() ? undefined : \"\"", "style.all": "rootContext.autoResize() ? \"unset\" : undefined", "style.grid-area": "rootContext.autoResize() ? \"1 / 1 / auto / auto\" : undefined", "style.visibility": "rootContext.autoResize() && !rootContext.isEditing() ? \"hidden\" : undefined" } }, ngImport: i0 }); }
258
+ }
259
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableInput, decorators: [{
260
+ type: Directive,
261
+ args: [{
262
+ selector: 'input[rdxEditableInput]',
263
+ host: {
264
+ '[attr.aria-label]': 'ariaLabel()',
265
+ '[attr.aria-required]': 'rootContext.required() ? "true" : undefined',
266
+ '[attr.data-disabled]': 'disabled() ? "" : undefined',
267
+ '[attr.data-readonly]': 'rootContext.readonly() ? "" : undefined',
268
+ '[readonly]': 'rootContext.readonly()',
269
+ '[required]': 'rootContext.required()',
270
+ '[attr.disabled]': 'disabled() ? "" : undefined',
271
+ '[attr.maxlength]': 'rootContext.maxLength()',
272
+ '[attr.value]': 'rootContext.inputValue()',
273
+ '[attr.placeholder]': 'placeholder()',
274
+ '[attr.data-auto-resize]': 'rootContext.autoResize() ? "" : undefined',
275
+ '[attr.hidden]': 'rootContext.autoResize() || rootContext.isEditing() ? undefined : ""',
276
+ // Auto-resize overlay mechanism (see RdxEditableArea): strip native chrome with `all: unset`
277
+ // and share the preview's grid cell so the input inherits its measured width.
278
+ '[style.all]': 'rootContext.autoResize() ? "unset" : undefined',
279
+ '[style.grid-area]': 'rootContext.autoResize() ? "1 / 1 / auto / auto" : undefined',
280
+ '[style.visibility]': 'rootContext.autoResize() && !rootContext.isEditing() ? "hidden" : undefined',
281
+ '(input)': 'handleInput($event)',
282
+ '(keydown.escape)': 'rootContext.cancel()',
283
+ '(keydown.enter)': 'handleSubmitKeyDown($event)'
284
+ }
285
+ }]
286
+ }], ctorParameters: () => [], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
287
+
288
+ class RdxEditablePreview {
289
+ constructor() {
290
+ this.elementRef = inject(ElementRef);
291
+ this.rootContext = injectEditableRootContext();
292
+ this.placeholder = computed(() => {
293
+ return this.rootContext.placeholder().preview;
294
+ }, ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
295
+ afterNextRender(() => {
296
+ this.rootContext.previewRef.set(this.elementRef.nativeElement);
297
+ });
298
+ }
299
+ handleFocus() {
300
+ // Ignore focus that we restored programmatically after leaving edit mode,
301
+ // otherwise focus-mode activation would immediately re-open the editor.
302
+ if (this.rootContext.activationMode() === 'focus' && this.rootContext.canActivateOnFocus()) {
303
+ this.rootContext.edit();
304
+ }
305
+ }
306
+ handleDoubleClick() {
307
+ if (this.rootContext.activationMode() === 'dblclick') {
308
+ this.rootContext.edit();
309
+ }
310
+ }
311
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditablePreview, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
312
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxEditablePreview, isStandalone: true, selector: "span[rdxEditablePreview]", host: { attributes: { "tabindex": "0" }, listeners: { "focusin": "handleFocus()", "dblclick": "handleDoubleClick()" }, properties: { "attr.data-placeholder-shown": "rootContext.isEditing() ? undefined : \"\"", "attr.data-auto-resize": "rootContext.autoResize() ? \"\" : undefined", "attr.hidden": "!rootContext.autoResize() && rootContext.isEditing() ? \"\" : undefined", "style.grid-area": "rootContext.autoResize() ? \"1 / 1 / auto / auto\" : undefined", "style.white-space": "rootContext.autoResize() ? \"pre\" : undefined", "style.visibility": "rootContext.autoResize() && rootContext.isEditing() ? \"hidden\" : undefined" } }, exportAs: ["rdxEditablePreview"], ngImport: i0 }); }
313
+ }
314
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditablePreview, decorators: [{
315
+ type: Directive,
316
+ args: [{
317
+ selector: 'span[rdxEditablePreview]',
318
+ exportAs: 'rdxEditablePreview',
319
+ host: {
320
+ tabindex: '0',
321
+ '[attr.data-placeholder-shown]': 'rootContext.isEditing() ? undefined : ""',
322
+ '[attr.data-auto-resize]': 'rootContext.autoResize() ? "" : undefined',
323
+ '[attr.hidden]': '!rootContext.autoResize() && rootContext.isEditing() ? "" : undefined',
324
+ // Auto-resize overlay mechanism (see RdxEditableArea): share the grid cell with the input
325
+ // and stay measurable so the area keeps the preview's width while editing. `white-space: pre`
326
+ // keeps that measured width stable. Cosmetics (overflow, ellipsis, user-select) are left to
327
+ // the consumer via [data-auto-resize].
328
+ '[style.grid-area]': 'rootContext.autoResize() ? "1 / 1 / auto / auto" : undefined',
329
+ '[style.white-space]': 'rootContext.autoResize() ? "pre" : undefined',
330
+ '[style.visibility]': 'rootContext.autoResize() && rootContext.isEditing() ? "hidden" : undefined',
331
+ '(focusin)': 'handleFocus()',
332
+ '(dblclick)': 'handleDoubleClick()'
333
+ }
334
+ }]
335
+ }], ctorParameters: () => [] });
336
+
337
+ class RdxEditableSubmitTrigger {
338
+ constructor() {
339
+ this.rootContext = injectEditableRootContext();
340
+ /** Accessible label for the trigger. Override to localize. */
341
+ this.ariaLabel = input('submit', { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
342
+ }
343
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableSubmitTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
344
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxEditableSubmitTrigger, isStandalone: true, selector: "button[rdxEditableSubmitTrigger]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "rootContext.submit()" }, properties: { "attr.aria-label": "ariaLabel()", "attr.data-disabled": "rootContext.disabled() ? \"\" : undefined", "attr.disabled": "rootContext.disabled() ? \"\" : undefined" } }, ngImport: i0 }); }
345
+ }
346
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableSubmitTrigger, decorators: [{
347
+ type: Directive,
348
+ args: [{
349
+ selector: 'button[rdxEditableSubmitTrigger]',
350
+ host: {
351
+ type: 'button',
352
+ '[attr.aria-label]': 'ariaLabel()',
353
+ '[attr.data-disabled]': 'rootContext.disabled() ? "" : undefined',
354
+ '[attr.disabled]': 'rootContext.disabled() ? "" : undefined',
355
+ '(click)': 'rootContext.submit()'
356
+ }
357
+ }]
358
+ }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
359
+
360
+ const _imports = [
361
+ RdxEditableRoot,
362
+ RdxEditableArea,
363
+ RdxEditablePreview,
364
+ RdxEditableInput,
365
+ RdxEditableEditTrigger,
366
+ RdxEditableSubmitTrigger,
367
+ RdxEditableCancelTrigger
368
+ ];
369
+ class RdxEditableModule {
370
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
371
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableModule, imports: [RdxEditableRoot,
372
+ RdxEditableArea,
373
+ RdxEditablePreview,
374
+ RdxEditableInput,
375
+ RdxEditableEditTrigger,
376
+ RdxEditableSubmitTrigger,
377
+ RdxEditableCancelTrigger], exports: [RdxEditableRoot,
378
+ RdxEditableArea,
379
+ RdxEditablePreview,
380
+ RdxEditableInput,
381
+ RdxEditableEditTrigger,
382
+ RdxEditableSubmitTrigger,
383
+ RdxEditableCancelTrigger] }); }
384
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableModule }); }
385
+ }
386
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableModule, decorators: [{
387
+ type: NgModule,
388
+ args: [{
389
+ imports: [..._imports],
390
+ exports: [..._imports]
391
+ }]
392
+ }] });
112
393
 
113
394
  /**
114
395
  * Generated bundle index. Do not edit.
115
396
  */
116
397
 
117
- export { RdxEditableRoot, injectEditableRootContext, provideEditableRootContext };
398
+ export { RdxEditableArea, RdxEditableCancelTrigger, RdxEditableEditTrigger, RdxEditableInput, RdxEditableModule, RdxEditablePreview, RdxEditableRoot, RdxEditableSubmitTrigger, injectEditableRootContext, provideEditableRootContext };
118
399
  //# sourceMappingURL=radix-ng-primitives-editable.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"radix-ng-primitives-editable.mjs","sources":["../../../packages/primitives/editable/src/editable-root.ts","../../../packages/primitives/editable/radix-ng-primitives-editable.ts"],"sourcesContent":["import {\n afterNextRender,\n booleanAttribute,\n computed,\n Directive,\n inject,\n input,\n model,\n numberAttribute,\n Signal,\n signal,\n WritableSignal\n} from '@angular/core';\nimport { BooleanInput, createContext, NumberInput, watch } from '@radix-ng/primitives/core';\nimport { RdxFocusOutside, RdxPointerDownOutside } from '@radix-ng/primitives/dismissable-layer';\n\ntype EditableRootContext = {\n disabled: Signal<boolean>;\n value: Signal<string | null | undefined>;\n inputValue: WritableSignal<string | undefined>;\n placeholder: Signal<{ edit: string; preview: string }>;\n isEditing: Signal<boolean>;\n submitMode: Signal<SubmitMode>;\n activationMode: Signal<ActivationMode>;\n edit: () => void;\n cancel: () => void;\n submit: () => void;\n maxLength: Signal<number | undefined>;\n startWithEditMode: Signal<boolean>;\n isEmpty: Signal<boolean>;\n readonly: Signal<boolean>;\n selectOnFocus: Signal<boolean>;\n autoResize: Signal<boolean>;\n inputRef: WritableSignal<HTMLInputElement | undefined>;\n};\n\nexport const [injectEditableRootContext, provideEditableRootContext] =\n createContext<EditableRootContext>('EditableRoot');\n\nconst rootContext = (): EditableRootContext => {\n const context = inject(RdxEditableRoot);\n return {\n disabled: context.disabled,\n value: context.value,\n inputValue: context.inputValue,\n placeholder: context.$placeholder as Signal<{ edit: string; preview: string }>,\n isEditing: context.isEditing,\n submitMode: context.submitMode,\n activationMode: context.activationMode,\n edit: context.edit,\n cancel: context.cancel,\n submit: context.submit,\n maxLength: context.maxLength,\n startWithEditMode: context.startWithEditMode,\n isEmpty: context.isEmpty,\n readonly: context.readonly,\n autoResize: context.autoResize,\n selectOnFocus: context.selectOnFocus,\n inputRef: context.inputRef\n };\n};\n\ntype ActivationMode = 'focus' | 'dblclick' | 'none';\ntype SubmitMode = 'blur' | 'enter' | 'none' | 'both';\n\n/**\n * @group Components\n */\n@Directive({\n selector: '[rdxEditableRoot]',\n exportAs: 'rdxEditableRoot',\n providers: [provideEditableRootContext(rootContext)],\n hostDirectives: [RdxFocusOutside, RdxPointerDownOutside],\n host: {\n '[attr.data-dismissable-layer]': '\"\"'\n }\n})\nexport class RdxEditableRoot {\n private readonly focusOutside = inject(RdxFocusOutside);\n readonly pointerDownOutside = inject(RdxPointerDownOutside);\n\n readonly value = model<string>();\n\n readonly placeholder = input<string>('Enter text...');\n\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly readonly = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly selectOnFocus = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly submitMode = input<SubmitMode>('blur');\n\n readonly maxLength = input<number, NumberInput>(undefined, { transform: numberAttribute });\n\n /**\n * Whether to start with the edit mode active\n */\n readonly startWithEditMode = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly activationMode = input<ActivationMode>('focus');\n\n readonly autoResize = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly isEmpty = computed(() => this.value() === '');\n\n readonly $placeholder = computed(() => {\n return typeof this.placeholder() === 'string'\n ? { edit: this.placeholder(), preview: this.placeholder() }\n : this.placeholder();\n });\n\n readonly isEditing = signal(false);\n\n readonly inputValue = signal(this.value());\n\n readonly inputRef = signal<HTMLInputElement | undefined>(undefined);\n\n constructor() {\n watch([this.value], ([value]) => {\n if (value) {\n this.inputValue.set(this.value());\n }\n });\n\n watch([this.isEditing], ([value]) => {\n this.pointerDownOutside.enabled = value;\n this.focusOutside.enabled = value;\n });\n\n this.pointerDownOutside.pointerDownOutside.subscribe(() => this.handleDismiss());\n this.focusOutside.focusOutside.subscribe(() => this.handleDismiss());\n\n afterNextRender(() => {\n this.isEditing.set(this.startWithEditMode() ?? false);\n this.inputValue.set(this.value());\n });\n }\n\n handleDismiss() {\n if (this.isEditing()) {\n if (this.submitMode() === 'blur' || this.submitMode() === 'both') {\n this.submit();\n } else {\n this.cancel();\n }\n }\n }\n\n submit() {\n this.value.set(this.inputValue());\n this.isEditing.set(false);\n }\n\n cancel() {\n this.isEditing.set(false);\n }\n\n edit() {\n this.isEditing.set(true);\n this.inputValue.set(this.value());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"radix-ng-primitives-editable.mjs","sources":["../../../packages/primitives/editable/src/editable-root.ts","../../../packages/primitives/editable/src/editable-area.ts","../../../packages/primitives/editable/src/editable-cancel-trigger.ts","../../../packages/primitives/editable/src/editable-edit-trigger.ts","../../../packages/primitives/editable/src/editable-input.ts","../../../packages/primitives/editable/src/editable-preview.ts","../../../packages/primitives/editable/src/editable-submit-trigger.ts","../../../packages/primitives/editable/index.ts","../../../packages/primitives/editable/radix-ng-primitives-editable.ts"],"sourcesContent":["import {\n afterRenderEffect,\n booleanAttribute,\n computed,\n Directive,\n effect,\n inject,\n input,\n linkedSignal,\n model,\n numberAttribute,\n output,\n signal,\n Signal,\n WritableSignal\n} from '@angular/core';\nimport { BooleanInput, createContext, NumberInput, watch } from '@radix-ng/primitives/core';\nimport { RdxFocusOutside, RdxPointerDownOutside } from '@radix-ng/primitives/dismissable-layer';\n\nexport type EditableActivationMode = 'focus' | 'dblclick' | 'none';\nexport type EditableSubmitMode = 'blur' | 'enter' | 'none' | 'both';\n\nexport type EditableRootContext = {\n disabled: Signal<boolean>;\n value: Signal<string | undefined>;\n inputValue: WritableSignal<string | undefined>;\n placeholder: Signal<{ edit: string; preview: string }>;\n isEditing: Signal<boolean>;\n submitMode: Signal<EditableSubmitMode>;\n activationMode: Signal<EditableActivationMode>;\n edit: () => void;\n cancel: () => void;\n submit: () => void;\n maxLength: Signal<number | undefined>;\n required: Signal<boolean>;\n startWithEditMode: Signal<boolean>;\n isEmpty: Signal<boolean>;\n readonly: Signal<boolean>;\n selectOnFocus: Signal<boolean>;\n autoResize: Signal<boolean>;\n inputRef: WritableSignal<HTMLInputElement | undefined>;\n previewRef: WritableSignal<HTMLElement | undefined>;\n canActivateOnFocus: () => boolean;\n};\n\nexport const [injectEditableRootContext, provideEditableRootContext] =\n createContext<EditableRootContext>('EditableRoot');\n\nconst rootContext = (): EditableRootContext => {\n const context = inject(RdxEditableRoot);\n return {\n disabled: context.disabled,\n value: context.value,\n inputValue: context.inputValue,\n placeholder: context.$placeholder,\n isEditing: context.isEditing,\n submitMode: context.submitMode,\n activationMode: context.activationMode,\n edit: () => context.edit(),\n cancel: () => context.cancel(),\n submit: () => context.submit(),\n maxLength: context.maxLength,\n required: context.required,\n startWithEditMode: context.startWithEditMode,\n isEmpty: context.isEmpty,\n readonly: context.readonly,\n autoResize: context.autoResize,\n selectOnFocus: context.selectOnFocus,\n inputRef: context.inputRef,\n previewRef: context.previewRef,\n canActivateOnFocus: () => context.canActivateOnFocus()\n };\n};\n\n/**\n * @group Components\n */\n@Directive({\n selector: '[rdxEditableRoot]',\n exportAs: 'rdxEditableRoot',\n providers: [provideEditableRootContext(rootContext)],\n hostDirectives: [RdxFocusOutside, RdxPointerDownOutside],\n host: {\n '[attr.data-dismissable-layer]': '\"\"'\n }\n})\nexport class RdxEditableRoot {\n private readonly focusOutside = inject(RdxFocusOutside);\n private readonly pointerDownOutside = inject(RdxPointerDownOutside);\n\n readonly value = model<string>();\n\n /** Uncontrolled initial value. */\n readonly defaultValue = input<string>();\n\n readonly placeholder = input<string>('Enter text...');\n\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly readonly = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly selectOnFocus = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly submitMode = input<EditableSubmitMode>('blur');\n\n readonly maxLength = input<number | undefined, NumberInput>(undefined, { transform: numberAttribute });\n\n /**\n * Whether to start with the edit mode active\n */\n readonly startWithEditMode = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly activationMode = input<EditableActivationMode>('focus');\n\n readonly autoResize = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Emitted when the value is committed (on submit). */\n readonly onValueChange = output<string>();\n\n readonly isEmpty = computed(() => {\n const value = this.value();\n return value === undefined || value === null || value === '';\n });\n\n readonly $placeholder = computed(() => {\n const placeholder = this.placeholder();\n return { edit: placeholder, preview: placeholder };\n });\n\n /** Seeded from `startWithEditMode`; flipped imperatively by edit/submit/cancel. */\n readonly isEditing = linkedSignal(() => this.startWithEditMode());\n\n /** Working copy of the value while editing; reseeded whenever the committed value changes. */\n readonly inputValue = linkedSignal(() => this.value());\n\n readonly inputRef = signal<HTMLInputElement | undefined>(undefined);\n\n readonly previewRef = signal<HTMLElement | undefined>(undefined);\n\n private restoreFocusOnExit = false;\n\n /** True while focus is being restored programmatically, to avoid re-entering edit mode. */\n private suppressFocusActivation = false;\n\n constructor() {\n effect(() => {\n if (this.defaultValue() !== undefined) {\n this.value.set(this.defaultValue());\n }\n });\n\n watch([this.isEditing], ([value]) => {\n this.pointerDownOutside.enabled = value;\n this.focusOutside.enabled = value;\n });\n\n this.pointerDownOutside.pointerDownOutside.subscribe(() => this.handleDismiss());\n this.focusOutside.focusOutside.subscribe(() => this.handleDismiss());\n\n // Restore focus to the preview after leaving edit mode, once the input is hidden\n // and the preview is visible again. Runs after render so the DOM reflects isEditing.\n afterRenderEffect(() => {\n const editing = this.isEditing();\n if (!editing && this.restoreFocusOnExit) {\n this.restoreFocusOnExit = false;\n const preview = this.previewRef();\n if (preview) {\n this.suppressFocusActivation = true;\n preview.focus({ preventScroll: true });\n this.suppressFocusActivation = false;\n }\n }\n });\n }\n\n canActivateOnFocus(): boolean {\n return !this.suppressFocusActivation;\n }\n\n handleDismiss() {\n if (this.isEditing()) {\n if (this.submitMode() === 'blur' || this.submitMode() === 'both') {\n this.submit();\n } else {\n this.cancel();\n }\n }\n }\n\n submit() {\n const value = this.inputValue() ?? '';\n this.value.set(value);\n this.onValueChange.emit(value);\n this.restoreFocusOnExit = true;\n this.isEditing.set(false);\n }\n\n cancel() {\n this.inputValue.set(this.value());\n this.restoreFocusOnExit = true;\n this.isEditing.set(false);\n }\n\n edit() {\n this.inputValue.set(this.value());\n this.isEditing.set(true);\n }\n}\n","import { Directive } from '@angular/core';\nimport { injectEditableRootContext } from './editable-root';\n\n@Directive({\n selector: '[rdxEditableArea]',\n host: {\n '[attr.data-placeholder-shown]': 'rootContext.isEditing() ? undefined : \"\"',\n '[attr.data-focus]': 'rootContext.isEditing() ? \"\" : undefined',\n '[attr.data-empty]': 'rootContext.isEmpty() ? \"\" : undefined',\n '[attr.data-readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[attr.data-disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.data-auto-resize]': 'rootContext.autoResize() ? \"\" : undefined',\n // Auto-resize overlays the preview and input in a single grid cell so the area\n // sizes to the larger of the two. This is the layout mechanism for the feature,\n // not theming; consumers style everything else via the data-* attributes above.\n '[style.display]': 'rootContext.autoResize() ? \"inline-grid\" : undefined'\n }\n})\nexport class RdxEditableArea {\n protected readonly rootContext = injectEditableRootContext();\n}\n","import { Directive, input } from '@angular/core';\nimport { injectEditableRootContext } from './editable-root';\n\n@Directive({\n selector: 'button[rdxEditableCancelTrigger]',\n host: {\n type: 'button',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.data-disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.hidden]': 'rootContext.isEditing() ? \"\" : undefined',\n\n '(click)': 'rootContext.cancel()'\n }\n})\nexport class RdxEditableCancelTrigger {\n protected readonly rootContext = injectEditableRootContext();\n\n /** Accessible label for the trigger. Override to localize. */\n readonly ariaLabel = input<string>('cancel', { alias: 'aria-label' });\n}\n","import { Directive, input } from '@angular/core';\nimport { injectEditableRootContext } from './editable-root';\n\n@Directive({\n selector: 'button[rdxEditableEditTrigger]',\n host: {\n type: 'button',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.data-disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.hidden]': 'rootContext.isEditing() ? \"\" : undefined',\n\n '(click)': 'rootContext.edit()'\n }\n})\nexport class RdxEditableEditTrigger {\n protected readonly rootContext = injectEditableRootContext();\n\n /** Accessible label for the trigger. Override to localize. */\n readonly ariaLabel = input<string>('edit', { alias: 'aria-label' });\n}\n","import { afterNextRender, afterRenderEffect, computed, Directive, ElementRef, inject, input } from '@angular/core';\nimport { ENTER } from '@radix-ng/primitives/core';\nimport { injectEditableRootContext } from './editable-root';\n\n@Directive({\n selector: 'input[rdxEditableInput]',\n host: {\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-required]': 'rootContext.required() ? \"true\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[readonly]': 'rootContext.readonly()',\n '[required]': 'rootContext.required()',\n '[attr.disabled]': 'disabled() ? \"\" : undefined',\n '[attr.maxlength]': 'rootContext.maxLength()',\n '[attr.value]': 'rootContext.inputValue()',\n '[attr.placeholder]': 'placeholder()',\n '[attr.data-auto-resize]': 'rootContext.autoResize() ? \"\" : undefined',\n '[attr.hidden]': 'rootContext.autoResize() || rootContext.isEditing() ? undefined : \"\"',\n\n // Auto-resize overlay mechanism (see RdxEditableArea): strip native chrome with `all: unset`\n // and share the preview's grid cell so the input inherits its measured width.\n '[style.all]': 'rootContext.autoResize() ? \"unset\" : undefined',\n '[style.grid-area]': 'rootContext.autoResize() ? \"1 / 1 / auto / auto\" : undefined',\n '[style.visibility]': 'rootContext.autoResize() && !rootContext.isEditing() ? \"hidden\" : undefined',\n\n '(input)': 'handleInput($event)',\n '(keydown.escape)': 'rootContext.cancel()',\n '(keydown.enter)': 'handleSubmitKeyDown($event)'\n }\n})\nexport class RdxEditableInput {\n private readonly inputRef = inject(ElementRef).nativeElement as HTMLInputElement;\n\n protected readonly rootContext = injectEditableRootContext();\n\n /** Accessible label for the input. Override to localize. */\n readonly ariaLabel = input<string>('editable input', { alias: 'aria-label' });\n\n readonly placeholder = computed(() => this.rootContext.placeholder().edit);\n\n readonly disabled = computed(() => this.rootContext.disabled());\n\n constructor() {\n afterNextRender(() => {\n this.rootContext.inputRef.set(this.inputRef);\n });\n\n // Focus (and optionally select) the input whenever it enters edit mode.\n // Runs after render so the input is no longer hidden, and is browser-only (SSR-safe).\n afterRenderEffect(() => {\n const editing = this.rootContext.isEditing();\n const el = this.rootContext.inputRef();\n if (editing && el) {\n el.focus({ preventScroll: true });\n if (this.rootContext.selectOnFocus()) {\n el.select();\n }\n }\n });\n }\n\n handleInput(event: Event) {\n this.rootContext.inputValue.set((event.target as HTMLInputElement).value);\n }\n\n handleSubmitKeyDown(event: Event) {\n const keyEvent = event as KeyboardEvent;\n if (\n (this.rootContext.submitMode() === 'enter' || this.rootContext.submitMode() === 'both') &&\n keyEvent.key === ENTER &&\n !keyEvent.shiftKey &&\n !keyEvent.metaKey\n ) {\n this.rootContext.submit();\n }\n }\n}\n","import { afterNextRender, computed, Directive, ElementRef, inject } from '@angular/core';\nimport { injectEditableRootContext } from './editable-root';\n\n@Directive({\n selector: 'span[rdxEditablePreview]',\n exportAs: 'rdxEditablePreview',\n host: {\n tabindex: '0',\n '[attr.data-placeholder-shown]': 'rootContext.isEditing() ? undefined : \"\"',\n '[attr.data-auto-resize]': 'rootContext.autoResize() ? \"\" : undefined',\n '[attr.hidden]': '!rootContext.autoResize() && rootContext.isEditing() ? \"\" : undefined',\n\n // Auto-resize overlay mechanism (see RdxEditableArea): share the grid cell with the input\n // and stay measurable so the area keeps the preview's width while editing. `white-space: pre`\n // keeps that measured width stable. Cosmetics (overflow, ellipsis, user-select) are left to\n // the consumer via [data-auto-resize].\n '[style.grid-area]': 'rootContext.autoResize() ? \"1 / 1 / auto / auto\" : undefined',\n '[style.white-space]': 'rootContext.autoResize() ? \"pre\" : undefined',\n '[style.visibility]': 'rootContext.autoResize() && rootContext.isEditing() ? \"hidden\" : undefined',\n\n '(focusin)': 'handleFocus()',\n '(dblclick)': 'handleDoubleClick()'\n }\n})\nexport class RdxEditablePreview {\n private readonly elementRef = inject(ElementRef);\n\n protected readonly rootContext = injectEditableRootContext();\n\n readonly placeholder = computed(() => {\n return this.rootContext.placeholder().preview;\n });\n\n constructor() {\n afterNextRender(() => {\n this.rootContext.previewRef.set(this.elementRef.nativeElement);\n });\n }\n\n handleFocus() {\n // Ignore focus that we restored programmatically after leaving edit mode,\n // otherwise focus-mode activation would immediately re-open the editor.\n if (this.rootContext.activationMode() === 'focus' && this.rootContext.canActivateOnFocus()) {\n this.rootContext.edit();\n }\n }\n\n handleDoubleClick() {\n if (this.rootContext.activationMode() === 'dblclick') {\n this.rootContext.edit();\n }\n }\n}\n","import { Directive, input } from '@angular/core';\nimport { injectEditableRootContext } from './editable-root';\n\n@Directive({\n selector: 'button[rdxEditableSubmitTrigger]',\n host: {\n type: 'button',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.data-disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '(click)': 'rootContext.submit()'\n }\n})\nexport class RdxEditableSubmitTrigger {\n protected readonly rootContext = injectEditableRootContext();\n\n /** Accessible label for the trigger. Override to localize. */\n readonly ariaLabel = input<string>('submit', { alias: 'aria-label' });\n}\n","import { NgModule } from '@angular/core';\nimport { RdxEditableArea } from './src/editable-area';\nimport { RdxEditableCancelTrigger } from './src/editable-cancel-trigger';\nimport { RdxEditableEditTrigger } from './src/editable-edit-trigger';\nimport { RdxEditableInput } from './src/editable-input';\nimport { RdxEditablePreview } from './src/editable-preview';\nimport { RdxEditableRoot } from './src/editable-root';\nimport { RdxEditableSubmitTrigger } from './src/editable-submit-trigger';\n\nexport * from './src/editable-area';\nexport * from './src/editable-cancel-trigger';\nexport * from './src/editable-edit-trigger';\nexport * from './src/editable-input';\nexport * from './src/editable-preview';\nexport * from './src/editable-root';\nexport * from './src/editable-submit-trigger';\n\nconst _imports = [\n RdxEditableRoot,\n RdxEditableArea,\n RdxEditablePreview,\n RdxEditableInput,\n RdxEditableEditTrigger,\n RdxEditableSubmitTrigger,\n RdxEditableCancelTrigger\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxEditableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}