@simplysm/solid 13.0.70 → 13.0.71

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 (98) hide show
  1. package/README.md +1 -1
  2. package/dist/components/disclosure/Dropdown.d.ts +6 -4
  3. package/dist/components/disclosure/Dropdown.d.ts.map +1 -1
  4. package/dist/components/disclosure/Dropdown.js +24 -8
  5. package/dist/components/disclosure/Dropdown.js.map +2 -2
  6. package/dist/components/disclosure/dialogZIndex.d.ts +2 -0
  7. package/dist/components/disclosure/dialogZIndex.d.ts.map +1 -1
  8. package/dist/components/disclosure/dialogZIndex.js +4 -0
  9. package/dist/components/disclosure/dialogZIndex.js.map +1 -1
  10. package/dist/components/features/crud-detail/CrudDetail.d.ts.map +1 -1
  11. package/dist/components/features/crud-detail/CrudDetail.js +16 -7
  12. package/dist/components/features/crud-detail/CrudDetail.js.map +2 -2
  13. package/dist/components/features/crud-sheet/CrudSheet.d.ts.map +1 -1
  14. package/dist/components/features/crud-sheet/CrudSheet.js +14 -5
  15. package/dist/components/features/crud-sheet/CrudSheet.js.map +2 -2
  16. package/dist/components/features/crudRegistry.d.ts +16 -0
  17. package/dist/components/features/crudRegistry.d.ts.map +1 -0
  18. package/dist/components/features/crudRegistry.js +37 -0
  19. package/dist/components/features/crudRegistry.js.map +6 -0
  20. package/dist/components/features/permission-table/PermissionTable.d.ts.map +1 -1
  21. package/dist/components/features/permission-table/PermissionTable.js +71 -86
  22. package/dist/components/features/permission-table/PermissionTable.js.map +2 -2
  23. package/dist/components/features/shared-data/SharedDataSelect.js +2 -4
  24. package/dist/components/features/shared-data/SharedDataSelect.js.map +2 -2
  25. package/dist/components/features/shared-data/SharedDataSelectList.d.ts +2 -4
  26. package/dist/components/features/shared-data/SharedDataSelectList.d.ts.map +1 -1
  27. package/dist/components/features/shared-data/SharedDataSelectList.js +11 -46
  28. package/dist/components/features/shared-data/SharedDataSelectList.js.map +2 -2
  29. package/dist/components/form-control/select/Select.d.ts.map +1 -1
  30. package/dist/components/form-control/select/Select.js +1 -1
  31. package/dist/components/form-control/select/Select.js.map +1 -1
  32. package/dist/helpers/createAppStructure.d.ts.map +1 -1
  33. package/dist/helpers/createAppStructure.js +3 -2
  34. package/dist/helpers/createAppStructure.js.map +1 -1
  35. package/dist/helpers/createHmrSafeContext.d.ts +3 -0
  36. package/dist/helpers/createHmrSafeContext.d.ts.map +1 -0
  37. package/dist/helpers/createHmrSafeContext.js +10 -0
  38. package/dist/helpers/createHmrSafeContext.js.map +6 -0
  39. package/dist/hooks/createSelectionGroup.d.ts.map +1 -1
  40. package/dist/hooks/createSelectionGroup.js +3 -2
  41. package/dist/hooks/createSelectionGroup.js.map +2 -2
  42. package/package.json +6 -5
  43. package/src/components/disclosure/Dropdown.tsx +31 -17
  44. package/src/components/disclosure/dialogZIndex.ts +5 -0
  45. package/src/components/features/crud-detail/CrudDetail.tsx +16 -5
  46. package/src/components/features/crud-sheet/CrudSheet.tsx +13 -3
  47. package/src/components/features/crudRegistry.ts +60 -0
  48. package/src/components/features/permission-table/PermissionTable.tsx +49 -46
  49. package/src/components/features/shared-data/SharedDataSelect.tsx +2 -2
  50. package/src/components/features/shared-data/SharedDataSelectList.tsx +11 -36
  51. package/src/components/form-control/select/Select.tsx +1 -5
  52. package/src/helpers/createAppStructure.ts +3 -2
  53. package/src/helpers/createHmrSafeContext.ts +8 -0
  54. package/src/hooks/createSelectionGroup.tsx +4 -2
  55. package/tests/components/data/List.spec.tsx +52 -52
  56. package/tests/components/data/Pagination.spec.tsx +43 -43
  57. package/tests/components/data/Table.spec.tsx +4 -4
  58. package/tests/components/data/kanban/Kanban.selection.spec.tsx +21 -21
  59. package/tests/components/data/sheet/DataSheet.spec.tsx +50 -50
  60. package/tests/components/disclosure/Collapse.spec.tsx +24 -24
  61. package/tests/components/disclosure/Dialog.spec.tsx +33 -33
  62. package/tests/components/disclosure/DialogProvider.spec.tsx +9 -9
  63. package/tests/components/disclosure/Dropdown.spec.tsx +134 -14
  64. package/tests/components/disclosure/Tabs.spec.tsx +21 -21
  65. package/tests/components/disclosure/dialogZIndex.spec.ts +45 -0
  66. package/tests/components/display/Alert.spec.tsx +4 -4
  67. package/tests/components/display/Barcode.spec.tsx +7 -7
  68. package/tests/components/display/Card.spec.tsx +3 -3
  69. package/tests/components/display/Link.spec.tsx +5 -5
  70. package/tests/components/display/Tag.spec.tsx +4 -4
  71. package/tests/components/features/address/AddressSearch.spec.tsx +3 -3
  72. package/tests/components/features/crudRegistry.spec.ts +119 -0
  73. package/tests/components/features/data-select-button/DataSelectButton.spec.tsx +8 -8
  74. package/tests/components/features/permission-table/PermissionTable.spec.tsx +43 -43
  75. package/tests/components/features/shared-data/SharedDataSelectList.spec.tsx +2 -17
  76. package/tests/components/feedback/busy/BusyContainer.spec.tsx +7 -7
  77. package/tests/components/feedback/notification/NotificationBell.spec.tsx +9 -9
  78. package/tests/components/feedback/print/Print.spec.tsx +4 -4
  79. package/tests/components/form-control/Button.spec.tsx +18 -18
  80. package/tests/components/form-control/checkbox/Checkbox.spec.tsx +20 -20
  81. package/tests/components/form-control/checkbox/CheckboxGroup.spec.tsx +12 -12
  82. package/tests/components/form-control/checkbox/Radio.spec.tsx +21 -21
  83. package/tests/components/form-control/checkbox/RadioGroup.spec.tsx +12 -12
  84. package/tests/components/form-control/color-picker/ColorPicker.spec.tsx +10 -10
  85. package/tests/components/form-control/combobox/Combobox.spec.tsx +16 -16
  86. package/tests/components/form-control/combobox/ComboboxItem.spec.tsx +7 -7
  87. package/tests/components/form-control/date-range-picker/DateRangePicker.spec.tsx +24 -24
  88. package/tests/components/form-control/field/DatePicker.spec.tsx +50 -50
  89. package/tests/components/form-control/field/DateTimePicker.spec.tsx +47 -47
  90. package/tests/components/form-control/field/NumberInput.spec.tsx +54 -54
  91. package/tests/components/form-control/field/TextInput.spec.tsx +49 -49
  92. package/tests/components/form-control/field/Textarea.spec.tsx +33 -33
  93. package/tests/components/form-control/field/TimePicker.spec.tsx +42 -42
  94. package/tests/components/form-control/numpad/Numpad.spec.tsx +40 -40
  95. package/tests/components/form-control/select/Select.spec.tsx +9 -9
  96. package/tests/components/form-control/select/SelectItem.spec.tsx +10 -10
  97. package/tests/helpers/createAppStructure.spec.tsx +57 -57
  98. package/tests/helpers/mergeStyles.spec.ts +31 -31
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/helpers/createAppStructure.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -0,0 +1,3 @@
1
+ import { type Context } from "solid-js";
2
+ export declare function createHmrSafeContext<TValue>(key: string): Context<TValue | undefined>;
3
+ //# sourceMappingURL=createHmrSafeContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createHmrSafeContext.d.ts","sourceRoot":"","sources":["..\\..\\src\\helpers\\createHmrSafeContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAiB,MAAM,UAAU,CAAC;AAKvD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAErF"}
@@ -0,0 +1,10 @@
1
+ import { createContext } from "solid-js";
2
+ const CACHE_KEY = "__simplysm_ctx__";
3
+ const cache = globalThis[CACHE_KEY] ?? (globalThis[CACHE_KEY] = {});
4
+ function createHmrSafeContext(key) {
5
+ return cache[key] ?? (cache[key] = createContext());
6
+ }
7
+ export {
8
+ createHmrSafeContext
9
+ };
10
+ //# sourceMappingURL=createHmrSafeContext.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/helpers/createHmrSafeContext.ts"],
4
+ "mappings": "AAAA,SAAuB,qBAAqB;AAE5C,MAAM,YAAY;AAClB,MAAM,QAAU,kDAAiF,CAAC;AAE3F,SAAS,qBAA6B,KAA0C;AACrF,SAAQ,4BAAe,cAAsB;AAC/C;",
5
+ "names": []
6
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"createSelectionGroup.d.ts","sourceRoot":"","sources":["..\\..\\src\\hooks\\createSelectionGroup.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createSelectionGroup.d.ts","sourceRoot":"","sources":["..\\..\\src\\hooks\\createSelectionGroup.tsx"],"names":[],"mappings":"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"}
@@ -5,12 +5,13 @@ import { mergeProps as _$mergeProps } from "solid-js/web";
5
5
  import { createComponent as _$createComponent } from "solid-js/web";
6
6
  import { memo as _$memo } from "solid-js/web";
7
7
  var _tmpl$ = /* @__PURE__ */ _$template(`<div>`);
8
- import { createContext, createMemo, splitProps, useContext } from "solid-js";
8
+ import { createMemo, splitProps, useContext } from "solid-js";
9
+ import { createHmrSafeContext } from "../helpers/createHmrSafeContext.js";
9
10
  import { twMerge } from "tailwind-merge";
10
11
  import { createControllableSignal } from "./createControllableSignal.js";
11
12
  import { Invalid } from "../components/form-control/Invalid.js";
12
13
  function createSelectionGroup(config) {
13
- const Context = createContext();
14
+ const Context = createHmrSafeContext(`SelectionGroup_${config.contextName}`);
14
15
  const ItemComponent = config.ItemComponent;
15
16
  function ItemInner(props) {
16
17
  const ctx = useContext(Context);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/createSelectionGroup.tsx"],
4
- "mappings": "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",
5
- "names": ["createContext", "createMemo", "splitProps", "useContext", "twMerge", "createControllableSignal", "Invalid", "createSelectionGroup", "config", "Context", "ItemComponent", "ItemInner", "props", "ctx", "Error", "contextName", "isSelected", "mode", "value", "includes", "handleChange", "toggle", "select", "_$createComponent", "onValueChange", "disabled", "size", "inline", "inset", "children", "GroupInner", "local", "rest", "contextValue", "setValue", "onChange", "item", "prev", "filter", "v", "errorMsg", "required", "length", "emptyErrorMsg", "validate", "undefined", "message", "variant", "touchMode", "Provider", "_el$", "_tmpl$", "_$spread", "_$mergeProps", "class", "style", "_$insert", "Group", "Item"]
4
+ "mappings": "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",
5
+ "names": ["createMemo", "splitProps", "useContext", "createHmrSafeContext", "twMerge", "createControllableSignal", "Invalid", "createSelectionGroup", "config", "Context", "contextName", "ItemComponent", "ItemInner", "props", "ctx", "Error", "isSelected", "mode", "value", "includes", "handleChange", "toggle", "select", "_$createComponent", "onValueChange", "disabled", "size", "inline", "inset", "children", "GroupInner", "local", "rest", "contextValue", "setValue", "onChange", "item", "prev", "filter", "v", "errorMsg", "required", "length", "emptyErrorMsg", "validate", "undefined", "message", "variant", "touchMode", "Provider", "_el$", "_tmpl$", "_$spread", "_$mergeProps", "class", "style", "_$insert", "Group", "Item"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/solid",
3
- "version": "13.0.70",
3
+ "version": "13.0.71",
4
4
  "description": "Simplysm package - SolidJS library",
5
5
  "author": "simplysm",
6
6
  "license": "Apache-2.0",
@@ -48,12 +48,13 @@
48
48
  "jspdf": "^4.2.0",
49
49
  "solid-js": "^1.9.11",
50
50
  "solid-tiptap": "^0.8.0",
51
+ "tabbable": "^6.4.0",
51
52
  "tailwind-merge": "^3.5.0",
52
53
  "tailwindcss": "^3.4.19",
53
- "@simplysm/core-browser": "13.0.70",
54
- "@simplysm/core-common": "13.0.70",
55
- "@simplysm/service-common": "13.0.70",
56
- "@simplysm/service-client": "13.0.70"
54
+ "@simplysm/core-common": "13.0.71",
55
+ "@simplysm/core-browser": "13.0.71",
56
+ "@simplysm/service-client": "13.0.71",
57
+ "@simplysm/service-common": "13.0.71"
57
58
  },
58
59
  "devDependencies": {
59
60
  "@solidjs/testing-library": "^0.8.10"
@@ -18,6 +18,7 @@ import { twMerge } from "tailwind-merge";
18
18
  import { mergeStyles } from "../../helpers/mergeStyles";
19
19
  import { createSlotComponent } from "../../helpers/createSlotComponent";
20
20
  import { borderSubtle } from "../../styles/tokens.styles";
21
+ import { tabbable } from "tabbable";
21
22
 
22
23
  // --- DropdownContext (internal) ---
23
24
 
@@ -70,13 +71,15 @@ export interface DropdownProps {
70
71
  * Enable keyboard navigation (used in Select, etc)
71
72
  *
72
73
  * When direction=down:
73
- * - ArrowDown from trigger -> focus first focusable item
74
- * - ArrowUp from first item -> focus trigger
74
+ * - ArrowDown from trigger -> focus first tabbable item in popup
75
+ * - ArrowUp/ArrowDown within popup -> navigate between tabbable items
76
+ * - ArrowUp from first tabbable -> focus trigger
75
77
  * - ArrowUp from trigger -> close
76
78
  *
77
79
  * When direction=up:
78
- * - ArrowUp from trigger -> focus last focusable item
79
- * - ArrowDown from last item -> focus trigger
80
+ * - ArrowUp from trigger -> focus last tabbable item in popup
81
+ * - ArrowUp/ArrowDown within popup -> navigate between tabbable items
82
+ * - ArrowDown from last tabbable -> focus trigger
80
83
  * - ArrowDown from trigger -> close
81
84
  */
82
85
  keyboardNav?: boolean;
@@ -319,11 +322,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
319
322
  if (!popup) return;
320
323
 
321
324
  const dir = direction();
322
- const focusables = [
323
- ...popup.querySelectorAll<HTMLElement>(
324
- '[tabindex]:not([tabindex="-1"]), button, [data-list-item]',
325
- ),
326
- ];
325
+ const focusables = tabbable(popup);
327
326
 
328
327
  if (dir === "down") {
329
328
  if (e.key === "ArrowDown" && focusables.length > 0) {
@@ -354,16 +353,30 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
354
353
 
355
354
  if (!triggerRef) return;
356
355
 
356
+ const popup = popupRef();
357
+ if (!popup) return;
358
+
357
359
  const dir = direction();
360
+ const allTabbable = tabbable(popup);
361
+ const current = (document.activeElement ?? e.target) as HTMLElement;
362
+ const currentIdx = allTabbable.indexOf(current);
358
363
 
359
- // If ArrowUp/ArrowDown not handled in popup (first/last item)
360
- // Move focus to trigger
361
- if (dir === "down" && e.key === "ArrowUp") {
362
- e.preventDefault();
363
- triggerRef.focus();
364
- } else if (dir === "up" && e.key === "ArrowDown") {
365
- e.preventDefault();
366
- triggerRef.focus();
364
+ if (e.key === "ArrowUp") {
365
+ if (currentIdx > 0) {
366
+ e.preventDefault();
367
+ allTabbable[currentIdx - 1].focus();
368
+ } else if (dir === "down") {
369
+ e.preventDefault();
370
+ triggerRef.focus();
371
+ }
372
+ } else if (e.key === "ArrowDown") {
373
+ if (currentIdx >= 0 && currentIdx < allTabbable.length - 1) {
374
+ e.preventDefault();
375
+ allTabbable[currentIdx + 1].focus();
376
+ } else if (dir === "up") {
377
+ e.preventDefault();
378
+ triggerRef.focus();
379
+ }
367
380
  }
368
381
  };
369
382
 
@@ -432,6 +445,7 @@ export const Dropdown: DropdownComponent = ((props: DropdownProps) => {
432
445
  ref={(el) => {
433
446
  triggerRef = el;
434
447
  }}
448
+ tabIndex={-1}
435
449
  data-dropdown-trigger
436
450
  onClick={toggle}
437
451
  onKeyDown={handleTriggerKeyDown}
@@ -46,3 +46,8 @@ function reindex(): void {
46
46
  export function isTopmost(el: HTMLElement): boolean {
47
47
  return stack.length > 0 && stack[stack.length - 1] === el;
48
48
  }
49
+
50
+ /** Get the topmost (front-most) Dialog element, or null if none are open */
51
+ export function getTopmostDialog(): HTMLElement | null {
52
+ return stack.length > 0 ? stack[stack.length - 1] : null;
53
+ }
@@ -2,12 +2,15 @@ import {
2
2
  children,
3
3
  createMemo,
4
4
  createSignal,
5
+ createUniqueId,
5
6
  type JSX,
7
+ onCleanup,
6
8
  onMount,
7
9
  Show,
8
10
  splitProps,
9
11
  useContext,
10
12
  } from "solid-js";
13
+ import { registerCrud, unregisterCrud, activateCrud, isActiveCrud } from "../crudRegistry";
11
14
  import { reconcile, unwrap } from "solid-js/store";
12
15
  import { createControllableStore } from "../../../hooks/createControllableStore";
13
16
  import { objClone, objEqual } from "@simplysm/core-common";
@@ -82,6 +85,8 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
82
85
 
83
86
  let formRef: HTMLFormElement | undefined;
84
87
 
88
+ const crudId = createUniqueId();
89
+
85
90
  // -- Load --
86
91
  async function doLoad() {
87
92
  setBusyCount((c) => c + 1);
@@ -100,6 +105,10 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
100
105
  onMount(() => {
101
106
  void doLoad();
102
107
  });
108
+ onCleanup(() => unregisterCrud(crudId));
109
+
110
+ createEventListener(() => formRef, "pointerdown", () => activateCrud(crudId));
111
+ createEventListener(() => formRef, "focusin", () => activateCrud(crudId));
103
112
 
104
113
  // -- Change Detection --
105
114
  function hasChanges(): boolean {
@@ -177,13 +186,15 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
177
186
 
178
187
  // -- Keyboard Shortcuts --
179
188
  createEventListener(document, "keydown", (e: KeyboardEvent) => {
180
- if (!formRef?.contains(document.activeElement)) return;
189
+ if (!isActiveCrud(crudId)) return;
181
190
  if (e.ctrlKey && e.key === "s") {
182
191
  e.preventDefault();
183
- formRef.requestSubmit();
192
+ e.stopImmediatePropagation();
193
+ formRef?.requestSubmit();
184
194
  }
185
195
  if (e.ctrlKey && e.altKey && e.key === "l") {
186
196
  e.preventDefault();
197
+ e.stopImmediatePropagation();
187
198
  void handleRefresh();
188
199
  }
189
200
  });
@@ -273,11 +284,11 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
273
284
  <BusyContainer
274
285
  ready={ready()}
275
286
  busy={busyCount() > 0}
276
- class={clsx("flex h-full flex-col", local.class)}
287
+ class={clsx("flex h-full flex-col gap-2", local.class)}
277
288
  >
278
289
  {/* Toolbar */}
279
290
  <Show when={(!isModal && !topbarCtx) || defs().tools}>
280
- <div class="flex gap-2 p-2 pb-0">
291
+ <div class="flex gap-2 pb-0">
281
292
  <Show when={!topbarCtx && !isModal}>
282
293
  <Show when={canEdit() && local.submit}>
283
294
  <Button
@@ -324,7 +335,7 @@ const CrudDetailBase = <TData extends object>(props: CrudDetailProps<TData>) =>
324
335
  <Show when={defs().before}>{(beforeDef) => beforeDef().children}</Show>
325
336
 
326
337
  {/* Form */}
327
- <form ref={formRef} class="flex-1 overflow-auto p-4" onSubmit={handleFormSubmit}>
338
+ <form ref={(el) => { formRef = el; registerCrud(crudId, el); }} class="flex-1 overflow-auto" onSubmit={handleFormSubmit}>
328
339
  {formContent()}
329
340
  </form>
330
341
 
@@ -3,8 +3,10 @@ import {
3
3
  createEffect,
4
4
  createMemo,
5
5
  createSignal,
6
+ createUniqueId,
6
7
  For,
7
8
  type JSX,
9
+ onCleanup,
8
10
  Show,
9
11
  splitProps,
10
12
  useContext,
@@ -41,6 +43,7 @@ import {
41
43
  IconTrashOff,
42
44
  IconUpload,
43
45
  } from "@tabler/icons-solidjs";
46
+ import { registerCrud, unregisterCrud, activateCrud, isActiveCrud } from "../crudRegistry";
44
47
  import { CrudSheetColumn, isCrudSheetColumnDef } from "./CrudSheetColumn";
45
48
  import { CrudSheetFilter, isCrudSheetFilterDef } from "./CrudSheetFilter";
46
49
  import { CrudSheetTools, isCrudSheetToolsDef } from "./CrudSheetTools";
@@ -134,6 +137,11 @@ const CrudSheetBase = <TItem, TFilter extends Record<string, any>>(
134
137
 
135
138
  let formRef: HTMLFormElement | undefined;
136
139
 
140
+ const crudId = createUniqueId();
141
+ onCleanup(() => unregisterCrud(crudId));
142
+ createEventListener(() => formRef, "pointerdown", () => activateCrud(crudId));
143
+ createEventListener(() => formRef, "focusin", () => activateCrud(crudId));
144
+
137
145
  createEffect(() => {
138
146
  void doRefresh();
139
147
  });
@@ -389,13 +397,15 @@ const CrudSheetBase = <TItem, TFilter extends Record<string, any>>(
389
397
 
390
398
  // -- Keyboard Shortcuts --
391
399
  createEventListener(document, "keydown", async (e: KeyboardEvent) => {
392
- if (!formRef?.contains(document.activeElement)) return;
400
+ if (!isActiveCrud(crudId)) return;
393
401
  if (e.ctrlKey && e.key === "s" && !isSelectMode()) {
394
402
  e.preventDefault();
395
- formRef.requestSubmit();
403
+ e.stopImmediatePropagation();
404
+ formRef?.requestSubmit();
396
405
  }
397
406
  if (e.ctrlKey && e.altKey && e.key === "l") {
398
407
  e.preventDefault();
408
+ e.stopImmediatePropagation();
399
409
  if (!checkIgnoreChanges()) return;
400
410
  await doRefresh();
401
411
  }
@@ -602,7 +612,7 @@ const CrudSheetBase = <TItem, TFilter extends Record<string, any>>(
602
612
  </Show>
603
613
 
604
614
  {/* DataSheet */}
605
- <form ref={formRef} class="flex-1 overflow-hidden p-2 pt-1" onSubmit={handleFormSubmit}>
615
+ <form ref={(el) => { formRef = el; registerCrud(crudId, el); }} class="flex-1 overflow-hidden p-2 pt-1" onSubmit={handleFormSubmit}>
606
616
  <DataSheet
607
617
  class="h-full"
608
618
  items={items}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Crud activation registry
3
+ *
4
+ * Tracks mounted CrudDetail/CrudSheet instances and determines which one
5
+ * should respond to keyboard shortcuts (Ctrl+S, Ctrl+Alt+L).
6
+ *
7
+ * Priority rules:
8
+ * 1. If a Dialog is open, only cruds inside the topmost Dialog are candidates.
9
+ * 2. Among candidates, the most recently activated (interacted) crud wins.
10
+ * 3. On mount, cruds are auto-activated (last mounted = active).
11
+ */
12
+
13
+ import { getTopmostDialog } from "../disclosure/dialogZIndex";
14
+
15
+ interface CrudEntry {
16
+ id: string;
17
+ formEl: HTMLFormElement;
18
+ lastActivatedAt: number;
19
+ }
20
+
21
+ const entries: CrudEntry[] = [];
22
+ let _counter = 0;
23
+
24
+ export function registerCrud(id: string, formEl: HTMLFormElement): void {
25
+ const existing = entries.find((e) => e.id === id);
26
+ if (existing) return;
27
+ entries.push({ id, formEl, lastActivatedAt: ++_counter });
28
+ }
29
+
30
+ export function unregisterCrud(id: string): void {
31
+ const idx = entries.findIndex((e) => e.id === id);
32
+ if (idx >= 0) entries.splice(idx, 1);
33
+ }
34
+
35
+ export function activateCrud(id: string): void {
36
+ const entry = entries.find((e) => e.id === id);
37
+ if (entry) entry.lastActivatedAt = ++_counter;
38
+ }
39
+
40
+ export function isActiveCrud(id: string): boolean {
41
+ const entry = entries.find((e) => e.id === id);
42
+ if (!entry) return false;
43
+
44
+ const topDialog = getTopmostDialog();
45
+
46
+ const candidates = topDialog
47
+ ? entries.filter((e) => topDialog.contains(e.formEl))
48
+ : entries;
49
+
50
+ if (candidates.length === 0) return false;
51
+
52
+ let best = candidates[0];
53
+ for (let i = 1; i < candidates.length; i++) {
54
+ if (candidates[i].lastActivatedAt > best.lastActivatedAt) {
55
+ best = candidates[i];
56
+ }
57
+ }
58
+
59
+ return best.id === id;
60
+ }
@@ -10,7 +10,6 @@ import {
10
10
  splitProps,
11
11
  } from "solid-js";
12
12
  import clsx from "clsx";
13
- import { twMerge } from "tailwind-merge";
14
13
  import { DataSheet } from "../../data/sheet/DataSheet";
15
14
  import { Checkbox } from "../../form-control/checkbox/Checkbox";
16
15
  import { borderDefault } from "../../../styles/tokens.styles";
@@ -261,51 +260,55 @@ export const PermissionTable: Component<PermissionTableProps> = (props) => {
261
260
  };
262
261
 
263
262
  return (
264
- <div data-permission-table class={twMerge(local.class)} style={local.style}>
265
- <DataSheet
266
- items={visibleItems()}
267
- getChildren={getChildren}
268
- expandedItems={expandedItems()}
269
- onExpandedItemsChange={setExpandedItems}
270
- hideConfigBar
263
+ <DataSheet
264
+ data-permission-table
265
+ items={visibleItems()}
266
+ getChildren={getChildren}
267
+ expandedItems={expandedItems()}
268
+ onExpandedItemsChange={setExpandedItems}
269
+ hideConfigBar
270
+ >
271
+ <DataSheet.Column
272
+ key="title"
273
+ header={i18n?.t("permissionTable.permissionItem") ?? "Permission Item"}
274
+ sortable={false}
275
+ resizable={false}
271
276
  >
272
- <DataSheet.Column key="title" header={i18n?.t("permissionTable.permissionItem") ?? "Permission Item"} sortable={false} resizable={false}>
273
- {(ctx) => {
274
- const item = ctx.item as AppPerm;
275
- return (
276
- <div class={titleCellClass}>
277
- <For each={Array.from({ length: ctx.depth })}>
278
- {() => (
279
- <div class={indentGuideWrapperClass}>
280
- <div class={indentGuideLineClass} />
281
- </div>
282
- )}
283
- </For>
284
- <span class="py-1">{item.title}</span>
285
- </div>
286
- );
287
- }}
288
- </DataSheet.Column>
289
- <For each={allPerms()}>
290
- {(perm) => (
291
- <DataSheet.Column key={`perm-${perm}`} header={perm} sortable={false} resizable={false}>
292
- {(ctx) => {
293
- const item = ctx.item as AppPerm;
294
- return (
295
- <Show when={hasPermInTree(item, perm)}>
296
- <Checkbox
297
- value={isGroupPermChecked(item, perm, currentValue())}
298
- onValueChange={(checked) => handlePermChange(item, perm, checked)}
299
- disabled={local.disabled || isPermDisabled(item, perm, currentValue())}
300
- inset
301
- />
302
- </Show>
303
- );
304
- }}
305
- </DataSheet.Column>
306
- )}
307
- </For>
308
- </DataSheet>
309
- </div>
277
+ {(ctx) => {
278
+ const item = ctx.item as AppPerm;
279
+ return (
280
+ <div class={titleCellClass}>
281
+ <For each={Array.from({ length: ctx.depth })}>
282
+ {() => (
283
+ <div class={indentGuideWrapperClass}>
284
+ <div class={indentGuideLineClass} />
285
+ </div>
286
+ )}
287
+ </For>
288
+ <span class="py-1">{item.title}</span>
289
+ </div>
290
+ );
291
+ }}
292
+ </DataSheet.Column>
293
+ <For each={allPerms()}>
294
+ {(perm) => (
295
+ <DataSheet.Column key={`perm-${perm}`} header={perm} sortable={false} resizable={false}>
296
+ {(ctx) => {
297
+ const item = ctx.item as AppPerm;
298
+ return (
299
+ <Show when={hasPermInTree(item, perm)}>
300
+ <Checkbox
301
+ value={isGroupPermChecked(item, perm, currentValue())}
302
+ onValueChange={(checked) => handlePermChange(item, perm, checked)}
303
+ disabled={local.disabled || isPermDisabled(item, perm, currentValue())}
304
+ inset
305
+ />
306
+ </Show>
307
+ );
308
+ }}
309
+ </DataSheet.Column>
310
+ )}
311
+ </For>
312
+ </DataSheet>
310
313
  );
311
314
  };
@@ -90,12 +90,12 @@ export function SharedDataSelect<TItem>(props: SharedDataSelectProps<TItem>): JS
90
90
  <Select.ItemTemplate>{local.children}</Select.ItemTemplate>
91
91
  {local.modal && (
92
92
  <Select.Action onClick={() => void handleOpenModal()} aria-label={i18n?.t("sharedDataSelect.search") ?? "Search"}>
93
- <Icon icon={IconSearch} size="1em" />
93
+ <Icon icon={IconSearch} />
94
94
  </Select.Action>
95
95
  )}
96
96
  {local.editModal && (
97
97
  <Select.Action onClick={() => void handleOpenEditModal()} aria-label={i18n?.t("sharedDataSelect.edit") ?? "Edit"}>
98
- <Icon icon={IconEdit} size="1em" />
98
+ <Icon icon={IconEdit} />
99
99
  </Select.Action>
100
100
  )}
101
101
  </Select>