@nextsparkjs/testing 0.1.0-beta.39

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.
@@ -0,0 +1,1000 @@
1
+ // src/selectors/selector-factory.ts
2
+ function getNestedValue(obj, path) {
3
+ return path.split(".").reduce((current, key) => {
4
+ if (current && typeof current === "object" && key in current) {
5
+ return current[key];
6
+ }
7
+ return void 0;
8
+ }, obj);
9
+ }
10
+ function replacePlaceholders(selector, replacements) {
11
+ if (!replacements) return selector;
12
+ return Object.entries(replacements).reduce(
13
+ (result, [key, value]) => result.replace(new RegExp(`\\{${key}\\}`, "g"), String(value)),
14
+ selector
15
+ );
16
+ }
17
+ var isDevelopment = process.env.NODE_ENV === "development";
18
+ var isTest = process.env.NODE_ENV === "test";
19
+ var enableTestingAttributes = isDevelopment || isTest;
20
+ function createSelectorHelpers(selectors) {
21
+ function sel2(path, replacements) {
22
+ const value = getNestedValue(selectors, path);
23
+ if (value === void 0) {
24
+ if (process.env.NODE_ENV === "development") {
25
+ console.error(`[sel] Invalid selector path: "${path}"`);
26
+ }
27
+ return `INVALID_SELECTOR_${path.replace(/\./g, "_")}`;
28
+ }
29
+ if (typeof value !== "string") {
30
+ if (process.env.NODE_ENV === "development") {
31
+ console.error(
32
+ `[sel] Path "${path}" points to an object, not a string. Did you forget a property?`
33
+ );
34
+ }
35
+ return `INVALID_SELECTOR_${path.replace(/\./g, "_")}`;
36
+ }
37
+ return replacePlaceholders(value, replacements);
38
+ }
39
+ function cySelector2(path, replacements) {
40
+ return `[data-cy="${sel2(path, replacements)}"]`;
41
+ }
42
+ function selDev2(path, replacements) {
43
+ if (!enableTestingAttributes) return void 0;
44
+ return sel2(path, replacements);
45
+ }
46
+ function entitySelectors2(slug) {
47
+ return {
48
+ // Page
49
+ page: () => sel2("entities.page.container", { slug }),
50
+ title: () => sel2("entities.page.title", { slug }),
51
+ // Table
52
+ table: () => sel2("entities.table.element", { slug }),
53
+ tableContainer: () => sel2("entities.table.container", { slug }),
54
+ search: () => sel2("entities.table.search", { slug }),
55
+ addButton: () => sel2("entities.table.addButton", { slug }),
56
+ row: (id) => sel2("entities.table.row", { slug, id }),
57
+ rowMenu: (id) => sel2("entities.table.rowMenu", { slug, id }),
58
+ rowAction: (action, id) => sel2("entities.table.rowAction", { slug, action, id }),
59
+ cell: (field, id) => sel2("entities.table.cell", { slug, field, id }),
60
+ // Form
61
+ form: () => sel2("entities.form.container", { slug }),
62
+ field: (name) => sel2("entities.form.field", { slug, name }),
63
+ submitButton: () => sel2("entities.form.submitButton", { slug }),
64
+ // Header
65
+ header: (mode) => sel2("entities.header.container", { slug, mode }),
66
+ backButton: () => sel2("entities.header.backButton", { slug }),
67
+ editButton: () => sel2("entities.header.editButton", { slug }),
68
+ deleteButton: () => sel2("entities.header.deleteButton", { slug }),
69
+ // Detail
70
+ detail: () => sel2("entities.detail.container", { slug }),
71
+ // Filter
72
+ filter: (field) => sel2("entities.filter.container", { slug, field }),
73
+ filterTrigger: (field) => sel2("entities.filter.trigger", { slug, field }),
74
+ filterOption: (field, value) => sel2("entities.filter.option", { slug, field, value })
75
+ };
76
+ }
77
+ return {
78
+ SELECTORS: selectors,
79
+ sel: sel2,
80
+ s: sel2,
81
+ selDev: selDev2,
82
+ cySelector: cySelector2,
83
+ entitySelectors: entitySelectors2
84
+ };
85
+ }
86
+
87
+ // src/selectors/core-selectors.ts
88
+ var CORE_SELECTORS = {
89
+ // ===========================================================================
90
+ // AUTH
91
+ // ===========================================================================
92
+ auth: {
93
+ login: {
94
+ // Structure
95
+ card: "login-form-card",
96
+ header: "login-header",
97
+ footer: "login-footer",
98
+ form: "login-form",
99
+ options: "login-options",
100
+ // Inputs
101
+ emailInput: "login-email-input",
102
+ passwordInput: "login-password-input",
103
+ emailError: "login-email-error",
104
+ passwordError: "login-password-error",
105
+ // Buttons
106
+ submit: "login-submit",
107
+ googleSignin: "login-google-signin",
108
+ showEmail: "login-show-email",
109
+ hideEmail: "login-hide-email",
110
+ // Links
111
+ forgotPassword: "login-forgot-password",
112
+ signupLink: "login-signup-link",
113
+ // Misc
114
+ inviteBanner: "login-invite-banner",
115
+ errorAlert: "login-error-alert",
116
+ rememberCheckbox: "login-remember-checkbox"
117
+ },
118
+ signup: {
119
+ form: "signup-form",
120
+ firstName: "signup-first-name",
121
+ lastName: "signup-last-name",
122
+ email: "signup-email",
123
+ password: "signup-password",
124
+ confirmPassword: "signup-confirm-password",
125
+ submitButton: "signup-submit",
126
+ googleButton: "signup-google",
127
+ loginLink: "signup-login-link",
128
+ inviteBanner: "signup-invite-banner",
129
+ error: "signup-error"
130
+ },
131
+ forgotPassword: {
132
+ form: "forgot-password-form",
133
+ email: "forgot-password-email",
134
+ submitButton: "forgot-password-submit",
135
+ backToLogin: "forgot-password-back",
136
+ successMessage: "forgot-password-success",
137
+ successBack: "forgot-password-success-back",
138
+ retryButton: "forgot-password-retry",
139
+ error: "forgot-password-error"
140
+ },
141
+ resetPassword: {
142
+ form: "reset-password-form",
143
+ password: "reset-password-password",
144
+ confirmPassword: "reset-password-confirm",
145
+ submitButton: "reset-password-submit",
146
+ error: "reset-password-error",
147
+ success: "reset-password-success",
148
+ loginLink: "reset-password-login-link",
149
+ backToLogin: "reset-password-back"
150
+ },
151
+ verifyEmail: {
152
+ container: "verify-email-container",
153
+ resendButton: "verify-email-resend",
154
+ successMessage: "verify-email-success",
155
+ error: "verify-email-error"
156
+ },
157
+ devKeyring: {
158
+ container: "devkeyring-container",
159
+ trigger: "devkeyring-trigger",
160
+ content: "devkeyring-content",
161
+ user: "devkeyring-user-{index}"
162
+ }
163
+ },
164
+ // ===========================================================================
165
+ // DASHBOARD - Shell & TopNav
166
+ // ===========================================================================
167
+ dashboard: {
168
+ shell: {
169
+ container: "dashboard-container",
170
+ quickCreateButton: "topnav-quick-create-button",
171
+ quickCreateDropdown: "topnav-quick-create-dropdown",
172
+ quickCreateLink: "quick-create-{slug}-link"
173
+ },
174
+ topnav: {
175
+ sidebarToggle: "topnav-sidebar-toggle",
176
+ header: "topnav-header",
177
+ logo: "topnav-logo",
178
+ searchSection: "topnav-search-section",
179
+ actions: "topnav-actions",
180
+ notifications: "topnav-notifications",
181
+ help: "topnav-help",
182
+ themeToggle: "topnav-theme-toggle",
183
+ superadmin: "topnav-superadmin",
184
+ devtools: "topnav-devtools",
185
+ userMenuTrigger: "topnav-user-menu-trigger",
186
+ userMenu: "topnav-user-menu",
187
+ menuItem: "topnav-menu-{icon}",
188
+ menuAction: "topnav-menu-{action}",
189
+ userLoading: "topnav-user-loading",
190
+ signin: "topnav-signin",
191
+ signup: "topnav-signup",
192
+ // Mobile
193
+ mobileActions: "topnav-mobile-actions",
194
+ mobileMenuToggle: "topnav-mobile-menu-toggle",
195
+ mobileMenu: "topnav-mobile-menu",
196
+ mobileUserInfo: "topnav-mobile-user-info",
197
+ mobileLinkProfile: "topnav-mobile-link-profile",
198
+ mobileLinkSettings: "topnav-mobile-link-settings",
199
+ mobileLinkBilling: "topnav-mobile-link-billing",
200
+ mobileSignout: "topnav-mobile-signout",
201
+ mobileNavSuperadmin: "topnav-mobile-nav-superadmin",
202
+ mobileNavDevtools: "topnav-mobile-nav-devtools"
203
+ },
204
+ sidebar: {
205
+ main: "sidebar-main",
206
+ header: "sidebar-header",
207
+ content: "sidebar-content",
208
+ footer: "sidebar-footer"
209
+ },
210
+ navigation: {
211
+ main: "nav-main",
212
+ dashboardLink: "nav-link-dashboard",
213
+ entityLink: "nav-link-entity-{slug}",
214
+ section: "nav-section-{id}",
215
+ sectionLabel: "nav-section-label-{id}",
216
+ sectionItem: "nav-section-item-{sectionId}-{itemId}"
217
+ },
218
+ // Mobile components
219
+ mobile: {
220
+ topbar: {
221
+ header: "mobile-topbar-header",
222
+ userProfile: "mobile-topbar-user-profile",
223
+ notifications: "mobile-topbar-notifications",
224
+ themeToggle: "mobile-topbar-theme-toggle"
225
+ },
226
+ bottomNav: {
227
+ nav: "mobile-bottomnav-nav",
228
+ item: "mobile-bottomnav-item-{id}"
229
+ },
230
+ moreSheet: {
231
+ content: "mobile-more-sheet-content",
232
+ item: "mobile-more-sheet-item-{id}",
233
+ superadminLink: "mobile-more-sheet-superadmin-link",
234
+ teamSwitcher: "mobile-more-sheet-team-switcher",
235
+ signoutButton: "mobile-more-sheet-signout-button"
236
+ },
237
+ quickCreateSheet: {
238
+ content: "mobile-quick-create-sheet-content",
239
+ item: "mobile-quick-create-sheet-item-{slug}"
240
+ }
241
+ }
242
+ },
243
+ // ===========================================================================
244
+ // DASHBOARD - Entities (Dynamic with {slug})
245
+ // ===========================================================================
246
+ entities: {
247
+ page: {
248
+ container: "{slug}-page",
249
+ title: "{slug}-title"
250
+ },
251
+ list: {
252
+ container: "{slug}-list"
253
+ },
254
+ table: {
255
+ container: "{slug}-table-container",
256
+ element: "{slug}-table",
257
+ search: "{slug}-search",
258
+ addButton: "{slug}-add",
259
+ selectionCount: "{slug}-selection-count",
260
+ selectAll: "{slug}-select-all",
261
+ row: "{slug}-row-{id}",
262
+ rowSelect: "{slug}-select-{id}",
263
+ cell: "{slug}-cell-{field}-{id}",
264
+ rowMenu: "{slug}-menu-{id}",
265
+ rowActionsMenu: "{slug}-actions-{id}",
266
+ rowAction: "{slug}-menu-{action}-{id}",
267
+ quickAction: "{slug}-quick-{action}-{id}"
268
+ },
269
+ pagination: {
270
+ container: "{slug}-pagination",
271
+ pageSize: "{slug}-page-size",
272
+ pageSizeOption: "{slug}-page-size-{size}",
273
+ pageInfo: "{slug}-page-info",
274
+ first: "{slug}-page-first",
275
+ prev: "{slug}-page-prev",
276
+ next: "{slug}-page-next",
277
+ last: "{slug}-page-last"
278
+ },
279
+ bulk: {
280
+ bar: "{slug}-bulk-bar",
281
+ count: "{slug}-bulk-count",
282
+ selectAll: "{slug}-bulk-select-all",
283
+ statusButton: "{slug}-bulk-status",
284
+ deleteButton: "{slug}-bulk-delete",
285
+ clearButton: "{slug}-bulk-clear",
286
+ statusDialog: "{slug}-bulk-status-dialog",
287
+ statusSelect: "{slug}-bulk-status-select",
288
+ statusOption: "{slug}-bulk-status-option-{value}",
289
+ statusCancel: "{slug}-bulk-status-cancel",
290
+ statusConfirm: "{slug}-bulk-status-confirm",
291
+ deleteDialog: "{slug}-bulk-delete-dialog",
292
+ deleteCancel: "{slug}-bulk-delete-cancel",
293
+ deleteConfirm: "{slug}-bulk-delete-confirm"
294
+ },
295
+ header: {
296
+ container: "{slug}-{mode}-header",
297
+ backButton: "{slug}-back-btn",
298
+ title: "{slug}-title",
299
+ copyId: "{slug}-copy-id",
300
+ editButton: "{slug}-edit-btn",
301
+ deleteButton: "{slug}-delete-btn",
302
+ deleteDialog: "{slug}-delete-dialog",
303
+ deleteCancel: "{slug}-delete-cancel",
304
+ deleteConfirm: "{slug}-delete-confirm"
305
+ },
306
+ detail: {
307
+ container: "{slug}-detail"
308
+ },
309
+ form: {
310
+ container: "{slug}-form",
311
+ field: "{slug}-field-{name}",
312
+ submitButton: "{slug}-form-submit",
313
+ cancelButton: "{slug}-form-cancel"
314
+ },
315
+ filter: {
316
+ container: "{slug}-filter-{field}",
317
+ trigger: "{slug}-filter-{field}-trigger",
318
+ content: "{slug}-filter-{field}-content",
319
+ option: "{slug}-filter-{field}-option-{value}",
320
+ badge: "{slug}-filter-{field}-badge-{value}",
321
+ removeBadge: "{slug}-filter-{field}-remove-{value}",
322
+ clearAll: "{slug}-filter-{field}-clear-all"
323
+ },
324
+ search: {
325
+ container: "{slug}-search",
326
+ icon: "{slug}-search-icon",
327
+ input: "{slug}-search-input",
328
+ clear: "{slug}-search-clear"
329
+ },
330
+ confirm: {
331
+ dialog: "{slug}-confirm-dialog",
332
+ cancel: "{slug}-confirm-cancel",
333
+ action: "{slug}-confirm-action"
334
+ },
335
+ childEntity: {
336
+ container: "{parentSlug}-{childName}-container",
337
+ addButton: "{parentSlug}-{childName}-add-button"
338
+ }
339
+ },
340
+ // ===========================================================================
341
+ // DASHBOARD - Global Search
342
+ // ===========================================================================
343
+ globalSearch: {
344
+ modal: "search-modal",
345
+ trigger: "search-trigger",
346
+ input: "search-input",
347
+ results: "search-results",
348
+ result: "search-result"
349
+ },
350
+ // ===========================================================================
351
+ // DASHBOARD - Taxonomies (Categories, Tags, etc.)
352
+ // ===========================================================================
353
+ taxonomies: {
354
+ list: {
355
+ container: "taxonomies-list-table",
356
+ createButton: "taxonomies-create-button",
357
+ row: "taxonomy-row-{id}",
358
+ editButton: "taxonomies-edit-{id}",
359
+ deleteButton: "taxonomies-delete-{id}"
360
+ },
361
+ form: {
362
+ dialog: "taxonomy-form-dialog",
363
+ nameInput: "taxonomy-name-input",
364
+ slugInput: "taxonomy-slug-input",
365
+ descriptionInput: "taxonomy-description-input",
366
+ iconInput: "taxonomy-icon-input",
367
+ colorInput: "taxonomy-color-input",
368
+ parentSelect: "taxonomy-parent-select",
369
+ orderInput: "taxonomy-order-input",
370
+ saveButton: "taxonomy-save-button",
371
+ cancelButton: "taxonomy-cancel-button"
372
+ },
373
+ confirmDelete: {
374
+ dialog: "taxonomy-delete-dialog",
375
+ confirmButton: "taxonomy-delete-confirm",
376
+ cancelButton: "taxonomy-delete-cancel"
377
+ }
378
+ },
379
+ // ===========================================================================
380
+ // DASHBOARD - Teams
381
+ // ===========================================================================
382
+ teams: {
383
+ switcher: {
384
+ compact: "team-switcher-compact",
385
+ full: "team-switcher",
386
+ dropdown: "team-switcher-dropdown",
387
+ option: "team-option-{slug}",
388
+ manageLink: "manage-teams-link",
389
+ createButton: "create-team-button"
390
+ },
391
+ switchModal: {
392
+ container: "team-switch-modal"
393
+ },
394
+ create: {
395
+ dialog: "create-team-dialog",
396
+ button: "create-team-button",
397
+ nameInput: "team-name-input",
398
+ slugInput: "team-slug-input",
399
+ descriptionInput: "team-description-input",
400
+ cancel: "cancel-create-team",
401
+ submit: "submit-create-team"
402
+ },
403
+ members: {
404
+ section: "team-members-section",
405
+ row: "member-row-{id}",
406
+ actions: "member-actions-{id}",
407
+ makeRole: "make-{role}-action",
408
+ remove: "remove-member-action"
409
+ },
410
+ invite: {
411
+ button: "invite-member-button",
412
+ buttonDisabled: "invite-member-button-disabled",
413
+ dialog: "invite-member-dialog",
414
+ emailInput: "member-email-input",
415
+ roleSelect: "member-role-select",
416
+ roleOption: "role-option-{role}",
417
+ cancel: "cancel-invite-member",
418
+ submit: "submit-invite-member"
419
+ },
420
+ invitations: {
421
+ row: "invitation-row-{id}",
422
+ cancel: "cancel-invitation-{id}"
423
+ }
424
+ },
425
+ // ===========================================================================
426
+ // DASHBOARD - Block Editor (Pages & Posts)
427
+ // ===========================================================================
428
+ blockEditor: {
429
+ container: "builder-editor",
430
+ titleInput: "editor-title-input",
431
+ slugInput: "editor-slug-input",
432
+ saveButton: "save-btn",
433
+ statusBadge: "status-badge",
434
+ leftSidebarToggle: "left-sidebar-toggle",
435
+ viewModeToggle: "view-mode-toggle",
436
+ blockPicker: {
437
+ container: "block-picker",
438
+ searchInput: "block-search-input",
439
+ categoryAll: "category-all",
440
+ category: "category-{category}",
441
+ blockItem: "block-item-{slug}",
442
+ addBlock: "add-block-{slug}"
443
+ },
444
+ blockCanvas: {
445
+ container: "block-preview-canvas",
446
+ empty: "block-preview-canvas-empty"
447
+ },
448
+ previewCanvas: {
449
+ container: "block-preview-canvas",
450
+ empty: "block-preview-canvas-empty",
451
+ block: "preview-block-{id}",
452
+ moveUp: "preview-block-{id}-move-up",
453
+ moveDown: "preview-block-{id}-move-down"
454
+ },
455
+ sortableBlock: {
456
+ container: "sortable-block-{id}",
457
+ dragHandle: "drag-handle-{id}",
458
+ duplicate: "duplicate-block-{id}",
459
+ remove: "remove-block-{id}",
460
+ error: "block-error-{id}"
461
+ },
462
+ settingsPanel: {
463
+ container: "block-settings-panel",
464
+ empty: "settings-panel-empty",
465
+ error: "settings-panel-error",
466
+ resetProps: "reset-block-props",
467
+ removeBlock: "remove-block-settings",
468
+ tabContent: "tab-content",
469
+ tabDesign: "tab-design",
470
+ tabAdvanced: "tab-advanced"
471
+ },
472
+ pageSettings: {
473
+ container: "page-settings-panel",
474
+ seoTrigger: "seo-settings-trigger",
475
+ metaTitle: "seo-meta-title",
476
+ metaDescription: "seo-meta-description",
477
+ metaKeywords: "seo-meta-keywords",
478
+ ogImage: "seo-og-image",
479
+ customFieldsTrigger: "custom-fields-trigger",
480
+ customFieldKey: "custom-field-key-{index}",
481
+ customFieldValue: "custom-field-value-{index}",
482
+ customFieldRemove: "custom-field-remove-{index}",
483
+ addCustomField: "add-custom-field"
484
+ },
485
+ statusSelector: {
486
+ trigger: "status-selector",
487
+ option: "status-option-{value}"
488
+ },
489
+ dynamicForm: {
490
+ container: "dynamic-form",
491
+ field: "field-{name}",
492
+ fieldGroup: "field-group-{id}",
493
+ arrayGroup: "array-group-{name}"
494
+ },
495
+ arrayField: {
496
+ container: "array-field-{name}",
497
+ item: "array-field-{name}-{index}-{field}",
498
+ moveUp: "array-field-{name}-{index}-move-up",
499
+ moveDown: "array-field-{name}-{index}-move-down",
500
+ remove: "array-field-{name}-{index}-remove",
501
+ add: "array-field-{name}-add"
502
+ },
503
+ entityFieldsSidebar: {
504
+ container: "entity-fields-sidebar",
505
+ field: "field-{name}",
506
+ category: "category-{slug}"
507
+ },
508
+ // Post-specific fields
509
+ postFields: {
510
+ excerpt: "field-excerpt",
511
+ featuredImage: "field-featuredImage",
512
+ featuredImageUpload: "field-featuredImage-upload",
513
+ categories: "field-categories",
514
+ categoryOption: "category-option-{id}",
515
+ categoryBadge: "category-badge-{id}",
516
+ categoryRemove: "category-remove-{id}"
517
+ },
518
+ // Page/Post locale field
519
+ localeField: {
520
+ select: "field-locale",
521
+ option: "locale-option-{locale}"
522
+ }
523
+ },
524
+ // ===========================================================================
525
+ // SETTINGS
526
+ // ===========================================================================
527
+ settings: {
528
+ layout: {
529
+ main: "settings-layout-main",
530
+ nav: "settings-layout-nav",
531
+ backToDashboard: "settings-layout-back-to-dashboard",
532
+ header: "settings-layout-header",
533
+ contentArea: "settings-layout-content-area",
534
+ sidebar: "settings-layout-sidebar",
535
+ pageContent: "settings-layout-page-content"
536
+ },
537
+ sidebar: {
538
+ main: "settings-sidebar-main",
539
+ header: "settings-sidebar-header",
540
+ navItems: "settings-sidebar-nav-items",
541
+ navItem: "settings-sidebar-nav-{section}"
542
+ },
543
+ overview: {
544
+ container: "settings-overview",
545
+ item: "settings-overview-{key}"
546
+ },
547
+ profile: {
548
+ container: "settings-profile",
549
+ form: "profile-form",
550
+ avatar: "profile-avatar",
551
+ avatarUpload: "profile-avatar-upload",
552
+ firstName: "profile-first-name",
553
+ lastName: "profile-last-name",
554
+ email: "profile-email",
555
+ submitButton: "profile-submit",
556
+ successMessage: "profile-success"
557
+ },
558
+ password: {
559
+ container: "settings-password",
560
+ form: "password-form",
561
+ currentPassword: "password-current",
562
+ newPassword: "password-new",
563
+ confirmPassword: "password-confirm",
564
+ submitButton: "password-submit",
565
+ successMessage: "password-success"
566
+ },
567
+ team: {
568
+ container: "settings-team",
569
+ name: "team-name",
570
+ slug: "team-slug",
571
+ description: "team-description",
572
+ avatar: "team-avatar",
573
+ avatarUpload: "team-avatar-upload",
574
+ submitButton: "team-submit",
575
+ deleteButton: "team-delete",
576
+ deleteDialog: "team-delete-dialog",
577
+ deleteConfirm: "team-delete-confirm"
578
+ },
579
+ members: {
580
+ container: "settings-members",
581
+ inviteButton: "members-invite",
582
+ inviteDialog: "members-invite-dialog",
583
+ inviteEmail: "members-invite-email",
584
+ inviteRole: "members-invite-role",
585
+ inviteSubmit: "members-invite-submit",
586
+ memberRow: "member-row-{id}",
587
+ memberRole: "member-role-{id}",
588
+ memberRemove: "member-remove-{id}",
589
+ pendingInvites: "members-pending-invites",
590
+ pendingInvite: "pending-invite-{id}",
591
+ cancelInvite: "cancel-invite-{id}"
592
+ },
593
+ billing: {
594
+ container: "settings-billing",
595
+ main: "billing-main",
596
+ header: "billing-header",
597
+ currentPlan: "billing-current-plan",
598
+ upgradeButton: "billing-upgrade",
599
+ upgradePlan: "billing-upgrade-plan",
600
+ cancelButton: "billing-cancel",
601
+ addPayment: "billing-add-payment",
602
+ invoicesTable: "billing-invoices",
603
+ invoicesTableAlt: "invoices-table",
604
+ invoiceRow: "invoice-row-{id}",
605
+ invoicesRow: "invoices-row",
606
+ invoiceDownload: "invoice-download-{id}",
607
+ invoicesLoadMore: "invoices-load-more",
608
+ invoiceStatusBadge: "invoice-status-badge",
609
+ paymentMethod: "billing-payment-method",
610
+ paymentMethodAlt: "payment-method",
611
+ updatePayment: "billing-update-payment",
612
+ usage: "billing-usage",
613
+ usageDashboard: "usage-dashboard"
614
+ },
615
+ pricing: {
616
+ table: "pricing-table",
617
+ settingsTable: "pricing-settings-table"
618
+ },
619
+ features: {
620
+ placeholder: "feature-placeholder-{feature}",
621
+ content: "{feature}-content",
622
+ placeholderUpgradeBtn: "placeholder-upgrade-btn"
623
+ },
624
+ apiKeys: {
625
+ page: "api-keys-page",
626
+ title: "api-keys-title",
627
+ container: "settings-api-keys",
628
+ createButton: "api-keys-create-button",
629
+ createDialog: "api-keys-create-dialog",
630
+ list: "api-keys-list",
631
+ skeleton: "api-keys-skeleton",
632
+ empty: "api-keys-empty",
633
+ emptyCreateButton: "api-keys-empty-create-button",
634
+ keyName: "api-key-name",
635
+ keyScopes: "api-key-scopes",
636
+ scopeOption: "api-key-scope-{scope}",
637
+ createSubmit: "api-key-create-submit",
638
+ keyRow: "api-key-row-{id}",
639
+ keyName_: "api-keys-name-{id}",
640
+ keyPrefix: "api-keys-prefix-{id}",
641
+ copyPrefix: "api-keys-copy-prefix-{id}",
642
+ keyStatus: "api-keys-status-{id}",
643
+ statusBadge: "api-keys-status-badge-{id}",
644
+ menuTrigger: "api-keys-menu-trigger-{id}",
645
+ menu: "api-keys-menu-{id}",
646
+ viewDetails: "api-keys-view-details-{id}",
647
+ toggle: "api-keys-toggle-{id}",
648
+ revoke: "api-keys-revoke-{id}",
649
+ scopes: "api-keys-scopes-{id}",
650
+ scope: "api-keys-scope-{id}-{scope}",
651
+ stats: "api-keys-stats-{id}",
652
+ totalRequests: "api-keys-total-requests-{id}",
653
+ last24h: "api-keys-last-24h-{id}",
654
+ avgTime: "api-keys-avg-time-{id}",
655
+ metadata: "api-keys-metadata-{id}",
656
+ createdAt: "api-keys-created-at-{id}",
657
+ lastUsed: "api-keys-last-used-{id}",
658
+ expiresAt: "api-keys-expires-at-{id}",
659
+ detailsDialog: "api-keys-details-dialog",
660
+ detailsTitle: "api-keys-details-title",
661
+ detailsLoading: "api-keys-details-loading",
662
+ detailsContent: "api-keys-details-content",
663
+ detailsBasicInfo: "api-keys-details-basic-info",
664
+ detailsName: "api-keys-details-name",
665
+ detailsStatus: "api-keys-details-status",
666
+ detailsStats: "api-keys-details-stats",
667
+ detailsTotalRequests: "api-keys-details-total-requests",
668
+ detailsLast24h: "api-keys-details-last-24h",
669
+ detailsLast7d: "api-keys-details-last-7d",
670
+ detailsLast30d: "api-keys-details-last-30d",
671
+ detailsAvgTime: "api-keys-details-avg-time",
672
+ detailsSuccessRate: "api-keys-details-success-rate",
673
+ keyReveal: "api-key-reveal-{id}",
674
+ keyRevoke: "api-key-revoke-{id}",
675
+ revokeDialog: "api-key-revoke-dialog",
676
+ revokeConfirm: "api-key-revoke-confirm",
677
+ newKeyDisplay: "api-key-new-display",
678
+ copyKey: "api-key-copy",
679
+ dialogFooter: "api-keys-dialog-footer"
680
+ },
681
+ notifications: {
682
+ container: "settings-notifications",
683
+ emailToggle: "notifications-email",
684
+ pushToggle: "notifications-push",
685
+ category: "notifications-{category}",
686
+ submitButton: "notifications-submit"
687
+ },
688
+ teams: {
689
+ main: "teams-settings-main",
690
+ header: "teams-settings-header",
691
+ loading: "teams-settings-loading",
692
+ singleUser: "teams-settings-single-user",
693
+ teamsList: "teams-settings-teams-list",
694
+ teamDetails: "teams-settings-team-details"
695
+ },
696
+ plans: {
697
+ main: "plans-settings-main",
698
+ header: "plans-settings-header",
699
+ table: "plans-settings-table"
700
+ }
701
+ },
702
+ // ===========================================================================
703
+ // SUPERADMIN (Super Admin Panel)
704
+ // ===========================================================================
705
+ superadmin: {
706
+ container: "superadmin-container",
707
+ navigation: {
708
+ dashboard: "superadmin-nav-dashboard",
709
+ users: "superadmin-nav-users",
710
+ teams: "superadmin-nav-teams",
711
+ teamRoles: "superadmin-nav-team-roles",
712
+ docs: "superadmin-nav-docs",
713
+ subscriptions: "superadmin-nav-subscriptions",
714
+ analytics: "superadmin-nav-analytics",
715
+ config: "superadmin-nav-config",
716
+ exitToDashboard: "superadmin-sidebar-exit-to-dashboard"
717
+ },
718
+ dashboard: {
719
+ container: "superadmin-dashboard"
720
+ },
721
+ users: {
722
+ container: "superadmin-users-container",
723
+ table: "superadmin-users-table",
724
+ search: "superadmin-users-search",
725
+ row: "superadmin-user-row-{id}",
726
+ viewButton: "superadmin-user-view-{id}",
727
+ editButton: "superadmin-user-edit-{id}",
728
+ banButton: "superadmin-user-ban-{id}",
729
+ deleteButton: "superadmin-user-delete-{id}",
730
+ impersonateButton: "superadmin-user-impersonate-{id}"
731
+ },
732
+ userDetail: {
733
+ container: "superadmin-user-detail",
734
+ email: "superadmin-user-email",
735
+ role: "superadmin-user-role",
736
+ status: "superadmin-user-status",
737
+ teams: "superadmin-user-teams",
738
+ activity: "superadmin-user-activity",
739
+ actions: "superadmin-user-actions",
740
+ // User Metadata
741
+ metas: "superadmin-user-metas",
742
+ metasTitle: "superadmin-user-metas-title",
743
+ metasTable: "superadmin-user-metas-table",
744
+ metasEmpty: "superadmin-user-metas-empty",
745
+ metaRow: "superadmin-user-meta-row-{key}",
746
+ metaKey: "superadmin-user-meta-key-{key}",
747
+ metaValue: "superadmin-user-meta-value-{key}",
748
+ metaType: "superadmin-user-meta-type-{key}",
749
+ metaPublic: "superadmin-user-meta-public-{key}",
750
+ metaSearchable: "superadmin-user-meta-searchable-{key}"
751
+ },
752
+ teams: {
753
+ container: "superadmin-teams-container",
754
+ table: "superadmin-teams-table",
755
+ search: "superadmin-teams-search",
756
+ row: "superadmin-team-row-{id}",
757
+ actionsButton: "superadmin-team-actions-{id}",
758
+ viewButton: "superadmin-team-view-{id}",
759
+ editButton: "superadmin-team-edit-{id}",
760
+ deleteButton: "superadmin-team-delete-{id}"
761
+ },
762
+ teamDetail: {
763
+ container: "superadmin-team-detail",
764
+ name: "superadmin-team-name",
765
+ owner: "superadmin-team-owner",
766
+ members: "superadmin-team-members",
767
+ plan: "superadmin-team-plan",
768
+ usage: "superadmin-team-usage"
769
+ },
770
+ subscriptions: {
771
+ container: "superadmin-subscriptions-container",
772
+ mrr: "superadmin-subscriptions-mrr",
773
+ planDistribution: "superadmin-subscriptions-plan-distribution",
774
+ planCount: "superadmin-subscriptions-plan-count-{plan}",
775
+ activeCount: "superadmin-subscriptions-active-count"
776
+ },
777
+ pagination: {
778
+ pageSize: "superadmin-page-size-select",
779
+ first: "superadmin-pagination-first",
780
+ prev: "superadmin-pagination-prev",
781
+ next: "superadmin-pagination-next",
782
+ last: "superadmin-pagination-last"
783
+ },
784
+ filters: {
785
+ search: "superadmin-search-{context}",
786
+ dropdown: "superadmin-filter-{context}"
787
+ },
788
+ permissions: {
789
+ row: "superadmin-permission-row-{permission}"
790
+ },
791
+ teamRoles: {
792
+ backButton: "back-to-superadmin",
793
+ roleCard: "role-card-{role}",
794
+ permissionRow: "permission-row-{permission}"
795
+ },
796
+ planFeatures: {
797
+ featureRow: "superadmin-feature-row-{slug}",
798
+ limitRow: "superadmin-limit-row-{slug}"
799
+ }
800
+ },
801
+ // ===========================================================================
802
+ // DEVTOOLS
803
+ // ===========================================================================
804
+ devtools: {
805
+ navigation: {
806
+ sidebar: "devtools-sidebar",
807
+ collapseToggle: "devtools-sidebar-collapse-toggle",
808
+ navItem: "devtools-nav-{section}",
809
+ exitToDashboard: "devtools-sidebar-exit-to-dashboard",
810
+ goToSuperadmin: "devtools-sidebar-go-to-superadmin",
811
+ mobileHeader: "devtools-mobile-header"
812
+ },
813
+ home: {
814
+ page: "devtools-home-page",
815
+ styleLink: "devtools-home-style-link",
816
+ testsLink: "devtools-home-tests-link",
817
+ configLink: "devtools-home-config-link"
818
+ },
819
+ style: {
820
+ page: "devtools-style-page",
821
+ tabComponents: "devtools-style-tab-components",
822
+ tabFieldTypes: "devtools-style-tab-field-types",
823
+ tabTheme: "devtools-style-tab-theme",
824
+ tabGuidelines: "devtools-style-tab-guidelines",
825
+ componentGallery: "devtools-style-component-gallery",
826
+ fieldTypes: "devtools-style-field-types",
827
+ themePreview: "devtools-style-theme-preview"
828
+ },
829
+ config: {
830
+ page: "devtools-config-page",
831
+ viewer: "devtools-config-viewer",
832
+ tabTheme: "devtools-config-tab-theme",
833
+ tabEntities: "devtools-config-tab-entities",
834
+ themeContent: "devtools-config-theme-content",
835
+ entitiesContent: "devtools-config-entities-content",
836
+ copyTheme: "devtools-config-copy-theme",
837
+ copyEntities: "devtools-config-copy-entities"
838
+ },
839
+ tests: {
840
+ page: "devtools-tests-page",
841
+ viewer: "devtools-tests-viewer",
842
+ loading: "devtools-tests-loading",
843
+ tree: "devtools-tests-tree",
844
+ folder: "devtools-tests-folder-{name}",
845
+ file: "devtools-tests-file-{name}",
846
+ content: "devtools-tests-content",
847
+ markdownContent: "devtools-tests-markdown-content",
848
+ notFound: "devtools-tests-not-found",
849
+ backToList: "devtools-tests-back-to-list",
850
+ emptyState: "devtools-tests-empty-state",
851
+ fileLoading: "devtools-tests-file-loading",
852
+ error: "devtools-tests-error",
853
+ // Dashboard
854
+ dashboard: "devtools-tests-dashboard",
855
+ dashboardButton: "devtools-tests-dashboard-button",
856
+ dashboardStats: "devtools-tests-dashboard-stats",
857
+ dashboardStatFeatures: "devtools-tests-dashboard-stat-features",
858
+ dashboardStatFlows: "devtools-tests-dashboard-stat-flows",
859
+ dashboardStatFiles: "devtools-tests-dashboard-stat-files",
860
+ dashboardStatTags: "devtools-tests-dashboard-stat-tags",
861
+ dashboardGaps: "devtools-tests-dashboard-gaps",
862
+ dashboardGapItem: "devtools-tests-dashboard-gap-{slug}"
863
+ },
864
+ features: {
865
+ page: "devtools-features-page",
866
+ viewer: "devtools-features-viewer",
867
+ search: "devtools-features-search",
868
+ filterAll: "devtools-features-filter-all",
869
+ filterCategory: "devtools-features-filter-{category}",
870
+ coverageAll: "devtools-features-coverage-all",
871
+ coverageCovered: "devtools-features-coverage-covered",
872
+ coverageUncovered: "devtools-features-coverage-uncovered",
873
+ card: "devtools-features-card-{slug}",
874
+ copyTag: "devtools-features-copy-{slug}"
875
+ },
876
+ flows: {
877
+ page: "devtools-flows-page",
878
+ viewer: "devtools-flows-viewer",
879
+ search: "devtools-flows-search",
880
+ filterAll: "devtools-flows-filter-all",
881
+ filterCategory: "devtools-flows-filter-{category}",
882
+ coverageAll: "devtools-flows-coverage-all",
883
+ coverageCovered: "devtools-flows-coverage-covered",
884
+ coverageUncovered: "devtools-flows-coverage-uncovered",
885
+ card: "devtools-flows-card-{slug}",
886
+ copyTag: "devtools-flows-copy-{slug}"
887
+ },
888
+ blocks: {
889
+ page: "devtools-blocks-page",
890
+ viewer: "devtools-blocks-viewer",
891
+ search: "devtools-blocks-search",
892
+ filterAll: "devtools-blocks-filter-all",
893
+ filterCategory: "devtools-blocks-filter-{category}",
894
+ coverageAll: "devtools-blocks-coverage-all",
895
+ coverageCovered: "devtools-blocks-coverage-covered",
896
+ coverageUncovered: "devtools-blocks-coverage-uncovered",
897
+ card: "devtools-blocks-card-{slug}",
898
+ copyTag: "devtools-blocks-copy-{slug}",
899
+ viewDetails: "devtools-blocks-view-{slug}",
900
+ detail: {
901
+ page: "devtools-block-detail-{slug}",
902
+ back: "devtools-block-detail-back",
903
+ tabPreview: "devtools-block-detail-tab-preview",
904
+ tabFields: "devtools-block-detail-tab-fields",
905
+ tabOverview: "devtools-block-detail-tab-overview",
906
+ preview: "devtools-block-detail-preview-{slug}",
907
+ exampleSelector: "devtools-block-example-selector",
908
+ exampleBtn: "devtools-block-example-btn-{index}",
909
+ exampleName: "devtools-block-example-name",
910
+ exampleDescription: "devtools-block-example-description"
911
+ }
912
+ },
913
+ tags: {
914
+ page: "devtools-tags-page",
915
+ viewer: "devtools-tags-viewer",
916
+ search: "devtools-tags-search",
917
+ category: "devtools-tags-category-{category}",
918
+ tag: "devtools-tags-tag-{tag}",
919
+ tagLink: "devtools-tags-link-{tag}",
920
+ filesPanel: "devtools-tags-files-panel-{tag}"
921
+ },
922
+ scheduledActions: {
923
+ page: "devtools-scheduled-actions-page",
924
+ filterStatus: "scheduled-actions-filter-status",
925
+ filterType: "scheduled-actions-filter-type",
926
+ filterApply: "scheduled-actions-filter-apply",
927
+ filterReset: "scheduled-actions-filter-reset",
928
+ table: "scheduled-actions-table",
929
+ row: "scheduled-actions-row-{id}",
930
+ cellType: "scheduled-actions-cell-type",
931
+ cellStatus: "scheduled-actions-cell-status",
932
+ cellScheduledAt: "scheduled-actions-cell-scheduled-at",
933
+ cellTeam: "scheduled-actions-cell-team",
934
+ cellPayload: "scheduled-actions-cell-payload",
935
+ cellError: "scheduled-actions-cell-error",
936
+ statusPending: "scheduled-actions-status-pending",
937
+ statusRunning: "scheduled-actions-status-running",
938
+ statusCompleted: "scheduled-actions-status-completed",
939
+ statusFailed: "scheduled-actions-status-failed",
940
+ pagination: "scheduled-actions-pagination",
941
+ paginationPrev: "scheduled-actions-pagination-prev",
942
+ paginationNext: "scheduled-actions-pagination-next",
943
+ emptyState: "scheduled-actions-empty-state"
944
+ }
945
+ },
946
+ // ===========================================================================
947
+ // PUBLIC PAGES
948
+ // ===========================================================================
949
+ public: {
950
+ navbar: {
951
+ container: "public-navbar",
952
+ logo: "navbar-logo",
953
+ loginButton: "navbar-login",
954
+ signupButton: "navbar-signup"
955
+ },
956
+ footer: {
957
+ container: "public-footer",
958
+ logo: "footer-logo"
959
+ },
960
+ page: {
961
+ container: "public-page-{slug}",
962
+ title: "page-title",
963
+ content: "page-content"
964
+ },
965
+ blog: {
966
+ listContainer: "blog-list",
967
+ postCard: "blog-post-{slug}"
968
+ }
969
+ },
970
+ // ===========================================================================
971
+ // COMMON / SHARED
972
+ // ===========================================================================
973
+ common: {
974
+ permissionDenied: "permission-denied",
975
+ loading: "loading-spinner",
976
+ error: "error-message",
977
+ toast: "toast-{type}",
978
+ modal: {
979
+ overlay: "modal-overlay",
980
+ container: "modal-container",
981
+ title: "modal-title",
982
+ close: "modal-close",
983
+ content: "modal-content",
984
+ footer: "modal-footer"
985
+ }
986
+ }
987
+ };
988
+
989
+ // src/selectors/selectors.ts
990
+ var helpers = createSelectorHelpers(CORE_SELECTORS);
991
+ var SELECTORS = helpers.SELECTORS;
992
+ var sel = helpers.sel;
993
+ var s = helpers.s;
994
+ var selDev = helpers.selDev;
995
+ var cySelector = helpers.cySelector;
996
+ var entitySelectors = helpers.entitySelectors;
997
+
998
+ export { CORE_SELECTORS, SELECTORS, createSelectorHelpers, cySelector, entitySelectors, getNestedValue, replacePlaceholders, s, sel, selDev };
999
+ //# sourceMappingURL=index.js.map
1000
+ //# sourceMappingURL=index.js.map