@genesislcap/pbc-notify-ui 15.20.2-grid-pro-datasource-fix.1 → 15.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -322,163 +322,6 @@
322
322
  }
323
323
  ]
324
324
  },
325
- {
326
- "kind": "javascript-module",
327
- "path": "src/services/alert.service.ts",
328
- "declarations": [
329
- {
330
- "kind": "variable",
331
- "name": "AlertService"
332
- }
333
- ],
334
- "exports": [
335
- {
336
- "kind": "js",
337
- "name": "AlertService",
338
- "declaration": {
339
- "name": "AlertService",
340
- "module": "src/services/alert.service.ts"
341
- }
342
- }
343
- ]
344
- },
345
- {
346
- "kind": "javascript-module",
347
- "path": "src/services/inbox.service.ts",
348
- "declarations": [
349
- {
350
- "kind": "variable",
351
- "name": "INBOX_PAGE_SIZE",
352
- "type": {
353
- "text": "number"
354
- },
355
- "default": "20",
356
- "description": "Number of alert rows fetched per data server batch. The first batch is loaded\non subscribe; subsequent batches are fetched via FoundationInboxService.getMoreRows."
357
- },
358
- {
359
- "kind": "variable",
360
- "name": "FoundationInboxService"
361
- }
362
- ],
363
- "exports": [
364
- {
365
- "kind": "js",
366
- "name": "INBOX_PAGE_SIZE",
367
- "declaration": {
368
- "name": "INBOX_PAGE_SIZE",
369
- "module": "src/services/inbox.service.ts"
370
- }
371
- },
372
- {
373
- "kind": "js",
374
- "name": "FoundationInboxService",
375
- "declaration": {
376
- "name": "FoundationInboxService",
377
- "module": "src/services/inbox.service.ts"
378
- }
379
- }
380
- ]
381
- },
382
- {
383
- "kind": "javascript-module",
384
- "path": "src/services/notify-route.service.ts",
385
- "declarations": [
386
- {
387
- "kind": "variable",
388
- "name": "NotifyRouteService"
389
- }
390
- ],
391
- "exports": [
392
- {
393
- "kind": "js",
394
- "name": "NotifyRouteService",
395
- "declaration": {
396
- "name": "NotifyRouteService",
397
- "module": "src/services/notify-route.service.ts"
398
- }
399
- }
400
- ]
401
- },
402
- {
403
- "kind": "javascript-module",
404
- "path": "src/services/notify.service.ts",
405
- "declarations": [
406
- {
407
- "kind": "variable",
408
- "name": "NotifyService"
409
- }
410
- ],
411
- "exports": [
412
- {
413
- "kind": "js",
414
- "name": "NotifyService",
415
- "declaration": {
416
- "name": "NotifyService",
417
- "module": "src/services/notify.service.ts"
418
- }
419
- }
420
- ]
421
- },
422
- {
423
- "kind": "javascript-module",
424
- "path": "src/services/rule.service.ts",
425
- "declarations": [
426
- {
427
- "kind": "variable",
428
- "name": "RuleService"
429
- }
430
- ],
431
- "exports": [
432
- {
433
- "kind": "js",
434
- "name": "RuleService",
435
- "declaration": {
436
- "name": "RuleService",
437
- "module": "src/services/rule.service.ts"
438
- }
439
- }
440
- ]
441
- },
442
- {
443
- "kind": "javascript-module",
444
- "path": "src/services/system.service.ts",
445
- "declarations": [
446
- {
447
- "kind": "variable",
448
- "name": "SystemService"
449
- }
450
- ],
451
- "exports": [
452
- {
453
- "kind": "js",
454
- "name": "SystemService",
455
- "declaration": {
456
- "name": "SystemService",
457
- "module": "src/services/system.service.ts"
458
- }
459
- }
460
- ]
461
- },
462
- {
463
- "kind": "javascript-module",
464
- "path": "src/services/template.service.ts",
465
- "declarations": [
466
- {
467
- "kind": "variable",
468
- "name": "TemplateService"
469
- }
470
- ],
471
- "exports": [
472
- {
473
- "kind": "js",
474
- "name": "TemplateService",
475
- "declaration": {
476
- "name": "TemplateService",
477
- "module": "src/services/template.service.ts"
478
- }
479
- }
480
- ]
481
- },
482
325
  {
483
326
  "kind": "javascript-module",
484
327
  "path": "src/styles/scrollbar.styles.ts",
@@ -2041,54 +1884,19 @@
2041
1884
  },
2042
1885
  {
2043
1886
  "kind": "javascript-module",
2044
- "path": "src/components/foundation-sounds/foundation-sounds-panel.styles.ts",
2045
- "declarations": [
2046
- {
2047
- "kind": "variable",
2048
- "name": "FoundationSoundsPanelStyles",
2049
- "default": "css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n width: 100%;\n }\n\n .sounds-controls {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n gap: 12px;\n padding: calc(var(--design-unit) * 3px);\n box-sizing: border-box;\n }\n\n .sounds-help-disclosure {\n flex: 0 0 auto;\n }\n\n .sounds-help-toggle {\n margin-inline-start: calc(var(--design-unit) * 1px);\n }\n\n .sounds-help-toggle::before {\n content: '+';\n }\n\n .sounds-help-disclosure[expanded] .sounds-help-toggle::before {\n content: '−';\n }\n\n .sounds-help {\n margin: 0;\n font-size: var(--type-ramp-minus-1-font-size);\n color: var(--neutral-foreground-hint);\n text-align: left;\n }\n\n .volume-row {\n display: flex;\n align-items: center;\n flex: 0 0 auto;\n gap: calc(var(--design-unit) * 2px);\n min-width: 0;\n }\n\n .volume-icon {\n flex: 0 0 auto;\n }\n\n .volume-label {\n flex: 0 0 auto;\n font-size: var(--type-ramp-minus-1-font-size);\n color: var(--neutral-foreground-hint);\n }\n\n .volume-slider {\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .volume-percent {\n flex: 0 0 auto;\n min-width: 3ch;\n text-align: end;\n font-size: var(--type-ramp-minus-1-font-size);\n color: var(--neutral-foreground-hint);\n }\n\n .mute-all {\n flex: 0 0 auto;\n margin: 0;\n }\n\n .sound-rules-panel {\n flex: 1 1 auto;\n min-height: 0;\n overflow: auto;\n }\n\n .sound-rules {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .sound-rule {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n border: calc(var(--stroke-width) * 1px) solid var(--neutral-stroke-divider-rest);\n border-radius: calc(var(--control-corner-radius) * 1px);\n\n /* Keep absolute listboxes from being clipped by the card itself. */\n overflow: visible;\n }\n\n .sound-rule-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-weight: 700;\n font-size: var(--type-ramp-minus-1-font-size);\n }\n\n .sound-rule-actions {\n display: flex;\n align-items: center;\n gap: 2px;\n }\n\n .sound-rule-label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: var(--type-ramp-minus-1-font-size);\n color: var(--neutral-foreground-hint);\n }\n\n .pattern-input,\n .match-mode-select,\n .rule-select,\n .sound-file-input {\n width: 100%;\n }\n\n /*\n * Anchor the listbox to the select host and use position:fixed so it escapes\n * .sound-rules-panel overflow:auto (and the rule card). Each select sets a\n * unique --sounds-select-anchor / anchor-name via inline style.\n * !important beats FAST's internal absolute top/bottom for [open] selects.\n */\n .match-mode-select[open]::part(listbox),\n .rule-select[open]::part(listbox) {\n position: fixed !important;\n /* stylelint-disable-next-line property-no-unknown -- CSS anchor positioning */\n position-anchor: var(--sounds-select-anchor);\n inset: auto !important;\n top: anchor(bottom) !important;\n left: anchor(left) !important;\n right: anchor(right) !important;\n bottom: auto !important;\n width: auto !important;\n margin-top: calc(var(--design-unit) * 1px);\n z-index: 10000;\n max-height: min(240px, 40vh);\n overflow-x: hidden;\n overflow-y: auto;\n box-shadow: 0 4px 16px rgb(0 0 0 / 24%);\n }\n\n .match-mode-select[open][position='above']::part(listbox),\n .rule-select[open][position='above']::part(listbox) {\n top: auto !important;\n bottom: anchor(top) !important;\n margin-top: 0;\n margin-bottom: calc(var(--design-unit) * 1px);\n }\n\n .sound-file-row {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .sound-file-row .sound-file-input {\n flex: 1;\n min-width: 0;\n }\n\n .choose-sound {\n cursor: pointer;\n }\n\n .sound-rules-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 0 0 auto;\n gap: 8px;\n }\n\n .rule-count {\n font-size: var(--type-ramp-minus-1-font-size);\n color: var(--neutral-foreground-hint);\n }\n\n .file-input {\n display: none;\n }\n\n ${scrollbarStyles}\n`"
2050
- }
2051
- ],
2052
- "exports": [
2053
- {
2054
- "kind": "js",
2055
- "name": "FoundationSoundsPanelStyles",
2056
- "declaration": {
2057
- "name": "FoundationSoundsPanelStyles",
2058
- "module": "src/components/foundation-sounds/foundation-sounds-panel.styles.ts"
2059
- }
2060
- }
2061
- ]
2062
- },
2063
- {
2064
- "kind": "javascript-module",
2065
- "path": "src/components/foundation-sounds/foundation-sounds-panel.template.ts",
1887
+ "path": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts",
2066
1888
  "declarations": [
2067
1889
  {
2068
1890
  "kind": "variable",
2069
- "name": "FoundationSoundsPanelTemplate",
2070
- "default": "html<FoundationSoundsPanel>`\n <div class=\"sounds-controls\" part=\"controls\">\n <input\n ${ref('fileInput')}\n class=\"file-input\"\n type=\"file\"\n accept=\"audio/*\"\n @change=${(x, c) => x.onFileSelected(c.event)}\n />\n <rapid-disclosure class=\"sounds-help-disclosure\" appearance=\"lightweight\">\n <span slot=\"title\">\n Sound Alerts Information\n <span class=\"sounds-help-toggle\" aria-hidden=\"true\"></span>\n </span>\n <p class=\"sounds-help\">\n Add up to ${(x) => x.maxRules} sounds.\n <br />\n Match text in MESSAGE or HEADER (a word or phrase), or a notification rule (including rules\n created when you subscribe to a template).\n <br />\n The first matching rule is played.\n </p>\n </rapid-disclosure>\n <div class=\"volume-row\">\n <rapid-icon\n class=\"volume-icon\"\n name=${(x) => (x.muted || x.volumePercent === 0 ? 'volume-xmark' : 'volume-high')}\n ></rapid-icon>\n <span class=\"volume-label\">Volume</span>\n <rapid-slider\n class=\"volume-slider\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n :value=${(x) => String(x.volumePercent)}\n @change=${(x, c) => x.onVolumeChange(c.event)}\n ></rapid-slider>\n <span class=\"volume-percent\">${(x) => `${x.volumePercent}%`}</span>\n <rapid-button\n class=\"mute-all\"\n appearance=\"lightweight\"\n title=${(x) => (x.muted ? 'Unmute alert sounds' : 'Mute all alert sounds')}\n @click=${(x) => x.toggleMute()}\n >\n ${(x) => (x.muted ? 'Unmute' : 'Mute all')}\n </rapid-button>\n </div>\n <div class=\"sound-rules-panel\">\n <div class=\"sound-rules\">\n ${repeat(\n (x) => x.rules,\n html<AlertSoundRuleView, FoundationSoundsPanel>`\n <div class=\"sound-rule\" data-rule-index=${(x) => x.index}>\n <div class=\"sound-rule-header\">\n <span>Rule ${(x) => x.index + 1}</span>\n <div class=\"sound-rule-actions\">\n <rapid-button\n class=\"mute-rule\"\n appearance=\"stealth\"\n title=${(x) => (x.muted ? 'Unmute this rule' : 'Mute this rule')}\n @click=${(x, c) => c.parent.toggleRuleMute(x.index)}\n >\n <rapid-icon\n name=${(x) => (x.muted ? 'volume-xmark' : 'volume-high')}\n ></rapid-icon>\n </rapid-button>\n <rapid-button\n class=\"remove-rule\"\n appearance=\"stealth\"\n title=${(_, c) => (c.parent.canRemoveRule ? 'Remove rule' : 'Reset rule')}\n @click=${(x, c) => c.parent.removeRule(x.index)}\n >\n <rapid-icon name=\"trash\"></rapid-icon>\n </rapid-button>\n </div>\n </div>\n <label class=\"sound-rule-label\">\n Match by\n <rapid-select\n class=\"match-mode-select\"\n style=${(x) =>\n `anchor-name: --sound-match-${x.index}; --sounds-select-anchor: --sound-match-${x.index}`}\n :value=${(x) => x.matchMode}\n @change=${(x, c) => c.parent.onMatchModeChange(x.index, c.event)}\n >\n <rapid-option value=\"message\">MESSAGE text</rapid-option>\n <rapid-option value=\"header\">HEADER text</rapid-option>\n <rapid-option value=\"rule\">Notification rule</rapid-option>\n </rapid-select>\n </label>\n <label\n class=\"sound-rule-label\"\n style=${(x) => (x.matchMode === 'rule' ? 'display: none;' : '')}\n >\n ${(x) => (x.matchMode === 'header' ? 'HEADER text' : 'MESSAGE text')}\n <rapid-text-field\n class=\"pattern-input\"\n placeholder=${(x) =>\n x.matchMode === 'header' ? 'e.g. Price alert' : 'e.g. limit breached'}\n :value=${(x) => x.pattern}\n @input=${(x, c) => c.parent.onPatternInput(x.index, c.event)}\n ></rapid-text-field>\n </label>\n <label\n class=\"sound-rule-label\"\n style=${(x) => (x.matchMode === 'rule' ? '' : 'display: none;')}\n >\n Notification rule\n <rapid-select\n class=\"rule-select\"\n style=${(x) =>\n `anchor-name: --sound-rule-${x.index}; --sounds-select-anchor: --sound-rule-${x.index}`}\n :value=${(x) => x.templateId ?? ''}\n @change=${(x, c) => c.parent.onRuleChange(x.index, c.event)}\n >\n <options-datasource\n value-field=\"id\"\n label-field=\"name\"\n option-element=\"rapid-option\"\n :data=${(_, c) => c.parent.ruleSelectOptions}\n ></options-datasource>\n </rapid-select>\n </label>\n <label class=\"sound-rule-label\">\n Sound file\n <div class=\"sound-file-row\">\n <rapid-text-field\n class=\"sound-file-input\"\n readonly\n placeholder=\"No sound selected\"\n :value=${(x) => x.fileName ?? ''}\n title=${(x) => x.fileName ?? 'No sound selected'}\n >\n <rapid-icon\n slot=\"end\"\n class=\"choose-sound\"\n name=\"folder-open\"\n title=\"Choose alert sound\"\n @click=${(x, c) => {\n c.event.stopPropagation();\n return c.parent.openFilePicker(x.index);\n }}\n ></rapid-icon>\n </rapid-text-field>\n <rapid-button\n class=\"test-sound\"\n appearance=\"stealth\"\n title=\"Test play this sound\"\n ?disabled=${(x) => !x.hasSound}\n @click=${(x, c) => c.parent.testSound(x.index)}\n >\n <rapid-icon name=\"play\"></rapid-icon>\n </rapid-button>\n <rapid-button\n class=\"clear-sound\"\n appearance=\"stealth\"\n title=\"Clear sound file\"\n ?disabled=${(x) => !x.hasSound}\n @click=${(x, c) => c.parent.clearSound(x.index)}\n >\n <rapid-icon name=\"times\"></rapid-icon>\n </rapid-button>\n </div>\n </label>\n </div>\n `,\n )}\n </div>\n </div>\n <div class=\"sound-rules-footer\">\n <rapid-button\n class=\"add-rule\"\n appearance=\"lightweight\"\n title=\"Add sound rule\"\n ?disabled=${(x) => !x.canAddRule}\n @click=${(x) => x.addRule()}\n >\n <rapid-icon name=\"plus\"></rapid-icon>\n Add rule\n </rapid-button>\n <span class=\"rule-count\">${(x) => `${x.rules.length} / ${x.maxRules}`}</span>\n </div>\n </div>\n`"
2071
- }
2072
- ],
2073
- "exports": [
2074
- {
2075
- "kind": "js",
2076
- "name": "FoundationSoundsPanelTemplate",
2077
- "declaration": {
2078
- "name": "FoundationSoundsPanelTemplate",
2079
- "module": "src/components/foundation-sounds/foundation-sounds-panel.template.ts"
2080
- }
2081
- }
2082
- ]
2083
- },
2084
- {
2085
- "kind": "javascript-module",
2086
- "path": "src/components/foundation-sounds/foundation-sounds-panel.ts",
2087
- "declarations": [
1891
+ "name": "alertSoundAttachmentTemplate",
1892
+ "default": "html<AlertSoundAttachmentHost>`\n <div class=\"alert-sound\">\n <input\n ${ref('fileInput')}\n class=\"file-input\"\n type=\"file\"\n accept=\"audio/*\"\n @change=${(x, c) => x.onAlertSoundSelected(c.event)}\n />\n <label>Alert sound</label>\n <div class=\"alert-sound-row\">\n <span class=\"alert-sound-name\" title=${(x) => x.alertSoundFileName || ''}>\n ${(x) => x.alertSoundFileName || 'No sound attached'}\n </span>\n <rapid-button appearance=\"lightweight\" @click=${(x) => x.openAlertSoundPicker()}>\n ${(x) => (x.hasAlertSound ? 'Replace' : 'Attach')}\n </rapid-button>\n ${when(\n (x) => x.hasAlertSound,\n html<AlertSoundAttachmentHost>`\n <rapid-button appearance=\"lightweight\" @click=${(x) => x.testAttachedAlertSound()}>\n Test\n </rapid-button>\n <rapid-button appearance=\"lightweight\" @click=${(x) => x.clearAttachedAlertSound()}>\n Clear\n </rapid-button>\n `,\n )}\n </div>\n </div>\n`",
1893
+ "description": "Shared Attach/Replace/Test/Clear UI for rule and template dialogs.",
1894
+ "privacy": "public"
1895
+ },
2088
1896
  {
2089
- "kind": "class",
2090
- "description": "Configures alert sound rules in the inbox Sounds tab. Persists via the shared\nAlertSoundPlayer; playback is handled by layout-mounted\nFoundationSounds.",
2091
- "name": "FoundationSoundsPanel",
1897
+ "kind": "mixin",
1898
+ "description": "Mixin: pick / test / clear / load server sound + apply fields to submit payload.\n\nSubclasses must provide ruleService, isAlertSoundEditMode,\nalertSoundEntityId, and alertSoundCacheSyncMode.",
1899
+ "name": "AlertSoundAttachmentMixin",
2092
1900
  "members": [
2093
1901
  {
2094
1902
  "kind": "field",
@@ -2099,224 +1907,117 @@
2099
1907
  },
2100
1908
  {
2101
1909
  "kind": "field",
2102
- "name": "volumePercent",
1910
+ "name": "isAlertSoundEditMode",
2103
1911
  "type": {
2104
- "text": "number"
1912
+ "text": "boolean"
2105
1913
  },
2106
- "default": "100",
2107
- "description": "Global playback volume 0–100. @internal"
1914
+ "description": "True when editing an existing entity (clear should set CLEAR_ALERT_SOUND).",
1915
+ "readonly": true
2108
1916
  },
2109
1917
  {
2110
1918
  "kind": "field",
2111
- "name": "selectableRules",
1919
+ "name": "alertSoundEntityId",
2112
1920
  "type": {
2113
- "text": "AlertSoundSelectableRule[]"
1921
+ "text": "string | null"
2114
1922
  },
2115
- "default": "[]",
2116
- "description": "Notification rules from REQ_NOTIFICATION_RULE. @internal"
1923
+ "description": "DYNAMIC_RULE_ID of the entity being edited (null on create).\nUsed when alertSoundCacheSyncMode is `'entity'`.",
1924
+ "readonly": true
2117
1925
  },
2118
1926
  {
2119
1927
  "kind": "field",
2120
- "name": "fileInput",
1928
+ "name": "alertSoundCacheSyncMode",
2121
1929
  "type": {
2122
- "text": "HTMLInputElement"
2123
- }
1930
+ "text": "'entity' | 'all'"
1931
+ },
1932
+ "description": "`'entity'` — update/clear cache for alertSoundEntityId (rules).\n`'all'` — drop every cached server sound (templates; instance ids unknown).",
1933
+ "readonly": true
2124
1934
  },
2125
1935
  {
2126
1936
  "kind": "field",
2127
- "name": "pendingRuleIndex",
1937
+ "name": "alertSoundFileName",
2128
1938
  "type": {
2129
- "text": "number | null"
1939
+ "text": "string"
2130
1940
  },
2131
- "privacy": "private",
2132
- "default": "null"
2133
- },
2134
- {
2135
- "kind": "field",
2136
- "name": "player",
2137
- "privacy": "private",
2138
- "readonly": true
1941
+ "default": "''",
1942
+ "description": "Display name of the attached / pending alert sound file."
2139
1943
  },
2140
1944
  {
2141
1945
  "kind": "field",
2142
- "name": "unsubscribePlayer",
1946
+ "name": "alertSoundMimeType",
2143
1947
  "type": {
2144
- "text": "(() => void) | undefined"
1948
+ "text": "string"
2145
1949
  },
2146
- "privacy": "private"
1950
+ "default": "''"
2147
1951
  },
2148
1952
  {
2149
1953
  "kind": "field",
2150
- "name": "ignoreSelectChanges",
1954
+ "name": "hasAlertSound",
2151
1955
  "type": {
2152
1956
  "text": "boolean"
2153
1957
  },
2154
- "privacy": "private",
2155
1958
  "default": "false",
2156
- "description": "Suppresses select change events while options are rebuilt."
2157
- },
2158
- {
2159
- "kind": "method",
2160
- "name": "onMatchModeChange",
2161
- "return": {
2162
- "type": {
2163
- "text": "boolean"
2164
- }
2165
- },
2166
- "parameters": [
2167
- {
2168
- "name": "index",
2169
- "type": {
2170
- "text": "number"
2171
- }
2172
- },
2173
- {
2174
- "name": "event",
2175
- "type": {
2176
- "text": "Event"
2177
- }
2178
- }
2179
- ]
1959
+ "description": "True when edit loaded an existing server sound (or user attached one)."
2180
1960
  },
2181
1961
  {
2182
- "kind": "method",
2183
- "name": "onPatternInput",
2184
- "return": {
2185
- "type": {
2186
- "text": "boolean"
2187
- }
2188
- },
2189
- "parameters": [
2190
- {
2191
- "name": "index",
2192
- "type": {
2193
- "text": "number"
2194
- }
2195
- },
2196
- {
2197
- "name": "event",
2198
- "type": {
2199
- "text": "Event"
2200
- }
2201
- }
2202
- ]
1962
+ "kind": "field",
1963
+ "name": "fileInput",
1964
+ "type": {
1965
+ "text": "HTMLInputElement"
1966
+ }
2203
1967
  },
2204
1968
  {
2205
- "kind": "method",
2206
- "name": "onRuleChange",
2207
- "return": {
2208
- "type": {
2209
- "text": "boolean"
2210
- }
1969
+ "kind": "field",
1970
+ "name": "pendingAlertSoundData",
1971
+ "type": {
1972
+ "text": "string | null"
2211
1973
  },
2212
- "parameters": [
2213
- {
2214
- "name": "index",
2215
- "type": {
2216
- "text": "number"
2217
- }
2218
- },
2219
- {
2220
- "name": "event",
2221
- "type": {
2222
- "text": "Event"
2223
- }
2224
- }
2225
- ]
1974
+ "default": "null"
2226
1975
  },
2227
1976
  {
2228
- "kind": "method",
2229
- "name": "openFilePicker",
2230
- "return": {
2231
- "type": {
2232
- "text": "boolean"
2233
- }
1977
+ "kind": "field",
1978
+ "name": "alertSoundDirty",
1979
+ "type": {
1980
+ "text": "boolean"
2234
1981
  },
2235
- "parameters": [
2236
- {
2237
- "name": "index",
2238
- "type": {
2239
- "text": "number"
2240
- }
2241
- }
2242
- ]
1982
+ "default": "false",
1983
+ "description": "True when the user picked a new file this session (needs upload)."
2243
1984
  },
2244
1985
  {
2245
- "kind": "method",
2246
- "name": "onFileSelected",
2247
- "return": {
2248
- "type": {
2249
- "text": "boolean"
2250
- }
1986
+ "kind": "field",
1987
+ "name": "clearAlertSound",
1988
+ "type": {
1989
+ "text": "boolean"
2251
1990
  },
2252
- "parameters": [
2253
- {
2254
- "name": "event",
2255
- "type": {
2256
- "text": "Event"
2257
- }
2258
- }
2259
- ]
1991
+ "default": "false"
2260
1992
  },
2261
1993
  {
2262
- "kind": "method",
2263
- "name": "clearSound",
2264
- "return": {
2265
- "type": {
2266
- "text": "boolean"
2267
- }
1994
+ "kind": "field",
1995
+ "name": "testAudio",
1996
+ "type": {
1997
+ "text": "HTMLAudioElement | null"
2268
1998
  },
2269
- "parameters": [
2270
- {
2271
- "name": "index",
2272
- "type": {
2273
- "text": "number"
2274
- }
2275
- }
2276
- ]
1999
+ "default": "null",
2000
+ "description": "In-progress Test playback; not private — mixin return type is exported."
2277
2001
  },
2278
2002
  {
2279
2003
  "kind": "method",
2280
- "name": "testSound",
2281
- "return": {
2282
- "type": {
2283
- "text": "boolean"
2284
- }
2285
- },
2004
+ "name": "loadExistingAlertSound",
2286
2005
  "parameters": [
2287
2006
  {
2288
- "name": "index",
2007
+ "name": "dynamicRuleId",
2289
2008
  "type": {
2290
- "text": "number"
2009
+ "text": "string"
2291
2010
  }
2292
2011
  }
2293
2012
  ]
2294
2013
  },
2295
2014
  {
2296
2015
  "kind": "method",
2297
- "name": "toggleRuleMute",
2298
- "return": {
2299
- "type": {
2300
- "text": "boolean"
2301
- }
2302
- },
2303
- "parameters": [
2304
- {
2305
- "name": "index",
2306
- "type": {
2307
- "text": "number"
2308
- }
2309
- }
2310
- ]
2016
+ "name": "openAlertSoundPicker"
2311
2017
  },
2312
2018
  {
2313
2019
  "kind": "method",
2314
- "name": "onVolumeChange",
2315
- "return": {
2316
- "type": {
2317
- "text": "boolean"
2318
- }
2319
- },
2020
+ "name": "onAlertSoundSelected",
2320
2021
  "parameters": [
2321
2022
  {
2322
2023
  "name": "event",
@@ -2328,837 +2029,806 @@
2328
2029
  },
2329
2030
  {
2330
2031
  "kind": "method",
2331
- "name": "toggleMute",
2332
- "return": {
2333
- "type": {
2334
- "text": "boolean"
2335
- }
2336
- }
2337
- },
2338
- {
2339
- "kind": "method",
2340
- "name": "addRule",
2341
- "return": {
2342
- "type": {
2343
- "text": "boolean"
2344
- }
2345
- }
2346
- },
2347
- {
2348
- "kind": "method",
2349
- "name": "removeRule",
2350
- "return": {
2351
- "type": {
2352
- "text": "boolean"
2353
- }
2354
- },
2355
- "parameters": [
2356
- {
2357
- "name": "index",
2358
- "type": {
2359
- "text": "number"
2360
- }
2361
- }
2362
- ]
2363
- },
2364
- {
2365
- "kind": "method",
2366
- "name": "reloadRules",
2367
- "return": {
2368
- "type": {
2369
- "text": "Promise<void>"
2370
- }
2371
- },
2372
- "description": "Reloads the notification-rule picker (e.g. when the Sounds tab is opened)."
2032
+ "name": "clearAttachedAlertSound"
2373
2033
  },
2374
2034
  {
2375
2035
  "kind": "method",
2376
- "name": "loadRules",
2377
- "privacy": "private",
2378
- "return": {
2379
- "type": {
2380
- "text": "Promise<void>"
2381
- }
2382
- }
2036
+ "name": "testAttachedAlertSound"
2383
2037
  },
2384
2038
  {
2385
2039
  "kind": "method",
2386
- "name": "settleRuleOptions",
2387
- "privacy": "private",
2388
- "return": {
2389
- "type": {
2390
- "text": "Promise<void>"
2391
- }
2392
- },
2393
- "description": "Suppresses select `change` events only while options-datasource rebuilds\nthe DOM — not for the `getRules()` round trip itself, so a user picking a\nrule while a request is in flight isn't silently dropped."
2040
+ "name": "stopTestSound"
2394
2041
  },
2395
2042
  {
2396
2043
  "kind": "method",
2397
- "name": "applyRuleSelectValues",
2398
- "privacy": "private",
2399
- "return": {
2400
- "type": {
2401
- "text": "void"
2402
- }
2403
- },
2404
- "description": "Re-applies persisted template ids onto `.rule-select` hosts after\noptions-datasource has rebuilt its options. We deliberately do *not* bind\n`:initialSelectedValue` to templateId: that path compares the option label\nagainst Select.value (the option id), always mismatches, clearData()'s the\nselect, and leaves the next pick stuck on \"Select a rule...\"."
2044
+ "name": "resetAlertSoundState"
2405
2045
  },
2406
2046
  {
2407
2047
  "kind": "method",
2408
- "name": "mapRules",
2409
- "privacy": "private",
2048
+ "name": "applyAlertSoundToPayload",
2410
2049
  "return": {
2411
2050
  "type": {
2412
- "text": "AlertSoundSelectableRule[]"
2051
+ "text": "T"
2413
2052
  }
2414
2053
  },
2415
2054
  "parameters": [
2416
2055
  {
2417
- "name": "ruleList",
2056
+ "name": "target",
2418
2057
  "type": {
2419
- "text": "NamedRuleRow[]"
2058
+ "text": "T"
2420
2059
  }
2421
2060
  }
2422
- ]
2061
+ ],
2062
+ "description": "Merges pending sound / clear flag onto a create/update DETAILS object."
2423
2063
  },
2424
2064
  {
2425
2065
  "kind": "method",
2426
- "name": "ruleMatchId",
2427
- "privacy": "private",
2428
- "return": {
2429
- "type": {
2430
- "text": "string"
2431
- }
2432
- },
2433
- "parameters": [
2434
- {
2435
- "name": "rule",
2436
- "type": {
2437
- "text": "NamedRuleRow | undefined"
2438
- }
2439
- }
2440
- ]
2441
- },
2066
+ "name": "syncAlertSoundCacheAfterSave",
2067
+ "description": "Keep AlertSoundPlayer's in-memory NOTIFY_ALERT_SOUND cache in sync with\nwhat we just saved — otherwise the next alert still plays the old file."
2068
+ }
2069
+ ],
2070
+ "parameters": [
2442
2071
  {
2443
- "kind": "method",
2444
- "name": "syncSoundState",
2445
- "privacy": "private"
2072
+ "name": "Base",
2073
+ "type": {
2074
+ "text": "TBase"
2075
+ }
2446
2076
  }
2447
2077
  ],
2448
- "superclass": {
2449
- "name": "GenesisElement",
2450
- "package": "@genesislcap/web-core"
2451
- },
2452
- "tagName": "foundation-sounds-panel",
2453
- "customElement": true
2078
+ "privacy": "public"
2454
2079
  }
2455
2080
  ],
2456
2081
  "exports": [
2457
2082
  {
2458
2083
  "kind": "js",
2459
- "name": "FoundationSoundsPanel",
2084
+ "name": "alertSoundAttachmentTemplate",
2460
2085
  "declaration": {
2461
- "name": "FoundationSoundsPanel",
2462
- "module": "src/components/foundation-sounds/foundation-sounds-panel.ts"
2086
+ "name": "alertSoundAttachmentTemplate",
2087
+ "module": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts"
2463
2088
  }
2464
2089
  },
2465
2090
  {
2466
- "kind": "custom-element-definition",
2467
- "name": "foundation-sounds-panel",
2091
+ "kind": "js",
2092
+ "name": "AlertSoundAttachmentMixin",
2468
2093
  "declaration": {
2469
- "name": "FoundationSoundsPanel",
2470
- "module": "src/components/foundation-sounds/foundation-sounds-panel.ts"
2094
+ "name": "AlertSoundAttachmentMixin",
2095
+ "module": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts"
2471
2096
  }
2472
2097
  }
2473
2098
  ]
2474
2099
  },
2475
2100
  {
2476
2101
  "kind": "javascript-module",
2477
- "path": "src/components/foundation-sounds/foundation-sounds.styles.ts",
2102
+ "path": "src/components/foundation-notification-dashboard/index.ts",
2103
+ "declarations": [],
2104
+ "exports": [
2105
+ {
2106
+ "kind": "js",
2107
+ "name": "*",
2108
+ "declaration": {
2109
+ "name": "*",
2110
+ "package": "./notification-dashboard"
2111
+ }
2112
+ }
2113
+ ]
2114
+ },
2115
+ {
2116
+ "kind": "javascript-module",
2117
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.styles.ts",
2478
2118
  "declarations": [
2479
2119
  {
2480
2120
  "kind": "variable",
2481
- "name": "FoundationSoundsStyles",
2482
- "default": "css`\n :host {\n display: none;\n }\n`",
2483
- "description": "Headless layout listener — take no space in the layout chrome."
2121
+ "name": "FoundationNotificationDashboardStyles",
2122
+ "default": "css`\n .notification-dashboard,\n rapid-tabs,\n rapid-tab-panel {\n height: 100%;\n }\n\n .no-permissions {\n font-family: var(--body-font);\n color: var(--neutral-foreground-rest);\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n`",
2123
+ "privacy": "public"
2484
2124
  }
2485
2125
  ],
2486
2126
  "exports": [
2487
2127
  {
2488
2128
  "kind": "js",
2489
- "name": "FoundationSoundsStyles",
2129
+ "name": "FoundationNotificationDashboardStyles",
2490
2130
  "declaration": {
2491
- "name": "FoundationSoundsStyles",
2492
- "module": "src/components/foundation-sounds/foundation-sounds.styles.ts"
2131
+ "name": "FoundationNotificationDashboardStyles",
2132
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.styles.ts"
2493
2133
  }
2494
2134
  }
2495
2135
  ]
2496
2136
  },
2497
2137
  {
2498
2138
  "kind": "javascript-module",
2499
- "path": "src/components/foundation-sounds/foundation-sounds.ts",
2139
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts",
2500
2140
  "declarations": [
2501
2141
  {
2502
2142
  "kind": "class",
2503
- "description": "Headless listener for inbox alert inserts. Plays configured sounds via the\nshared AlertSoundPlayer. Mount once in the app layout.\n\nConfigure rules in the inbox Sounds tab with FoundationSoundsPanel.",
2504
- "name": "FoundationSounds",
2143
+ "description": "",
2144
+ "name": "NotificationDashboardTab",
2505
2145
  "members": [
2506
2146
  {
2507
2147
  "kind": "field",
2508
- "name": "connect",
2148
+ "name": "id",
2509
2149
  "type": {
2510
- "text": "Connect"
2150
+ "text": "string"
2511
2151
  }
2512
2152
  },
2513
2153
  {
2514
2154
  "kind": "field",
2515
- "name": "inboxService",
2155
+ "name": "name",
2516
2156
  "type": {
2517
- "text": "FoundationInboxService"
2157
+ "text": "string"
2518
2158
  }
2519
2159
  },
2520
2160
  {
2521
2161
  "kind": "field",
2522
- "name": "ruleService",
2162
+ "name": "component",
2523
2163
  "type": {
2524
- "text": "RuleService"
2164
+ "text": "string"
2525
2165
  }
2526
2166
  },
2527
2167
  {
2528
2168
  "kind": "field",
2529
- "name": "soundEnabled",
2530
- "type": {
2531
- "text": "boolean"
2532
- },
2533
- "default": "true",
2534
- "description": "When false, new audible alerts are tracked but do not play."
2535
- },
2536
- {
2537
- "kind": "field",
2538
- "name": "connectionSub",
2169
+ "name": "right",
2539
2170
  "type": {
2540
- "text": "Subscription | undefined"
2541
- },
2542
- "privacy": "private"
2543
- },
2544
- {
2545
- "kind": "field",
2546
- "name": "player",
2547
- "privacy": "private",
2548
- "readonly": true
2549
- },
2550
- {
2551
- "kind": "field",
2552
- "name": "knownAlertIds",
2553
- "privacy": "private",
2554
- "default": "new Set<string>()"
2555
- },
2556
- {
2557
- "kind": "field",
2558
- "name": "serverSoundFetches",
2559
- "privacy": "private",
2560
- "readonly": true,
2561
- "default": "new Map<string, Promise<boolean>>()",
2562
- "description": "In-flight server sound fetches keyed by DYNAMIC_RULE_ID."
2563
- },
2564
- {
2565
- "kind": "method",
2566
- "name": "subscribeToAlerts",
2567
- "privacy": "private",
2568
- "return": {
2569
- "type": {
2570
- "text": "void"
2571
- }
2171
+ "text": "string"
2572
2172
  }
2573
- },
2574
- {
2575
- "kind": "field",
2576
- "name": "subscriptionHandler",
2577
- "privacy": "private"
2578
- },
2579
- {
2580
- "kind": "method",
2581
- "name": "playForNewAlerts",
2582
- "privacy": "private",
2583
- "return": {
2584
- "type": {
2585
- "text": "Promise<void>"
2586
- }
2587
- },
2588
- "parameters": [
2589
- {
2590
- "name": "rows",
2591
- "type": {
2592
- "text": "Array<{\n id: string;\n message?: string;\n header?: string;\n dynamicRuleId?: string;\n }>"
2593
- }
2594
- }
2595
- ]
2596
- },
2597
- {
2598
- "kind": "method",
2599
- "name": "tryPlayServerSound",
2600
- "privacy": "private",
2601
- "return": {
2602
- "type": {
2603
- "text": "Promise<boolean>"
2604
- }
2605
- },
2606
- "parameters": [
2607
- {
2608
- "name": "dynamicRuleId",
2609
- "type": {
2610
- "text": "string"
2611
- }
2612
- }
2613
- ]
2614
- },
2615
- {
2616
- "kind": "method",
2617
- "name": "fetchAndCacheServerSound",
2618
- "privacy": "private",
2619
- "return": {
2620
- "type": {
2621
- "text": "Promise<boolean>"
2622
- }
2623
- },
2624
- "parameters": [
2625
- {
2626
- "name": "dynamicRuleId",
2627
- "type": {
2628
- "text": "string"
2629
- }
2630
- }
2631
- ]
2632
- }
2633
- ],
2634
- "attributes": [
2635
- {
2636
- "name": "sound-enabled",
2637
- "type": {
2638
- "text": "boolean"
2639
- },
2640
- "default": "true",
2641
- "description": "When false, new audible alerts are tracked but do not play.",
2642
- "fieldName": "soundEnabled"
2643
2173
  }
2644
- ],
2645
- "superclass": {
2646
- "name": "GenesisElement",
2647
- "package": "@genesislcap/web-core"
2174
+ ]
2175
+ },
2176
+ {
2177
+ "kind": "variable",
2178
+ "name": "NOTIFICATION_DASHBOARD_TABS",
2179
+ "type": {
2180
+ "text": "NotificationDashboardTab[]"
2648
2181
  },
2649
- "tagName": "foundation-sounds",
2650
- "customElement": true
2182
+ "default": "[\n {\n id: 'rules',\n name: 'Rules',\n component: 'rule-management',\n right: 'NotificationRuleView',\n },\n {\n id: 'templates',\n name: 'Templates',\n component: 'template-management',\n right: 'NotificationRuleTemplateView',\n },\n {\n id: 'routes',\n name: 'Routes',\n component: 'route-management',\n right: 'NotificationRouteView',\n },\n /* TODO: Not needed at the moment\n {\n id: 'notify-audit',\n name: 'Notify Audit',\n component: 'notify-audit-management',\n right: 'NotificationAuditView',\n },\n */\n]"
2651
2183
  }
2652
2184
  ],
2653
2185
  "exports": [
2654
2186
  {
2655
2187
  "kind": "js",
2656
- "name": "FoundationSounds",
2188
+ "name": "NotificationDashboardTab",
2657
2189
  "declaration": {
2658
- "name": "FoundationSounds",
2659
- "module": "src/components/foundation-sounds/foundation-sounds.ts"
2190
+ "name": "NotificationDashboardTab",
2191
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts"
2660
2192
  }
2661
2193
  },
2662
2194
  {
2663
- "kind": "custom-element-definition",
2664
- "name": "foundation-sounds",
2195
+ "kind": "js",
2196
+ "name": "NOTIFICATION_DASHBOARD_TABS",
2665
2197
  "declaration": {
2666
- "name": "FoundationSounds",
2667
- "module": "src/components/foundation-sounds/foundation-sounds.ts"
2198
+ "name": "NOTIFICATION_DASHBOARD_TABS",
2199
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts"
2668
2200
  }
2669
2201
  }
2670
2202
  ]
2671
2203
  },
2672
2204
  {
2673
2205
  "kind": "javascript-module",
2674
- "path": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts",
2206
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.template.ts",
2675
2207
  "declarations": [
2676
2208
  {
2677
2209
  "kind": "variable",
2678
- "name": "alertSoundAttachmentTemplate",
2679
- "default": "html<AlertSoundAttachmentHost>`\n <div class=\"alert-sound\">\n <input\n ${ref('fileInput')}\n class=\"file-input\"\n type=\"file\"\n accept=\"audio/*\"\n @change=${(x, c) => x.onAlertSoundSelected(c.event)}\n />\n <label>Alert sound</label>\n <div class=\"alert-sound-row\">\n <span class=\"alert-sound-name\" title=${(x) => x.alertSoundFileName || ''}>\n ${(x) => x.alertSoundFileName || 'No sound attached'}\n </span>\n <rapid-button appearance=\"lightweight\" @click=${(x) => x.openAlertSoundPicker()}>\n ${(x) => (x.hasAlertSound ? 'Replace' : 'Attach')}\n </rapid-button>\n ${when(\n (x) => x.hasAlertSound,\n html<AlertSoundAttachmentHost>`\n <rapid-button appearance=\"lightweight\" @click=${(x) => x.testAttachedAlertSound()}>\n Test\n </rapid-button>\n <rapid-button appearance=\"lightweight\" @click=${(x) => x.clearAttachedAlertSound()}>\n Clear\n </rapid-button>\n `,\n )}\n </div>\n </div>\n`",
2680
- "description": "Shared Attach/Replace/Test/Clear UI for rule and template dialogs.",
2681
- "privacy": "public"
2682
- },
2210
+ "name": "FoundationNotificationDashboardTemplate",
2211
+ "default": "html<FoundationNotificationDashboard>`\n <div class=\"notification-dashboard\">\n ${whenElse(\n (x) => x.hasPermissions,\n html`\n <rapid-tabs class=\"tabs\">\n <!-- Tabs -->\n ${repeat(\n (_) => NOTIFICATION_DASHBOARD_TABS,\n html<NotificationDashboardTab>`\n ${when(\n (x, c) => (c.parent.auth as Auth).currentUser.hasPermission(x.right),\n html<NotificationDashboardTab>`\n <rapid-tab slot=\"${(x) => x.id}-tab\">${(x) => x.name}</rapid-tab>\n `,\n )}\n `,\n )}\n\n <!-- Panels -->\n ${repeat(\n (_) => NOTIFICATION_DASHBOARD_TABS,\n html<NotificationDashboardTab>`\n ${when(\n (x, c) => (c.parent.auth as Auth).currentUser.hasPermission(x.right),\n html`\n ${\n /* HTML Render */\n (x) => html<NotificationDashboardTab>`\n <rapid-tab-panel slot=\"${x.id}-tab\"\n id=\"${x.id}-tab-panel\">\n <${x.component}></${x.component}>\n </rapid-tab-panel>\n `\n }\n `,\n )}\n `,\n )}\n </rapid-tabs>\n `,\n html`\n <div class=\"no-permissions\">\n <label>User has no permissions to view Notification Screens</label>\n </div>\n `,\n )}\n </div>\n`"
2212
+ }
2213
+ ],
2214
+ "exports": [
2683
2215
  {
2684
- "kind": "mixin",
2685
- "description": "Mixin: pick / test / clear / load server sound + apply fields to submit payload.\n\nSubclasses must provide ruleService, isAlertSoundEditMode,\nalertSoundEntityId, and alertSoundCacheSyncMode.",
2686
- "name": "AlertSoundAttachmentMixin",
2687
- "members": [
2688
- {
2689
- "kind": "field",
2690
- "name": "ruleService",
2691
- "type": {
2692
- "text": "RuleService"
2693
- }
2694
- },
2695
- {
2216
+ "kind": "js",
2217
+ "name": "FoundationNotificationDashboardTemplate",
2218
+ "declaration": {
2219
+ "name": "FoundationNotificationDashboardTemplate",
2220
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.template.ts"
2221
+ }
2222
+ }
2223
+ ]
2224
+ },
2225
+ {
2226
+ "kind": "javascript-module",
2227
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.ts",
2228
+ "declarations": [
2229
+ {
2230
+ "kind": "class",
2231
+ "description": "",
2232
+ "name": "FoundationNotificationDashboard",
2233
+ "members": [
2234
+ {
2696
2235
  "kind": "field",
2697
- "name": "isAlertSoundEditMode",
2236
+ "name": "auth",
2698
2237
  "type": {
2699
- "text": "boolean"
2700
- },
2701
- "description": "True when editing an existing entity (clear should set CLEAR_ALERT_SOUND).",
2702
- "readonly": true
2238
+ "text": "Auth"
2239
+ }
2703
2240
  },
2704
2241
  {
2705
2242
  "kind": "field",
2706
- "name": "alertSoundEntityId",
2243
+ "name": "ready",
2707
2244
  "type": {
2708
- "text": "string | null"
2245
+ "text": "boolean"
2709
2246
  },
2710
- "description": "DYNAMIC_RULE_ID of the entity being edited (null on create).\nUsed when alertSoundCacheSyncMode is `'entity'`.",
2711
- "readonly": true
2247
+ "default": "false"
2712
2248
  },
2713
2249
  {
2714
2250
  "kind": "field",
2715
- "name": "alertSoundCacheSyncMode",
2251
+ "name": "hasPermissions",
2716
2252
  "type": {
2717
- "text": "'entity' | 'all'"
2253
+ "text": "boolean"
2718
2254
  },
2719
- "description": "`'entity'` — update/clear cache for alertSoundEntityId (rules).\n`'all'` — drop every cached server sound (templates; instance ids unknown).",
2720
- "readonly": true
2721
- },
2255
+ "default": "true"
2256
+ }
2257
+ ],
2258
+ "superclass": {
2259
+ "name": "GenesisElement",
2260
+ "package": "@genesislcap/web-core"
2261
+ },
2262
+ "tagName": "foundation-notification-dashboard",
2263
+ "customElement": true
2264
+ }
2265
+ ],
2266
+ "exports": [
2267
+ {
2268
+ "kind": "js",
2269
+ "name": "FoundationNotificationDashboard",
2270
+ "declaration": {
2271
+ "name": "FoundationNotificationDashboard",
2272
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.ts"
2273
+ }
2274
+ },
2275
+ {
2276
+ "kind": "custom-element-definition",
2277
+ "name": "foundation-notification-dashboard",
2278
+ "declaration": {
2279
+ "name": "FoundationNotificationDashboard",
2280
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.ts"
2281
+ }
2282
+ }
2283
+ ]
2284
+ },
2285
+ {
2286
+ "kind": "javascript-module",
2287
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts",
2288
+ "declarations": [
2289
+ {
2290
+ "kind": "class",
2291
+ "description": "",
2292
+ "name": "UUIDGenerator",
2293
+ "members": [
2722
2294
  {
2723
2295
  "kind": "field",
2724
- "name": "alertSoundFileName",
2296
+ "name": "uuid",
2725
2297
  "type": {
2726
- "text": "string"
2298
+ "text": "UUID"
2727
2299
  },
2728
- "default": "''",
2729
- "description": "Display name of the attached / pending alert sound file."
2300
+ "privacy": "private",
2301
+ "static": true
2730
2302
  },
2731
2303
  {
2732
2304
  "kind": "field",
2733
- "name": "alertSoundMimeType",
2734
- "type": {
2735
- "text": "string"
2736
- },
2737
- "default": "''"
2305
+ "name": "createUUID",
2306
+ "static": true
2307
+ }
2308
+ ]
2309
+ },
2310
+ {
2311
+ "kind": "function",
2312
+ "name": "isEmpty",
2313
+ "parameters": [
2314
+ {
2315
+ "name": "value"
2316
+ }
2317
+ ]
2318
+ },
2319
+ {
2320
+ "kind": "class",
2321
+ "description": "",
2322
+ "name": "DynamicRuleUtils",
2323
+ "members": [
2324
+ {
2325
+ "kind": "field",
2326
+ "name": "createEmptyCondition",
2327
+ "static": true
2738
2328
  },
2739
2329
  {
2740
2330
  "kind": "field",
2741
- "name": "hasAlertSound",
2742
- "type": {
2743
- "text": "boolean"
2744
- },
2745
- "default": "false",
2746
- "description": "True when edit loaded an existing server sound (or user attached one)."
2331
+ "name": "createAssignment",
2332
+ "static": true
2747
2333
  },
2748
2334
  {
2749
2335
  "kind": "field",
2750
- "name": "fileInput",
2751
- "type": {
2752
- "text": "HTMLInputElement"
2753
- }
2336
+ "name": "createTextAssignment",
2337
+ "static": true
2754
2338
  },
2755
2339
  {
2756
2340
  "kind": "field",
2757
- "name": "pendingAlertSoundData",
2758
- "type": {
2759
- "text": "string | null"
2760
- },
2761
- "default": "null"
2341
+ "name": "getAssignmentValue",
2342
+ "static": true
2762
2343
  },
2763
2344
  {
2764
2345
  "kind": "field",
2765
- "name": "alertSoundDirty",
2766
- "type": {
2767
- "text": "boolean"
2346
+ "name": "getAssignmentText",
2347
+ "static": true
2348
+ },
2349
+ {
2350
+ "kind": "method",
2351
+ "name": "createConditions",
2352
+ "static": true,
2353
+ "return": {
2354
+ "type": {
2355
+ "text": "any"
2356
+ }
2768
2357
  },
2769
- "default": "false",
2770
- "description": "True when the user picked a new file this session (needs upload)."
2358
+ "parameters": [
2359
+ {
2360
+ "name": "conditions",
2361
+ "type": {
2362
+ "text": "ConditionNode[]"
2363
+ }
2364
+ },
2365
+ {
2366
+ "name": "parameters",
2367
+ "optional": true
2368
+ }
2369
+ ]
2771
2370
  },
2772
2371
  {
2773
- "kind": "field",
2774
- "name": "clearAlertSound",
2775
- "type": {
2776
- "text": "boolean"
2372
+ "kind": "method",
2373
+ "name": "hasMultiValueCondition",
2374
+ "static": true,
2375
+ "return": {
2376
+ "type": {
2377
+ "text": "boolean"
2378
+ }
2777
2379
  },
2778
- "default": "false"
2380
+ "parameters": [
2381
+ {
2382
+ "name": "conditions",
2383
+ "type": {
2384
+ "text": "ConditionNode[]"
2385
+ }
2386
+ }
2387
+ ]
2388
+ },
2389
+ {
2390
+ "kind": "method",
2391
+ "name": "hasOrJoin",
2392
+ "static": true,
2393
+ "return": {
2394
+ "type": {
2395
+ "text": "boolean"
2396
+ }
2397
+ },
2398
+ "parameters": [
2399
+ {
2400
+ "name": "conditions",
2401
+ "type": {
2402
+ "text": "ConditionNode[]"
2403
+ }
2404
+ }
2405
+ ]
2406
+ },
2407
+ {
2408
+ "kind": "method",
2409
+ "name": "hasGroup",
2410
+ "static": true,
2411
+ "return": {
2412
+ "type": {
2413
+ "text": "boolean"
2414
+ }
2415
+ },
2416
+ "parameters": [
2417
+ {
2418
+ "name": "conditions",
2419
+ "type": {
2420
+ "text": "ConditionNode[]"
2421
+ }
2422
+ }
2423
+ ]
2424
+ },
2425
+ {
2426
+ "kind": "method",
2427
+ "name": "hasUnsupportedOperator",
2428
+ "static": true,
2429
+ "return": {
2430
+ "type": {
2431
+ "text": "boolean"
2432
+ }
2433
+ },
2434
+ "parameters": [
2435
+ {
2436
+ "name": "conditions",
2437
+ "type": {
2438
+ "text": "ConditionNode[]"
2439
+ }
2440
+ }
2441
+ ]
2442
+ },
2443
+ {
2444
+ "kind": "method",
2445
+ "name": "flattenConditions",
2446
+ "static": true,
2447
+ "return": {
2448
+ "type": {
2449
+ "text": "ConditionBuilderEntity[]"
2450
+ }
2451
+ },
2452
+ "parameters": [
2453
+ {
2454
+ "name": "conditions",
2455
+ "type": {
2456
+ "text": "ConditionNode[]"
2457
+ }
2458
+ }
2459
+ ]
2460
+ },
2461
+ {
2462
+ "kind": "method",
2463
+ "name": "resolveLeftValues",
2464
+ "static": true,
2465
+ "return": {
2466
+ "type": {
2467
+ "text": "ConditionNode[]"
2468
+ }
2469
+ },
2470
+ "parameters": [
2471
+ {
2472
+ "name": "conditions",
2473
+ "type": {
2474
+ "text": "ConditionNode[]"
2475
+ }
2476
+ },
2477
+ {
2478
+ "name": "fields",
2479
+ "type": {
2480
+ "text": "any[]"
2481
+ }
2482
+ }
2483
+ ]
2779
2484
  },
2780
2485
  {
2781
2486
  "kind": "field",
2782
- "name": "testAudio",
2783
- "type": {
2784
- "text": "HTMLAudioElement | null"
2487
+ "name": "createEmptyGroup",
2488
+ "static": true
2489
+ },
2490
+ {
2491
+ "kind": "method",
2492
+ "name": "buildRawExpression",
2493
+ "static": true,
2494
+ "return": {
2495
+ "type": {
2496
+ "text": "string"
2497
+ }
2785
2498
  },
2786
- "default": "null",
2787
- "description": "In-progress Test playback; not private — mixin return type is exported."
2499
+ "parameters": [
2500
+ {
2501
+ "name": "conditions",
2502
+ "type": {
2503
+ "text": "ConditionNode[]"
2504
+ }
2505
+ }
2506
+ ]
2788
2507
  },
2789
2508
  {
2790
2509
  "kind": "method",
2791
- "name": "loadExistingAlertSound",
2510
+ "name": "parseRawExpression",
2511
+ "static": true,
2512
+ "return": {
2513
+ "type": {
2514
+ "text": "ConditionNode[] | null"
2515
+ }
2516
+ },
2792
2517
  "parameters": [
2793
2518
  {
2794
- "name": "dynamicRuleId",
2519
+ "name": "rawExpression",
2795
2520
  "type": {
2796
2521
  "text": "string"
2797
2522
  }
2798
2523
  }
2799
2524
  ]
2525
+ }
2526
+ ]
2527
+ },
2528
+ {
2529
+ "kind": "class",
2530
+ "description": "",
2531
+ "name": "TemplateUtils",
2532
+ "members": [
2533
+ {
2534
+ "kind": "field",
2535
+ "name": "createEmptyParameter",
2536
+ "static": true
2537
+ },
2538
+ {
2539
+ "kind": "method",
2540
+ "name": "getParameters",
2541
+ "static": true,
2542
+ "parameters": [
2543
+ {
2544
+ "name": "parameters"
2545
+ }
2546
+ ]
2547
+ },
2548
+ {
2549
+ "kind": "method",
2550
+ "name": "buildRightValue",
2551
+ "privacy": "private",
2552
+ "static": true,
2553
+ "parameters": [
2554
+ {
2555
+ "name": "logicalOperator",
2556
+ "type": {
2557
+ "text": "LogicalOperator"
2558
+ }
2559
+ },
2560
+ {
2561
+ "name": "condition"
2562
+ },
2563
+ {
2564
+ "name": "parameters",
2565
+ "optional": true
2566
+ }
2567
+ ]
2568
+ },
2569
+ {
2570
+ "kind": "method",
2571
+ "name": "getConditions",
2572
+ "static": true,
2573
+ "parameters": [
2574
+ {
2575
+ "name": "conditions"
2576
+ },
2577
+ {
2578
+ "name": "parameters",
2579
+ "optional": true
2580
+ }
2581
+ ]
2800
2582
  },
2801
2583
  {
2802
2584
  "kind": "method",
2803
- "name": "openAlertSoundPicker"
2804
- },
2805
- {
2806
- "kind": "method",
2807
- "name": "onAlertSoundSelected",
2585
+ "name": "createParameterDetails",
2586
+ "static": true,
2808
2587
  "parameters": [
2809
2588
  {
2810
- "name": "event",
2811
- "type": {
2812
- "text": "Event"
2813
- }
2589
+ "name": "parameters"
2814
2590
  }
2815
2591
  ]
2816
- },
2817
- {
2818
- "kind": "method",
2819
- "name": "clearAttachedAlertSound"
2820
- },
2821
- {
2822
- "kind": "method",
2823
- "name": "testAttachedAlertSound"
2824
- },
2825
- {
2826
- "kind": "method",
2827
- "name": "stopTestSound"
2828
- },
2829
- {
2830
- "kind": "method",
2831
- "name": "resetAlertSoundState"
2832
- },
2592
+ }
2593
+ ]
2594
+ },
2595
+ {
2596
+ "kind": "class",
2597
+ "description": "",
2598
+ "name": "RuleUtils",
2599
+ "members": [
2833
2600
  {
2834
2601
  "kind": "method",
2835
- "name": "applyAlertSoundToPayload",
2836
- "return": {
2837
- "type": {
2838
- "text": "T"
2839
- }
2840
- },
2602
+ "name": "buildRightValue",
2603
+ "privacy": "private",
2604
+ "static": true,
2841
2605
  "parameters": [
2842
2606
  {
2843
- "name": "target",
2607
+ "name": "logicalOperator",
2844
2608
  "type": {
2845
- "text": "T"
2609
+ "text": "LogicalOperator"
2846
2610
  }
2611
+ },
2612
+ {
2613
+ "name": "condition"
2847
2614
  }
2848
- ],
2849
- "description": "Merges pending sound / clear flag onto a create/update DETAILS object."
2615
+ ]
2850
2616
  },
2851
2617
  {
2852
2618
  "kind": "method",
2853
- "name": "syncAlertSoundCacheAfterSave",
2854
- "description": "Keep AlertSoundPlayer's in-memory NOTIFY_ALERT_SOUND cache in sync with\nwhat we just saved — otherwise the next alert still plays the old file."
2619
+ "name": "getConditions",
2620
+ "static": true,
2621
+ "parameters": [
2622
+ {
2623
+ "name": "conditions"
2624
+ }
2625
+ ]
2855
2626
  }
2856
- ],
2627
+ ]
2628
+ },
2629
+ {
2630
+ "kind": "function",
2631
+ "name": "showNotificationError",
2857
2632
  "parameters": [
2858
2633
  {
2859
- "name": "Base",
2860
- "type": {
2861
- "text": "TBase"
2862
- }
2634
+ "name": "error"
2863
2635
  }
2864
- ],
2865
- "privacy": "public"
2636
+ ]
2866
2637
  }
2867
2638
  ],
2868
2639
  "exports": [
2869
2640
  {
2870
2641
  "kind": "js",
2871
- "name": "alertSoundAttachmentTemplate",
2642
+ "name": "UUIDGenerator",
2872
2643
  "declaration": {
2873
- "name": "alertSoundAttachmentTemplate",
2874
- "module": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts"
2644
+ "name": "UUIDGenerator",
2645
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2875
2646
  }
2876
2647
  },
2877
2648
  {
2878
2649
  "kind": "js",
2879
- "name": "AlertSoundAttachmentMixin",
2650
+ "name": "isEmpty",
2880
2651
  "declaration": {
2881
- "name": "AlertSoundAttachmentMixin",
2882
- "module": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts"
2652
+ "name": "isEmpty",
2653
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2883
2654
  }
2884
- }
2885
- ]
2886
- },
2887
- {
2888
- "kind": "javascript-module",
2889
- "path": "src/components/foundation-notification-dashboard/index.ts",
2890
- "declarations": [],
2891
- "exports": [
2655
+ },
2892
2656
  {
2893
2657
  "kind": "js",
2894
- "name": "*",
2658
+ "name": "DynamicRuleUtils",
2895
2659
  "declaration": {
2896
- "name": "*",
2897
- "package": "./notification-dashboard"
2660
+ "name": "DynamicRuleUtils",
2661
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2898
2662
  }
2899
- }
2900
- ]
2901
- },
2902
- {
2903
- "kind": "javascript-module",
2904
- "path": "src/components/foundation-notification-dashboard/notification-dashboard.styles.ts",
2905
- "declarations": [
2906
- {
2907
- "kind": "variable",
2908
- "name": "FoundationNotificationDashboardStyles",
2909
- "default": "css`\n .notification-dashboard,\n rapid-tabs,\n rapid-tab-panel {\n height: 100%;\n }\n\n .no-permissions {\n font-family: var(--body-font);\n color: var(--neutral-foreground-rest);\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n`",
2910
- "privacy": "public"
2911
- }
2912
- ],
2913
- "exports": [
2663
+ },
2914
2664
  {
2915
2665
  "kind": "js",
2916
- "name": "FoundationNotificationDashboardStyles",
2666
+ "name": "TemplateUtils",
2917
2667
  "declaration": {
2918
- "name": "FoundationNotificationDashboardStyles",
2919
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.styles.ts"
2668
+ "name": "TemplateUtils",
2669
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2920
2670
  }
2921
- }
2922
- ]
2923
- },
2924
- {
2925
- "kind": "javascript-module",
2926
- "path": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts",
2927
- "declarations": [
2928
- {
2929
- "kind": "class",
2930
- "description": "",
2931
- "name": "NotificationDashboardTab",
2932
- "members": [
2933
- {
2934
- "kind": "field",
2935
- "name": "id",
2936
- "type": {
2937
- "text": "string"
2938
- }
2939
- },
2940
- {
2941
- "kind": "field",
2942
- "name": "name",
2943
- "type": {
2944
- "text": "string"
2945
- }
2946
- },
2947
- {
2948
- "kind": "field",
2949
- "name": "component",
2950
- "type": {
2951
- "text": "string"
2952
- }
2953
- },
2954
- {
2955
- "kind": "field",
2956
- "name": "right",
2957
- "type": {
2958
- "text": "string"
2959
- }
2960
- }
2961
- ]
2962
2671
  },
2963
- {
2964
- "kind": "variable",
2965
- "name": "NOTIFICATION_DASHBOARD_TABS",
2966
- "type": {
2967
- "text": "NotificationDashboardTab[]"
2968
- },
2969
- "default": "[\n {\n id: 'rules',\n name: 'Rules',\n component: 'rule-management',\n right: 'NotificationRuleView',\n },\n {\n id: 'templates',\n name: 'Templates',\n component: 'template-management',\n right: 'NotificationRuleTemplateView',\n },\n {\n id: 'routes',\n name: 'Routes',\n component: 'route-management',\n right: 'NotificationRouteView',\n },\n /* TODO: Not needed at the moment\n {\n id: 'notify-audit',\n name: 'Notify Audit',\n component: 'notify-audit-management',\n right: 'NotificationAuditView',\n },\n */\n]"
2970
- }
2971
- ],
2972
- "exports": [
2973
2672
  {
2974
2673
  "kind": "js",
2975
- "name": "NotificationDashboardTab",
2674
+ "name": "RuleUtils",
2976
2675
  "declaration": {
2977
- "name": "NotificationDashboardTab",
2978
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts"
2676
+ "name": "RuleUtils",
2677
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2979
2678
  }
2980
2679
  },
2981
2680
  {
2982
2681
  "kind": "js",
2983
- "name": "NOTIFICATION_DASHBOARD_TABS",
2682
+ "name": "showNotificationError",
2984
2683
  "declaration": {
2985
- "name": "NOTIFICATION_DASHBOARD_TABS",
2986
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts"
2684
+ "name": "showNotificationError",
2685
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2987
2686
  }
2988
2687
  }
2989
2688
  ]
2990
2689
  },
2991
2690
  {
2992
2691
  "kind": "javascript-module",
2993
- "path": "src/components/foundation-notification-dashboard/notification-dashboard.template.ts",
2692
+ "path": "src/components/foundation-sounds/foundation-sounds-panel.styles.ts",
2994
2693
  "declarations": [
2995
2694
  {
2996
2695
  "kind": "variable",
2997
- "name": "FoundationNotificationDashboardTemplate",
2998
- "default": "html<FoundationNotificationDashboard>`\n <div class=\"notification-dashboard\">\n ${whenElse(\n (x) => x.hasPermissions,\n html`\n <rapid-tabs class=\"tabs\">\n <!-- Tabs -->\n ${repeat(\n (_) => NOTIFICATION_DASHBOARD_TABS,\n html<NotificationDashboardTab>`\n ${when(\n (x, c) => (c.parent.auth as Auth).currentUser.hasPermission(x.right),\n html<NotificationDashboardTab>`\n <rapid-tab slot=\"${(x) => x.id}-tab\">${(x) => x.name}</rapid-tab>\n `,\n )}\n `,\n )}\n\n <!-- Panels -->\n ${repeat(\n (_) => NOTIFICATION_DASHBOARD_TABS,\n html<NotificationDashboardTab>`\n ${when(\n (x, c) => (c.parent.auth as Auth).currentUser.hasPermission(x.right),\n html`\n ${\n /* HTML Render */\n (x) => html<NotificationDashboardTab>`\n <rapid-tab-panel slot=\"${x.id}-tab\"\n id=\"${x.id}-tab-panel\">\n <${x.component}></${x.component}>\n </rapid-tab-panel>\n `\n }\n `,\n )}\n `,\n )}\n </rapid-tabs>\n `,\n html`\n <div class=\"no-permissions\">\n <label>User has no permissions to view Notification Screens</label>\n </div>\n `,\n )}\n </div>\n`"
2696
+ "name": "FoundationSoundsPanelStyles",
2697
+ "default": "css`\n :host {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n width: 100%;\n }\n\n .sounds-controls {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n gap: 12px;\n padding: calc(var(--design-unit) * 3px);\n box-sizing: border-box;\n }\n\n .sounds-help-disclosure {\n flex: 0 0 auto;\n }\n\n .sounds-help-toggle {\n margin-inline-start: calc(var(--design-unit) * 1px);\n }\n\n .sounds-help-toggle::before {\n content: '+';\n }\n\n .sounds-help-disclosure[expanded] .sounds-help-toggle::before {\n content: '−';\n }\n\n .sounds-help {\n margin: 0;\n font-size: var(--type-ramp-minus-1-font-size);\n color: var(--neutral-foreground-hint);\n text-align: left;\n }\n\n .volume-row {\n display: flex;\n align-items: center;\n flex: 0 0 auto;\n gap: calc(var(--design-unit) * 2px);\n min-width: 0;\n }\n\n .volume-icon {\n flex: 0 0 auto;\n }\n\n .volume-label {\n flex: 0 0 auto;\n font-size: var(--type-ramp-minus-1-font-size);\n color: var(--neutral-foreground-hint);\n }\n\n .volume-slider {\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .volume-percent {\n flex: 0 0 auto;\n min-width: 3ch;\n text-align: end;\n font-size: var(--type-ramp-minus-1-font-size);\n color: var(--neutral-foreground-hint);\n }\n\n .mute-all {\n flex: 0 0 auto;\n margin: 0;\n }\n\n .sound-rules-panel {\n flex: 1 1 auto;\n min-height: 0;\n overflow: auto;\n }\n\n .sound-rules {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .sound-rule {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n border: calc(var(--stroke-width) * 1px) solid var(--neutral-stroke-divider-rest);\n border-radius: calc(var(--control-corner-radius) * 1px);\n\n /* Keep absolute listboxes from being clipped by the card itself. */\n overflow: visible;\n }\n\n .sound-rule-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-weight: 700;\n font-size: var(--type-ramp-minus-1-font-size);\n }\n\n .sound-rule-actions {\n display: flex;\n align-items: center;\n gap: 2px;\n }\n\n .sound-rule-label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: var(--type-ramp-minus-1-font-size);\n color: var(--neutral-foreground-hint);\n }\n\n .pattern-input,\n .match-mode-select,\n .rule-select,\n .sound-file-input {\n width: 100%;\n }\n\n /*\n * Anchor the listbox to the select host and use position:fixed so it escapes\n * .sound-rules-panel overflow:auto (and the rule card). Each select sets a\n * unique --sounds-select-anchor / anchor-name via inline style.\n * !important beats FAST's internal absolute top/bottom for [open] selects.\n */\n .match-mode-select[open]::part(listbox),\n .rule-select[open]::part(listbox) {\n position: fixed !important;\n /* stylelint-disable-next-line property-no-unknown -- CSS anchor positioning */\n position-anchor: var(--sounds-select-anchor);\n inset: auto !important;\n top: anchor(bottom) !important;\n left: anchor(left) !important;\n right: anchor(right) !important;\n bottom: auto !important;\n width: auto !important;\n margin-top: calc(var(--design-unit) * 1px);\n z-index: 10000;\n max-height: min(240px, 40vh);\n overflow-x: hidden;\n overflow-y: auto;\n box-shadow: 0 4px 16px rgb(0 0 0 / 24%);\n }\n\n .match-mode-select[open][position='above']::part(listbox),\n .rule-select[open][position='above']::part(listbox) {\n top: auto !important;\n bottom: anchor(top) !important;\n margin-top: 0;\n margin-bottom: calc(var(--design-unit) * 1px);\n }\n\n .sound-file-row {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .sound-file-row .sound-file-input {\n flex: 1;\n min-width: 0;\n }\n\n .choose-sound {\n cursor: pointer;\n }\n\n .sound-rules-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 0 0 auto;\n gap: 8px;\n }\n\n .rule-count {\n font-size: var(--type-ramp-minus-1-font-size);\n color: var(--neutral-foreground-hint);\n }\n\n .file-input {\n display: none;\n }\n\n ${scrollbarStyles}\n`"
2999
2698
  }
3000
2699
  ],
3001
2700
  "exports": [
3002
2701
  {
3003
2702
  "kind": "js",
3004
- "name": "FoundationNotificationDashboardTemplate",
2703
+ "name": "FoundationSoundsPanelStyles",
3005
2704
  "declaration": {
3006
- "name": "FoundationNotificationDashboardTemplate",
3007
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.template.ts"
2705
+ "name": "FoundationSoundsPanelStyles",
2706
+ "module": "src/components/foundation-sounds/foundation-sounds-panel.styles.ts"
3008
2707
  }
3009
2708
  }
3010
2709
  ]
3011
2710
  },
3012
2711
  {
3013
2712
  "kind": "javascript-module",
3014
- "path": "src/components/foundation-notification-dashboard/notification-dashboard.ts",
2713
+ "path": "src/components/foundation-sounds/foundation-sounds-panel.template.ts",
3015
2714
  "declarations": [
3016
2715
  {
3017
- "kind": "class",
3018
- "description": "",
3019
- "name": "FoundationNotificationDashboard",
3020
- "members": [
3021
- {
3022
- "kind": "field",
3023
- "name": "auth",
3024
- "type": {
3025
- "text": "Auth"
3026
- }
3027
- },
3028
- {
3029
- "kind": "field",
3030
- "name": "ready",
3031
- "type": {
3032
- "text": "boolean"
3033
- },
3034
- "default": "false"
3035
- },
3036
- {
3037
- "kind": "field",
3038
- "name": "hasPermissions",
3039
- "type": {
3040
- "text": "boolean"
3041
- },
3042
- "default": "true"
3043
- }
3044
- ],
3045
- "superclass": {
3046
- "name": "GenesisElement",
3047
- "package": "@genesislcap/web-core"
3048
- },
3049
- "tagName": "foundation-notification-dashboard",
3050
- "customElement": true
2716
+ "kind": "variable",
2717
+ "name": "FoundationSoundsPanelTemplate",
2718
+ "default": "html<FoundationSoundsPanel>`\n <div class=\"sounds-controls\" part=\"controls\">\n <input\n ${ref('fileInput')}\n class=\"file-input\"\n type=\"file\"\n accept=\"audio/*\"\n @change=${(x, c) => x.onFileSelected(c.event)}\n />\n <rapid-disclosure class=\"sounds-help-disclosure\" appearance=\"lightweight\">\n <span slot=\"title\">\n Sound Alerts Information\n <span class=\"sounds-help-toggle\" aria-hidden=\"true\"></span>\n </span>\n <p class=\"sounds-help\">\n Add up to ${(x) => x.maxRules} sounds.\n <br />\n Match text in MESSAGE or HEADER (a word or phrase), or a notification rule (including rules\n created when you subscribe to a template).\n <br />\n The first matching rule is played.\n </p>\n </rapid-disclosure>\n <div class=\"volume-row\">\n <rapid-icon\n class=\"volume-icon\"\n name=${(x) => (x.muted || x.volumePercent === 0 ? 'volume-xmark' : 'volume-high')}\n ></rapid-icon>\n <span class=\"volume-label\">Volume</span>\n <rapid-slider\n class=\"volume-slider\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n :value=${(x) => String(x.volumePercent)}\n @change=${(x, c) => x.onVolumeChange(c.event)}\n ></rapid-slider>\n <span class=\"volume-percent\">${(x) => `${x.volumePercent}%`}</span>\n <rapid-button\n class=\"mute-all\"\n appearance=\"lightweight\"\n title=${(x) => (x.muted ? 'Unmute alert sounds' : 'Mute all alert sounds')}\n @click=${(x) => x.toggleMute()}\n >\n ${(x) => (x.muted ? 'Unmute' : 'Mute all')}\n </rapid-button>\n </div>\n <div class=\"sound-rules-panel\">\n <div class=\"sound-rules\">\n ${repeat(\n (x) => x.rules,\n html<AlertSoundRuleView, FoundationSoundsPanel>`\n <div class=\"sound-rule\" data-rule-index=${(x) => x.index}>\n <div class=\"sound-rule-header\">\n <span>Rule ${(x) => x.index + 1}</span>\n <div class=\"sound-rule-actions\">\n <rapid-button\n class=\"mute-rule\"\n appearance=\"stealth\"\n title=${(x) => (x.muted ? 'Unmute this rule' : 'Mute this rule')}\n @click=${(x, c) => c.parent.toggleRuleMute(x.index)}\n >\n <rapid-icon\n name=${(x) => (x.muted ? 'volume-xmark' : 'volume-high')}\n ></rapid-icon>\n </rapid-button>\n <rapid-button\n class=\"remove-rule\"\n appearance=\"stealth\"\n title=${(_, c) => (c.parent.canRemoveRule ? 'Remove rule' : 'Reset rule')}\n @click=${(x, c) => c.parent.removeRule(x.index)}\n >\n <rapid-icon name=\"trash\"></rapid-icon>\n </rapid-button>\n </div>\n </div>\n <label class=\"sound-rule-label\">\n Match by\n <rapid-select\n class=\"match-mode-select\"\n style=${(x) =>\n `anchor-name: --sound-match-${x.index}; --sounds-select-anchor: --sound-match-${x.index}`}\n :value=${(x) => x.matchMode}\n @change=${(x, c) => c.parent.onMatchModeChange(x.index, c.event)}\n >\n <rapid-option value=\"message\">MESSAGE text</rapid-option>\n <rapid-option value=\"header\">HEADER text</rapid-option>\n <rapid-option value=\"rule\">Notification rule</rapid-option>\n </rapid-select>\n </label>\n <label\n class=\"sound-rule-label\"\n style=${(x) => (x.matchMode === 'rule' ? 'display: none;' : '')}\n >\n ${(x) => (x.matchMode === 'header' ? 'HEADER text' : 'MESSAGE text')}\n <rapid-text-field\n class=\"pattern-input\"\n placeholder=${(x) =>\n x.matchMode === 'header' ? 'e.g. Price alert' : 'e.g. limit breached'}\n :value=${(x) => x.pattern}\n @input=${(x, c) => c.parent.onPatternInput(x.index, c.event)}\n ></rapid-text-field>\n </label>\n <label\n class=\"sound-rule-label\"\n style=${(x) => (x.matchMode === 'rule' ? '' : 'display: none;')}\n >\n Notification rule\n <rapid-select\n class=\"rule-select\"\n style=${(x) =>\n `anchor-name: --sound-rule-${x.index}; --sounds-select-anchor: --sound-rule-${x.index}`}\n :value=${(x) => x.templateId ?? ''}\n @change=${(x, c) => c.parent.onRuleChange(x.index, c.event)}\n >\n <options-datasource\n value-field=\"id\"\n label-field=\"name\"\n option-element=\"rapid-option\"\n :data=${(_, c) => c.parent.ruleSelectOptions}\n ></options-datasource>\n </rapid-select>\n </label>\n <label class=\"sound-rule-label\">\n Sound file\n <div class=\"sound-file-row\">\n <rapid-text-field\n class=\"sound-file-input\"\n readonly\n placeholder=\"No sound selected\"\n :value=${(x) => x.fileName ?? ''}\n title=${(x) => x.fileName ?? 'No sound selected'}\n >\n <rapid-icon\n slot=\"end\"\n class=\"choose-sound\"\n name=\"folder-open\"\n title=\"Choose alert sound\"\n @click=${(x, c) => {\n c.event.stopPropagation();\n return c.parent.openFilePicker(x.index);\n }}\n ></rapid-icon>\n </rapid-text-field>\n <rapid-button\n class=\"test-sound\"\n appearance=\"stealth\"\n title=\"Test play this sound\"\n ?disabled=${(x) => !x.hasSound}\n @click=${(x, c) => c.parent.testSound(x.index)}\n >\n <rapid-icon name=\"play\"></rapid-icon>\n </rapid-button>\n <rapid-button\n class=\"clear-sound\"\n appearance=\"stealth\"\n title=\"Clear sound file\"\n ?disabled=${(x) => !x.hasSound}\n @click=${(x, c) => c.parent.clearSound(x.index)}\n >\n <rapid-icon name=\"times\"></rapid-icon>\n </rapid-button>\n </div>\n </label>\n </div>\n `,\n )}\n </div>\n </div>\n <div class=\"sound-rules-footer\">\n <rapid-button\n class=\"add-rule\"\n appearance=\"lightweight\"\n title=\"Add sound rule\"\n ?disabled=${(x) => !x.canAddRule}\n @click=${(x) => x.addRule()}\n >\n <rapid-icon name=\"plus\"></rapid-icon>\n Add rule\n </rapid-button>\n <span class=\"rule-count\">${(x) => `${x.rules.length} / ${x.maxRules}`}</span>\n </div>\n </div>\n`"
3051
2719
  }
3052
2720
  ],
3053
2721
  "exports": [
3054
2722
  {
3055
2723
  "kind": "js",
3056
- "name": "FoundationNotificationDashboard",
3057
- "declaration": {
3058
- "name": "FoundationNotificationDashboard",
3059
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.ts"
3060
- }
3061
- },
3062
- {
3063
- "kind": "custom-element-definition",
3064
- "name": "foundation-notification-dashboard",
2724
+ "name": "FoundationSoundsPanelTemplate",
3065
2725
  "declaration": {
3066
- "name": "FoundationNotificationDashboard",
3067
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.ts"
2726
+ "name": "FoundationSoundsPanelTemplate",
2727
+ "module": "src/components/foundation-sounds/foundation-sounds-panel.template.ts"
3068
2728
  }
3069
2729
  }
3070
2730
  ]
3071
2731
  },
3072
2732
  {
3073
2733
  "kind": "javascript-module",
3074
- "path": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts",
2734
+ "path": "src/components/foundation-sounds/foundation-sounds-panel.ts",
3075
2735
  "declarations": [
3076
2736
  {
3077
2737
  "kind": "class",
3078
- "description": "",
3079
- "name": "UUIDGenerator",
2738
+ "description": "Configures alert sound rules in the inbox Sounds tab. Persists via the shared\nAlertSoundPlayer; playback is handled by layout-mounted\nFoundationSounds.",
2739
+ "name": "FoundationSoundsPanel",
3080
2740
  "members": [
3081
2741
  {
3082
2742
  "kind": "field",
3083
- "name": "uuid",
2743
+ "name": "ruleService",
3084
2744
  "type": {
3085
- "text": "UUID"
3086
- },
3087
- "privacy": "private",
3088
- "static": true
2745
+ "text": "RuleService"
2746
+ }
3089
2747
  },
3090
2748
  {
3091
2749
  "kind": "field",
3092
- "name": "createUUID",
3093
- "static": true
3094
- }
3095
- ]
3096
- },
3097
- {
3098
- "kind": "function",
3099
- "name": "isEmpty",
3100
- "parameters": [
2750
+ "name": "volumePercent",
2751
+ "type": {
2752
+ "text": "number"
2753
+ },
2754
+ "default": "100",
2755
+ "description": "Global playback volume 0–100. @internal"
2756
+ },
3101
2757
  {
3102
- "name": "value"
3103
- }
3104
- ]
3105
- },
3106
- {
3107
- "kind": "class",
3108
- "description": "",
3109
- "name": "DynamicRuleUtils",
3110
- "members": [
2758
+ "kind": "field",
2759
+ "name": "selectableRules",
2760
+ "type": {
2761
+ "text": "AlertSoundSelectableRule[]"
2762
+ },
2763
+ "default": "[]",
2764
+ "description": "Notification rules from REQ_NOTIFICATION_RULE. @internal"
2765
+ },
3111
2766
  {
3112
2767
  "kind": "field",
3113
- "name": "createEmptyCondition",
3114
- "static": true
2768
+ "name": "fileInput",
2769
+ "type": {
2770
+ "text": "HTMLInputElement"
2771
+ }
3115
2772
  },
3116
2773
  {
3117
2774
  "kind": "field",
3118
- "name": "createAssignment",
3119
- "static": true
2775
+ "name": "pendingRuleIndex",
2776
+ "type": {
2777
+ "text": "number | null"
2778
+ },
2779
+ "privacy": "private",
2780
+ "default": "null"
3120
2781
  },
3121
2782
  {
3122
2783
  "kind": "field",
3123
- "name": "createTextAssignment",
3124
- "static": true
2784
+ "name": "player",
2785
+ "privacy": "private",
2786
+ "readonly": true
3125
2787
  },
3126
2788
  {
3127
2789
  "kind": "field",
3128
- "name": "getAssignmentValue",
3129
- "static": true
2790
+ "name": "unsubscribePlayer",
2791
+ "type": {
2792
+ "text": "(() => void) | undefined"
2793
+ },
2794
+ "privacy": "private"
3130
2795
  },
3131
2796
  {
3132
2797
  "kind": "field",
3133
- "name": "getAssignmentText",
3134
- "static": true
2798
+ "name": "ignoreSelectChanges",
2799
+ "type": {
2800
+ "text": "boolean"
2801
+ },
2802
+ "privacy": "private",
2803
+ "default": "false",
2804
+ "description": "Suppresses select change events while options are rebuilt."
3135
2805
  },
3136
2806
  {
3137
2807
  "kind": "method",
3138
- "name": "createConditions",
3139
- "static": true,
2808
+ "name": "onMatchModeChange",
3140
2809
  "return": {
3141
2810
  "type": {
3142
- "text": "any"
2811
+ "text": "boolean"
3143
2812
  }
3144
2813
  },
3145
2814
  "parameters": [
3146
2815
  {
3147
- "name": "conditions",
2816
+ "name": "index",
3148
2817
  "type": {
3149
- "text": "ConditionNode[]"
2818
+ "text": "number"
3150
2819
  }
3151
2820
  },
3152
2821
  {
3153
- "name": "parameters",
3154
- "optional": true
2822
+ "name": "event",
2823
+ "type": {
2824
+ "text": "Event"
2825
+ }
3155
2826
  }
3156
2827
  ]
3157
2828
  },
3158
2829
  {
3159
2830
  "kind": "method",
3160
- "name": "hasMultiValueCondition",
3161
- "static": true,
2831
+ "name": "onPatternInput",
3162
2832
  "return": {
3163
2833
  "type": {
3164
2834
  "text": "boolean"
@@ -3166,17 +2836,22 @@
3166
2836
  },
3167
2837
  "parameters": [
3168
2838
  {
3169
- "name": "conditions",
2839
+ "name": "index",
3170
2840
  "type": {
3171
- "text": "ConditionNode[]"
2841
+ "text": "number"
2842
+ }
2843
+ },
2844
+ {
2845
+ "name": "event",
2846
+ "type": {
2847
+ "text": "Event"
3172
2848
  }
3173
2849
  }
3174
2850
  ]
3175
2851
  },
3176
2852
  {
3177
2853
  "kind": "method",
3178
- "name": "hasOrJoin",
3179
- "static": true,
2854
+ "name": "onRuleChange",
3180
2855
  "return": {
3181
2856
  "type": {
3182
2857
  "text": "boolean"
@@ -3184,17 +2859,22 @@
3184
2859
  },
3185
2860
  "parameters": [
3186
2861
  {
3187
- "name": "conditions",
2862
+ "name": "index",
3188
2863
  "type": {
3189
- "text": "ConditionNode[]"
2864
+ "text": "number"
2865
+ }
2866
+ },
2867
+ {
2868
+ "name": "event",
2869
+ "type": {
2870
+ "text": "Event"
3190
2871
  }
3191
2872
  }
3192
2873
  ]
3193
2874
  },
3194
2875
  {
3195
2876
  "kind": "method",
3196
- "name": "hasGroup",
3197
- "static": true,
2877
+ "name": "openFilePicker",
3198
2878
  "return": {
3199
2879
  "type": {
3200
2880
  "text": "boolean"
@@ -3202,17 +2882,16 @@
3202
2882
  },
3203
2883
  "parameters": [
3204
2884
  {
3205
- "name": "conditions",
2885
+ "name": "index",
3206
2886
  "type": {
3207
- "text": "ConditionNode[]"
2887
+ "text": "number"
3208
2888
  }
3209
2889
  }
3210
2890
  ]
3211
2891
  },
3212
2892
  {
3213
2893
  "kind": "method",
3214
- "name": "hasUnsupportedOperator",
3215
- "static": true,
2894
+ "name": "onFileSelected",
3216
2895
  "return": {
3217
2896
  "type": {
3218
2897
  "text": "boolean"
@@ -3220,256 +2899,577 @@
3220
2899
  },
3221
2900
  "parameters": [
3222
2901
  {
3223
- "name": "conditions",
2902
+ "name": "event",
3224
2903
  "type": {
3225
- "text": "ConditionNode[]"
2904
+ "text": "Event"
3226
2905
  }
3227
2906
  }
3228
2907
  ]
3229
2908
  },
3230
2909
  {
3231
2910
  "kind": "method",
3232
- "name": "flattenConditions",
3233
- "static": true,
2911
+ "name": "clearSound",
3234
2912
  "return": {
3235
2913
  "type": {
3236
- "text": "ConditionBuilderEntity[]"
2914
+ "text": "boolean"
3237
2915
  }
3238
2916
  },
3239
2917
  "parameters": [
3240
2918
  {
3241
- "name": "conditions",
2919
+ "name": "index",
3242
2920
  "type": {
3243
- "text": "ConditionNode[]"
2921
+ "text": "number"
3244
2922
  }
3245
2923
  }
3246
2924
  ]
3247
2925
  },
3248
2926
  {
3249
2927
  "kind": "method",
3250
- "name": "resolveLeftValues",
3251
- "static": true,
2928
+ "name": "testSound",
3252
2929
  "return": {
3253
2930
  "type": {
3254
- "text": "ConditionNode[]"
2931
+ "text": "boolean"
3255
2932
  }
3256
2933
  },
3257
2934
  "parameters": [
3258
2935
  {
3259
- "name": "conditions",
2936
+ "name": "index",
3260
2937
  "type": {
3261
- "text": "ConditionNode[]"
2938
+ "text": "number"
3262
2939
  }
3263
- },
2940
+ }
2941
+ ]
2942
+ },
2943
+ {
2944
+ "kind": "method",
2945
+ "name": "toggleRuleMute",
2946
+ "return": {
2947
+ "type": {
2948
+ "text": "boolean"
2949
+ }
2950
+ },
2951
+ "parameters": [
3264
2952
  {
3265
- "name": "fields",
2953
+ "name": "index",
3266
2954
  "type": {
3267
- "text": "any[]"
2955
+ "text": "number"
2956
+ }
2957
+ }
2958
+ ]
2959
+ },
2960
+ {
2961
+ "kind": "method",
2962
+ "name": "onVolumeChange",
2963
+ "return": {
2964
+ "type": {
2965
+ "text": "boolean"
2966
+ }
2967
+ },
2968
+ "parameters": [
2969
+ {
2970
+ "name": "event",
2971
+ "type": {
2972
+ "text": "Event"
2973
+ }
2974
+ }
2975
+ ]
2976
+ },
2977
+ {
2978
+ "kind": "method",
2979
+ "name": "toggleMute",
2980
+ "return": {
2981
+ "type": {
2982
+ "text": "boolean"
2983
+ }
2984
+ }
2985
+ },
2986
+ {
2987
+ "kind": "method",
2988
+ "name": "addRule",
2989
+ "return": {
2990
+ "type": {
2991
+ "text": "boolean"
2992
+ }
2993
+ }
2994
+ },
2995
+ {
2996
+ "kind": "method",
2997
+ "name": "removeRule",
2998
+ "return": {
2999
+ "type": {
3000
+ "text": "boolean"
3001
+ }
3002
+ },
3003
+ "parameters": [
3004
+ {
3005
+ "name": "index",
3006
+ "type": {
3007
+ "text": "number"
3268
3008
  }
3269
3009
  }
3270
- ]
3010
+ ]
3011
+ },
3012
+ {
3013
+ "kind": "method",
3014
+ "name": "reloadRules",
3015
+ "return": {
3016
+ "type": {
3017
+ "text": "Promise<void>"
3018
+ }
3019
+ },
3020
+ "description": "Reloads the notification-rule picker (e.g. when the Sounds tab is opened)."
3021
+ },
3022
+ {
3023
+ "kind": "method",
3024
+ "name": "loadRules",
3025
+ "privacy": "private",
3026
+ "return": {
3027
+ "type": {
3028
+ "text": "Promise<void>"
3029
+ }
3030
+ }
3031
+ },
3032
+ {
3033
+ "kind": "method",
3034
+ "name": "settleRuleOptions",
3035
+ "privacy": "private",
3036
+ "return": {
3037
+ "type": {
3038
+ "text": "Promise<void>"
3039
+ }
3040
+ },
3041
+ "description": "Suppresses select `change` events only while options-datasource rebuilds\nthe DOM — not for the `getRules()` round trip itself, so a user picking a\nrule while a request is in flight isn't silently dropped."
3271
3042
  },
3272
3043
  {
3273
- "kind": "field",
3274
- "name": "createEmptyGroup",
3275
- "static": true
3044
+ "kind": "method",
3045
+ "name": "applyRuleSelectValues",
3046
+ "privacy": "private",
3047
+ "return": {
3048
+ "type": {
3049
+ "text": "void"
3050
+ }
3051
+ },
3052
+ "description": "Re-applies persisted template ids onto `.rule-select` hosts after\noptions-datasource has rebuilt its options. We deliberately do *not* bind\n`:initialSelectedValue` to templateId: that path compares the option label\nagainst Select.value (the option id), always mismatches, clearData()'s the\nselect, and leaves the next pick stuck on \"Select a rule...\"."
3276
3053
  },
3277
3054
  {
3278
3055
  "kind": "method",
3279
- "name": "buildRawExpression",
3280
- "static": true,
3056
+ "name": "mapRules",
3057
+ "privacy": "private",
3281
3058
  "return": {
3282
3059
  "type": {
3283
- "text": "string"
3060
+ "text": "AlertSoundSelectableRule[]"
3284
3061
  }
3285
3062
  },
3286
3063
  "parameters": [
3287
3064
  {
3288
- "name": "conditions",
3065
+ "name": "ruleList",
3289
3066
  "type": {
3290
- "text": "ConditionNode[]"
3067
+ "text": "NamedRuleRow[]"
3291
3068
  }
3292
3069
  }
3293
3070
  ]
3294
3071
  },
3295
3072
  {
3296
3073
  "kind": "method",
3297
- "name": "parseRawExpression",
3298
- "static": true,
3074
+ "name": "ruleMatchId",
3075
+ "privacy": "private",
3299
3076
  "return": {
3300
3077
  "type": {
3301
- "text": "ConditionNode[] | null"
3078
+ "text": "string"
3302
3079
  }
3303
3080
  },
3304
3081
  "parameters": [
3305
3082
  {
3306
- "name": "rawExpression",
3083
+ "name": "rule",
3307
3084
  "type": {
3308
- "text": "string"
3085
+ "text": "NamedRuleRow | undefined"
3309
3086
  }
3310
3087
  }
3311
3088
  ]
3089
+ },
3090
+ {
3091
+ "kind": "method",
3092
+ "name": "syncSoundState",
3093
+ "privacy": "private"
3312
3094
  }
3313
- ]
3095
+ ],
3096
+ "superclass": {
3097
+ "name": "GenesisElement",
3098
+ "package": "@genesislcap/web-core"
3099
+ },
3100
+ "tagName": "foundation-sounds-panel",
3101
+ "customElement": true
3102
+ }
3103
+ ],
3104
+ "exports": [
3105
+ {
3106
+ "kind": "js",
3107
+ "name": "FoundationSoundsPanel",
3108
+ "declaration": {
3109
+ "name": "FoundationSoundsPanel",
3110
+ "module": "src/components/foundation-sounds/foundation-sounds-panel.ts"
3111
+ }
3314
3112
  },
3113
+ {
3114
+ "kind": "custom-element-definition",
3115
+ "name": "foundation-sounds-panel",
3116
+ "declaration": {
3117
+ "name": "FoundationSoundsPanel",
3118
+ "module": "src/components/foundation-sounds/foundation-sounds-panel.ts"
3119
+ }
3120
+ }
3121
+ ]
3122
+ },
3123
+ {
3124
+ "kind": "javascript-module",
3125
+ "path": "src/components/foundation-sounds/foundation-sounds.styles.ts",
3126
+ "declarations": [
3127
+ {
3128
+ "kind": "variable",
3129
+ "name": "FoundationSoundsStyles",
3130
+ "default": "css`\n :host {\n display: none;\n }\n`",
3131
+ "description": "Headless layout listener — take no space in the layout chrome."
3132
+ }
3133
+ ],
3134
+ "exports": [
3135
+ {
3136
+ "kind": "js",
3137
+ "name": "FoundationSoundsStyles",
3138
+ "declaration": {
3139
+ "name": "FoundationSoundsStyles",
3140
+ "module": "src/components/foundation-sounds/foundation-sounds.styles.ts"
3141
+ }
3142
+ }
3143
+ ]
3144
+ },
3145
+ {
3146
+ "kind": "javascript-module",
3147
+ "path": "src/components/foundation-sounds/foundation-sounds.ts",
3148
+ "declarations": [
3315
3149
  {
3316
3150
  "kind": "class",
3317
- "description": "",
3318
- "name": "TemplateUtils",
3151
+ "description": "Headless listener for inbox alert inserts. Plays configured sounds via the\nshared AlertSoundPlayer. Mount once in the app layout.\n\nConfigure rules in the inbox Sounds tab with FoundationSoundsPanel.",
3152
+ "name": "FoundationSounds",
3319
3153
  "members": [
3320
3154
  {
3321
3155
  "kind": "field",
3322
- "name": "createEmptyParameter",
3323
- "static": true
3156
+ "name": "connect",
3157
+ "type": {
3158
+ "text": "Connect"
3159
+ }
3324
3160
  },
3325
3161
  {
3326
- "kind": "method",
3327
- "name": "getParameters",
3328
- "static": true,
3329
- "parameters": [
3330
- {
3331
- "name": "parameters"
3332
- }
3333
- ]
3162
+ "kind": "field",
3163
+ "name": "inboxService",
3164
+ "type": {
3165
+ "text": "FoundationInboxService"
3166
+ }
3334
3167
  },
3335
3168
  {
3336
- "kind": "method",
3337
- "name": "buildRightValue",
3169
+ "kind": "field",
3170
+ "name": "ruleService",
3171
+ "type": {
3172
+ "text": "RuleService"
3173
+ }
3174
+ },
3175
+ {
3176
+ "kind": "field",
3177
+ "name": "soundEnabled",
3178
+ "type": {
3179
+ "text": "boolean"
3180
+ },
3181
+ "default": "true",
3182
+ "description": "When false, new audible alerts are tracked but do not play."
3183
+ },
3184
+ {
3185
+ "kind": "field",
3186
+ "name": "connectionSub",
3187
+ "type": {
3188
+ "text": "Subscription | undefined"
3189
+ },
3190
+ "privacy": "private"
3191
+ },
3192
+ {
3193
+ "kind": "field",
3194
+ "name": "player",
3338
3195
  "privacy": "private",
3339
- "static": true,
3340
- "parameters": [
3341
- {
3342
- "name": "logicalOperator",
3343
- "type": {
3344
- "text": "LogicalOperator"
3345
- }
3346
- },
3347
- {
3348
- "name": "condition"
3349
- },
3350
- {
3351
- "name": "parameters",
3352
- "optional": true
3353
- }
3354
- ]
3196
+ "readonly": true
3197
+ },
3198
+ {
3199
+ "kind": "field",
3200
+ "name": "knownAlertIds",
3201
+ "privacy": "private",
3202
+ "default": "new Set<string>()"
3203
+ },
3204
+ {
3205
+ "kind": "field",
3206
+ "name": "serverSoundFetches",
3207
+ "privacy": "private",
3208
+ "readonly": true,
3209
+ "default": "new Map<string, Promise<boolean>>()",
3210
+ "description": "In-flight server sound fetches keyed by DYNAMIC_RULE_ID."
3355
3211
  },
3356
3212
  {
3357
3213
  "kind": "method",
3358
- "name": "getConditions",
3359
- "static": true,
3360
- "parameters": [
3361
- {
3362
- "name": "conditions"
3363
- },
3364
- {
3365
- "name": "parameters",
3366
- "optional": true
3214
+ "name": "subscribeToAlerts",
3215
+ "privacy": "private",
3216
+ "return": {
3217
+ "type": {
3218
+ "text": "void"
3367
3219
  }
3368
- ]
3220
+ }
3221
+ },
3222
+ {
3223
+ "kind": "field",
3224
+ "name": "subscriptionHandler",
3225
+ "privacy": "private"
3369
3226
  },
3370
3227
  {
3371
3228
  "kind": "method",
3372
- "name": "createParameterDetails",
3373
- "static": true,
3229
+ "name": "playForNewAlerts",
3230
+ "privacy": "private",
3231
+ "return": {
3232
+ "type": {
3233
+ "text": "Promise<void>"
3234
+ }
3235
+ },
3374
3236
  "parameters": [
3375
3237
  {
3376
- "name": "parameters"
3238
+ "name": "rows",
3239
+ "type": {
3240
+ "text": "Array<{\n id: string;\n message?: string;\n header?: string;\n dynamicRuleId?: string;\n }>"
3241
+ }
3377
3242
  }
3378
3243
  ]
3379
- }
3380
- ]
3381
- },
3382
- {
3383
- "kind": "class",
3384
- "description": "",
3385
- "name": "RuleUtils",
3386
- "members": [
3244
+ },
3387
3245
  {
3388
3246
  "kind": "method",
3389
- "name": "buildRightValue",
3247
+ "name": "tryPlayServerSound",
3390
3248
  "privacy": "private",
3391
- "static": true,
3249
+ "return": {
3250
+ "type": {
3251
+ "text": "Promise<boolean>"
3252
+ }
3253
+ },
3392
3254
  "parameters": [
3393
3255
  {
3394
- "name": "logicalOperator",
3256
+ "name": "dynamicRuleId",
3395
3257
  "type": {
3396
- "text": "LogicalOperator"
3258
+ "text": "string"
3397
3259
  }
3398
- },
3399
- {
3400
- "name": "condition"
3401
3260
  }
3402
3261
  ]
3403
3262
  },
3404
3263
  {
3405
3264
  "kind": "method",
3406
- "name": "getConditions",
3407
- "static": true,
3265
+ "name": "fetchAndCacheServerSound",
3266
+ "privacy": "private",
3267
+ "return": {
3268
+ "type": {
3269
+ "text": "Promise<boolean>"
3270
+ }
3271
+ },
3408
3272
  "parameters": [
3409
3273
  {
3410
- "name": "conditions"
3274
+ "name": "dynamicRuleId",
3275
+ "type": {
3276
+ "text": "string"
3277
+ }
3411
3278
  }
3412
3279
  ]
3413
- }
3414
- ]
3415
- },
3416
- {
3417
- "kind": "function",
3418
- "name": "showNotificationError",
3419
- "parameters": [
3280
+ }
3281
+ ],
3282
+ "attributes": [
3420
3283
  {
3421
- "name": "error"
3284
+ "name": "sound-enabled",
3285
+ "type": {
3286
+ "text": "boolean"
3287
+ },
3288
+ "default": "true",
3289
+ "description": "When false, new audible alerts are tracked but do not play.",
3290
+ "fieldName": "soundEnabled"
3422
3291
  }
3423
- ]
3292
+ ],
3293
+ "superclass": {
3294
+ "name": "GenesisElement",
3295
+ "package": "@genesislcap/web-core"
3296
+ },
3297
+ "tagName": "foundation-sounds",
3298
+ "customElement": true
3424
3299
  }
3425
3300
  ],
3426
3301
  "exports": [
3427
3302
  {
3428
3303
  "kind": "js",
3429
- "name": "UUIDGenerator",
3304
+ "name": "FoundationSounds",
3430
3305
  "declaration": {
3431
- "name": "UUIDGenerator",
3432
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3306
+ "name": "FoundationSounds",
3307
+ "module": "src/components/foundation-sounds/foundation-sounds.ts"
3433
3308
  }
3434
3309
  },
3310
+ {
3311
+ "kind": "custom-element-definition",
3312
+ "name": "foundation-sounds",
3313
+ "declaration": {
3314
+ "name": "FoundationSounds",
3315
+ "module": "src/components/foundation-sounds/foundation-sounds.ts"
3316
+ }
3317
+ }
3318
+ ]
3319
+ },
3320
+ {
3321
+ "kind": "javascript-module",
3322
+ "path": "src/services/alert.service.ts",
3323
+ "declarations": [
3324
+ {
3325
+ "kind": "variable",
3326
+ "name": "AlertService"
3327
+ }
3328
+ ],
3329
+ "exports": [
3435
3330
  {
3436
3331
  "kind": "js",
3437
- "name": "isEmpty",
3332
+ "name": "AlertService",
3438
3333
  "declaration": {
3439
- "name": "isEmpty",
3440
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3334
+ "name": "AlertService",
3335
+ "module": "src/services/alert.service.ts"
3441
3336
  }
3337
+ }
3338
+ ]
3339
+ },
3340
+ {
3341
+ "kind": "javascript-module",
3342
+ "path": "src/services/inbox.service.ts",
3343
+ "declarations": [
3344
+ {
3345
+ "kind": "variable",
3346
+ "name": "INBOX_PAGE_SIZE",
3347
+ "type": {
3348
+ "text": "number"
3349
+ },
3350
+ "default": "20",
3351
+ "description": "Number of alert rows fetched per data server batch. The first batch is loaded\non subscribe; subsequent batches are fetched via FoundationInboxService.getMoreRows."
3442
3352
  },
3353
+ {
3354
+ "kind": "variable",
3355
+ "name": "FoundationInboxService"
3356
+ }
3357
+ ],
3358
+ "exports": [
3443
3359
  {
3444
3360
  "kind": "js",
3445
- "name": "DynamicRuleUtils",
3361
+ "name": "INBOX_PAGE_SIZE",
3446
3362
  "declaration": {
3447
- "name": "DynamicRuleUtils",
3448
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3363
+ "name": "INBOX_PAGE_SIZE",
3364
+ "module": "src/services/inbox.service.ts"
3449
3365
  }
3450
3366
  },
3451
3367
  {
3452
3368
  "kind": "js",
3453
- "name": "TemplateUtils",
3369
+ "name": "FoundationInboxService",
3454
3370
  "declaration": {
3455
- "name": "TemplateUtils",
3456
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3371
+ "name": "FoundationInboxService",
3372
+ "module": "src/services/inbox.service.ts"
3457
3373
  }
3458
- },
3374
+ }
3375
+ ]
3376
+ },
3377
+ {
3378
+ "kind": "javascript-module",
3379
+ "path": "src/services/notify-route.service.ts",
3380
+ "declarations": [
3381
+ {
3382
+ "kind": "variable",
3383
+ "name": "NotifyRouteService"
3384
+ }
3385
+ ],
3386
+ "exports": [
3459
3387
  {
3460
3388
  "kind": "js",
3461
- "name": "RuleUtils",
3389
+ "name": "NotifyRouteService",
3462
3390
  "declaration": {
3463
- "name": "RuleUtils",
3464
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3391
+ "name": "NotifyRouteService",
3392
+ "module": "src/services/notify-route.service.ts"
3465
3393
  }
3466
- },
3394
+ }
3395
+ ]
3396
+ },
3397
+ {
3398
+ "kind": "javascript-module",
3399
+ "path": "src/services/notify.service.ts",
3400
+ "declarations": [
3401
+ {
3402
+ "kind": "variable",
3403
+ "name": "NotifyService"
3404
+ }
3405
+ ],
3406
+ "exports": [
3467
3407
  {
3468
3408
  "kind": "js",
3469
- "name": "showNotificationError",
3409
+ "name": "NotifyService",
3470
3410
  "declaration": {
3471
- "name": "showNotificationError",
3472
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3411
+ "name": "NotifyService",
3412
+ "module": "src/services/notify.service.ts"
3413
+ }
3414
+ }
3415
+ ]
3416
+ },
3417
+ {
3418
+ "kind": "javascript-module",
3419
+ "path": "src/services/rule.service.ts",
3420
+ "declarations": [
3421
+ {
3422
+ "kind": "variable",
3423
+ "name": "RuleService"
3424
+ }
3425
+ ],
3426
+ "exports": [
3427
+ {
3428
+ "kind": "js",
3429
+ "name": "RuleService",
3430
+ "declaration": {
3431
+ "name": "RuleService",
3432
+ "module": "src/services/rule.service.ts"
3433
+ }
3434
+ }
3435
+ ]
3436
+ },
3437
+ {
3438
+ "kind": "javascript-module",
3439
+ "path": "src/services/system.service.ts",
3440
+ "declarations": [
3441
+ {
3442
+ "kind": "variable",
3443
+ "name": "SystemService"
3444
+ }
3445
+ ],
3446
+ "exports": [
3447
+ {
3448
+ "kind": "js",
3449
+ "name": "SystemService",
3450
+ "declaration": {
3451
+ "name": "SystemService",
3452
+ "module": "src/services/system.service.ts"
3453
+ }
3454
+ }
3455
+ ]
3456
+ },
3457
+ {
3458
+ "kind": "javascript-module",
3459
+ "path": "src/services/template.service.ts",
3460
+ "declarations": [
3461
+ {
3462
+ "kind": "variable",
3463
+ "name": "TemplateService"
3464
+ }
3465
+ ],
3466
+ "exports": [
3467
+ {
3468
+ "kind": "js",
3469
+ "name": "TemplateService",
3470
+ "declaration": {
3471
+ "name": "TemplateService",
3472
+ "module": "src/services/template.service.ts"
3473
3473
  }
3474
3474
  }
3475
3475
  ]
@@ -4852,211 +4852,68 @@
4852
4852
  },
4853
4853
  {
4854
4854
  "kind": "variable",
4855
- "name": "SEVERITY_SERIOUS",
4856
- "type": {
4857
- "text": "string"
4858
- },
4859
- "default": "'SERIOUS'"
4860
- },
4861
- {
4862
- "kind": "variable",
4863
- "name": "SEVERITY_WARNING",
4864
- "type": {
4865
- "text": "string"
4866
- },
4867
- "default": "'WARNING'"
4868
- },
4869
- {
4870
- "kind": "variable",
4871
- "name": "ALL_SEVERITIES",
4872
- "type": {
4873
- "text": "[\n { type: SEVERITY_INFORMATION, text: 'Information' },\n { type: SEVERITY_WARNING, text: 'Warning' },\n { type: SEVERITY_SERIOUS, text: 'Serious' },\n { type: SEVERITY_CRITICAL, text: 'Critical' },\n]"
4874
- },
4875
- "default": "[\n { type: SEVERITY_INFORMATION, text: 'Information' },\n { type: SEVERITY_WARNING, text: 'Warning' },\n { type: SEVERITY_SERIOUS, text: 'Serious' },\n { type: SEVERITY_CRITICAL, text: 'Critical' },\n]"
4876
- }
4877
- ],
4878
- "exports": [
4879
- {
4880
- "kind": "js",
4881
- "name": "SEVERITY_INFORMATION",
4882
- "declaration": {
4883
- "name": "SEVERITY_INFORMATION",
4884
- "module": "src/components/foundation-notification-dashboard/types/severity.ts"
4885
- }
4886
- },
4887
- {
4888
- "kind": "js",
4889
- "name": "SEVERITY_CRITICAL",
4890
- "declaration": {
4891
- "name": "SEVERITY_CRITICAL",
4892
- "module": "src/components/foundation-notification-dashboard/types/severity.ts"
4893
- }
4894
- },
4895
- {
4896
- "kind": "js",
4897
- "name": "SEVERITY_SERIOUS",
4898
- "declaration": {
4899
- "name": "SEVERITY_SERIOUS",
4900
- "module": "src/components/foundation-notification-dashboard/types/severity.ts"
4901
- }
4902
- },
4903
- {
4904
- "kind": "js",
4905
- "name": "SEVERITY_WARNING",
4906
- "declaration": {
4907
- "name": "SEVERITY_WARNING",
4908
- "module": "src/components/foundation-notification-dashboard/types/severity.ts"
4909
- }
4910
- },
4911
- {
4912
- "kind": "js",
4913
- "name": "ALL_SEVERITIES",
4914
- "declaration": {
4915
- "name": "ALL_SEVERITIES",
4916
- "module": "src/components/foundation-notification-dashboard/types/severity.ts"
4917
- }
4918
- }
4919
- ]
4920
- },
4921
- {
4922
- "kind": "javascript-module",
4923
- "path": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.styles.ts",
4924
- "declarations": [
4925
- {
4926
- "kind": "variable",
4927
- "name": "noItemsClass",
4855
+ "name": "SEVERITY_SERIOUS",
4928
4856
  "type": {
4929
4857
  "text": "string"
4930
4858
  },
4931
- "default": "'no-items'",
4932
- "description": "Class to use when there are no items"
4859
+ "default": "'SERIOUS'"
4933
4860
  },
4934
4861
  {
4935
4862
  "kind": "variable",
4936
- "name": "FoundationInboxCounterStyles",
4937
- "default": "css`\n :host {\n display: inline-block;\n min-width: 16px;\n height: 16px;\n border-radius: 9px;\n text-align: center;\n color: #fff;\n line-height: 16px;\n font-size: 9px;\n font-weight: 700;\n background: ${BACKGROUND_COLOR};\n pointer-events: none;\n }\n\n .hidden {\n visibility: hidden;\n }\n\n :host(.${noItemsClass}) {\n display: none;\n }\n`"
4863
+ "name": "SEVERITY_WARNING",
4864
+ "type": {
4865
+ "text": "string"
4866
+ },
4867
+ "default": "'WARNING'"
4868
+ },
4869
+ {
4870
+ "kind": "variable",
4871
+ "name": "ALL_SEVERITIES",
4872
+ "type": {
4873
+ "text": "[\n { type: SEVERITY_INFORMATION, text: 'Information' },\n { type: SEVERITY_WARNING, text: 'Warning' },\n { type: SEVERITY_SERIOUS, text: 'Serious' },\n { type: SEVERITY_CRITICAL, text: 'Critical' },\n]"
4874
+ },
4875
+ "default": "[\n { type: SEVERITY_INFORMATION, text: 'Information' },\n { type: SEVERITY_WARNING, text: 'Warning' },\n { type: SEVERITY_SERIOUS, text: 'Serious' },\n { type: SEVERITY_CRITICAL, text: 'Critical' },\n]"
4938
4876
  }
4939
4877
  ],
4940
4878
  "exports": [
4941
4879
  {
4942
4880
  "kind": "js",
4943
- "name": "noItemsClass",
4881
+ "name": "SEVERITY_INFORMATION",
4944
4882
  "declaration": {
4945
- "name": "noItemsClass",
4946
- "module": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.styles.ts"
4883
+ "name": "SEVERITY_INFORMATION",
4884
+ "module": "src/components/foundation-notification-dashboard/types/severity.ts"
4947
4885
  }
4948
4886
  },
4949
4887
  {
4950
4888
  "kind": "js",
4951
- "name": "FoundationInboxCounterStyles",
4889
+ "name": "SEVERITY_CRITICAL",
4952
4890
  "declaration": {
4953
- "name": "FoundationInboxCounterStyles",
4954
- "module": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.styles.ts"
4891
+ "name": "SEVERITY_CRITICAL",
4892
+ "module": "src/components/foundation-notification-dashboard/types/severity.ts"
4955
4893
  }
4956
- }
4957
- ]
4958
- },
4959
- {
4960
- "kind": "javascript-module",
4961
- "path": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.template.ts",
4962
- "declarations": [
4963
- {
4964
- "kind": "variable",
4965
- "name": "FoundationInboxCounterTemplate",
4966
- "default": "html<FoundationInboxCounter>`\n <template class=\"${(x) => classNames([noItemsClass, x.value < 1])}\">\n ${when(\n (x) => x.value > 0,\n html`\n ${(x) => (x.value > MAX_NUMBER_TO_DISPLAY ? `${MAX_NUMBER_TO_DISPLAY}+` : x.value)}\n `,\n )}\n </template>\n`"
4967
- }
4968
- ],
4969
- "exports": [
4894
+ },
4970
4895
  {
4971
4896
  "kind": "js",
4972
- "name": "FoundationInboxCounterTemplate",
4897
+ "name": "SEVERITY_SERIOUS",
4973
4898
  "declaration": {
4974
- "name": "FoundationInboxCounterTemplate",
4975
- "module": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.template.ts"
4899
+ "name": "SEVERITY_SERIOUS",
4900
+ "module": "src/components/foundation-notification-dashboard/types/severity.ts"
4976
4901
  }
4977
- }
4978
- ]
4979
- },
4980
- {
4981
- "kind": "javascript-module",
4982
- "path": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.ts",
4983
- "declarations": [
4984
- {
4985
- "kind": "class",
4986
- "description": "",
4987
- "name": "FoundationInboxCounter",
4988
- "members": [
4989
- {
4990
- "kind": "field",
4991
- "name": "value",
4992
- "type": {
4993
- "text": "number"
4994
- },
4995
- "default": "0"
4996
- },
4997
- {
4998
- "kind": "field",
4999
- "name": "connect",
5000
- "type": {
5001
- "text": "Connect"
5002
- }
5003
- },
5004
- {
5005
- "kind": "field",
5006
- "name": "inboxService",
5007
- "type": {
5008
- "text": "FoundationInboxService"
5009
- }
5010
- },
5011
- {
5012
- "kind": "field",
5013
- "name": "connectionSub",
5014
- "type": {
5015
- "text": "Subscription"
5016
- },
5017
- "privacy": "private"
5018
- },
5019
- {
5020
- "kind": "method",
5021
- "name": "subscribeToAlerts",
5022
- "privacy": "private",
5023
- "return": {
5024
- "type": {
5025
- "text": "Promise<void>"
5026
- }
5027
- },
5028
- "description": "Subscribes to alerts from the inbox service"
5029
- },
5030
- {
5031
- "kind": "field",
5032
- "name": "subscriptionHandler",
5033
- "privacy": "private",
5034
- "description": "Handles subscription updates from the inbox service"
5035
- }
5036
- ],
5037
- "superclass": {
5038
- "name": "GenesisElement",
5039
- "package": "@genesislcap/web-core"
5040
- },
5041
- "tagName": "foundation-inbox-counter",
5042
- "customElement": true
5043
- }
5044
- ],
5045
- "exports": [
4902
+ },
5046
4903
  {
5047
4904
  "kind": "js",
5048
- "name": "FoundationInboxCounter",
4905
+ "name": "SEVERITY_WARNING",
5049
4906
  "declaration": {
5050
- "name": "FoundationInboxCounter",
5051
- "module": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.ts"
4907
+ "name": "SEVERITY_WARNING",
4908
+ "module": "src/components/foundation-notification-dashboard/types/severity.ts"
5052
4909
  }
5053
4910
  },
5054
4911
  {
5055
- "kind": "custom-element-definition",
5056
- "name": "foundation-inbox-counter",
4912
+ "kind": "js",
4913
+ "name": "ALL_SEVERITIES",
5057
4914
  "declaration": {
5058
- "name": "FoundationInboxCounter",
5059
- "module": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.ts"
4915
+ "name": "ALL_SEVERITIES",
4916
+ "module": "src/components/foundation-notification-dashboard/types/severity.ts"
5060
4917
  }
5061
4918
  }
5062
4919
  ]
@@ -6349,40 +6206,183 @@
6349
6206
  ],
6350
6207
  "attributes": [
6351
6208
  {
6352
- "name": "template",
6353
- "fieldName": "template"
6209
+ "name": "template",
6210
+ "fieldName": "template"
6211
+ },
6212
+ {
6213
+ "type": {
6214
+ "text": "boolean"
6215
+ },
6216
+ "default": "false",
6217
+ "fieldName": "inline"
6218
+ }
6219
+ ],
6220
+ "superclass": {
6221
+ "name": "GenesisElement",
6222
+ "package": "@genesislcap/web-core"
6223
+ },
6224
+ "tagName": "inbox-subscription",
6225
+ "customElement": true
6226
+ }
6227
+ ],
6228
+ "exports": [
6229
+ {
6230
+ "kind": "js",
6231
+ "name": "InboxSubscription",
6232
+ "declaration": {
6233
+ "name": "InboxSubscription",
6234
+ "module": "src/components/foundation-inbox/components/inbox-subscription/inbox-subscription.ts"
6235
+ }
6236
+ },
6237
+ {
6238
+ "kind": "custom-element-definition",
6239
+ "name": "inbox-subscription",
6240
+ "declaration": {
6241
+ "name": "InboxSubscription",
6242
+ "module": "src/components/foundation-inbox/components/inbox-subscription/inbox-subscription.ts"
6243
+ }
6244
+ }
6245
+ ]
6246
+ },
6247
+ {
6248
+ "kind": "javascript-module",
6249
+ "path": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.styles.ts",
6250
+ "declarations": [
6251
+ {
6252
+ "kind": "variable",
6253
+ "name": "noItemsClass",
6254
+ "type": {
6255
+ "text": "string"
6256
+ },
6257
+ "default": "'no-items'",
6258
+ "description": "Class to use when there are no items"
6259
+ },
6260
+ {
6261
+ "kind": "variable",
6262
+ "name": "FoundationInboxCounterStyles",
6263
+ "default": "css`\n :host {\n display: inline-block;\n min-width: 16px;\n height: 16px;\n border-radius: 9px;\n text-align: center;\n color: #fff;\n line-height: 16px;\n font-size: 9px;\n font-weight: 700;\n background: ${BACKGROUND_COLOR};\n pointer-events: none;\n }\n\n .hidden {\n visibility: hidden;\n }\n\n :host(.${noItemsClass}) {\n display: none;\n }\n`"
6264
+ }
6265
+ ],
6266
+ "exports": [
6267
+ {
6268
+ "kind": "js",
6269
+ "name": "noItemsClass",
6270
+ "declaration": {
6271
+ "name": "noItemsClass",
6272
+ "module": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.styles.ts"
6273
+ }
6274
+ },
6275
+ {
6276
+ "kind": "js",
6277
+ "name": "FoundationInboxCounterStyles",
6278
+ "declaration": {
6279
+ "name": "FoundationInboxCounterStyles",
6280
+ "module": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.styles.ts"
6281
+ }
6282
+ }
6283
+ ]
6284
+ },
6285
+ {
6286
+ "kind": "javascript-module",
6287
+ "path": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.template.ts",
6288
+ "declarations": [
6289
+ {
6290
+ "kind": "variable",
6291
+ "name": "FoundationInboxCounterTemplate",
6292
+ "default": "html<FoundationInboxCounter>`\n <template class=\"${(x) => classNames([noItemsClass, x.value < 1])}\">\n ${when(\n (x) => x.value > 0,\n html`\n ${(x) => (x.value > MAX_NUMBER_TO_DISPLAY ? `${MAX_NUMBER_TO_DISPLAY}+` : x.value)}\n `,\n )}\n </template>\n`"
6293
+ }
6294
+ ],
6295
+ "exports": [
6296
+ {
6297
+ "kind": "js",
6298
+ "name": "FoundationInboxCounterTemplate",
6299
+ "declaration": {
6300
+ "name": "FoundationInboxCounterTemplate",
6301
+ "module": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.template.ts"
6302
+ }
6303
+ }
6304
+ ]
6305
+ },
6306
+ {
6307
+ "kind": "javascript-module",
6308
+ "path": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.ts",
6309
+ "declarations": [
6310
+ {
6311
+ "kind": "class",
6312
+ "description": "",
6313
+ "name": "FoundationInboxCounter",
6314
+ "members": [
6315
+ {
6316
+ "kind": "field",
6317
+ "name": "value",
6318
+ "type": {
6319
+ "text": "number"
6320
+ },
6321
+ "default": "0"
6322
+ },
6323
+ {
6324
+ "kind": "field",
6325
+ "name": "connect",
6326
+ "type": {
6327
+ "text": "Connect"
6328
+ }
6329
+ },
6330
+ {
6331
+ "kind": "field",
6332
+ "name": "inboxService",
6333
+ "type": {
6334
+ "text": "FoundationInboxService"
6335
+ }
6354
6336
  },
6355
6337
  {
6338
+ "kind": "field",
6339
+ "name": "connectionSub",
6356
6340
  "type": {
6357
- "text": "boolean"
6341
+ "text": "Subscription"
6358
6342
  },
6359
- "default": "false",
6360
- "fieldName": "inline"
6343
+ "privacy": "private"
6344
+ },
6345
+ {
6346
+ "kind": "method",
6347
+ "name": "subscribeToAlerts",
6348
+ "privacy": "private",
6349
+ "return": {
6350
+ "type": {
6351
+ "text": "Promise<void>"
6352
+ }
6353
+ },
6354
+ "description": "Subscribes to alerts from the inbox service"
6355
+ },
6356
+ {
6357
+ "kind": "field",
6358
+ "name": "subscriptionHandler",
6359
+ "privacy": "private",
6360
+ "description": "Handles subscription updates from the inbox service"
6361
6361
  }
6362
6362
  ],
6363
6363
  "superclass": {
6364
6364
  "name": "GenesisElement",
6365
6365
  "package": "@genesislcap/web-core"
6366
6366
  },
6367
- "tagName": "inbox-subscription",
6367
+ "tagName": "foundation-inbox-counter",
6368
6368
  "customElement": true
6369
6369
  }
6370
6370
  ],
6371
6371
  "exports": [
6372
6372
  {
6373
6373
  "kind": "js",
6374
- "name": "InboxSubscription",
6374
+ "name": "FoundationInboxCounter",
6375
6375
  "declaration": {
6376
- "name": "InboxSubscription",
6377
- "module": "src/components/foundation-inbox/components/inbox-subscription/inbox-subscription.ts"
6376
+ "name": "FoundationInboxCounter",
6377
+ "module": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.ts"
6378
6378
  }
6379
6379
  },
6380
6380
  {
6381
6381
  "kind": "custom-element-definition",
6382
- "name": "inbox-subscription",
6382
+ "name": "foundation-inbox-counter",
6383
6383
  "declaration": {
6384
- "name": "InboxSubscription",
6385
- "module": "src/components/foundation-inbox/components/inbox-subscription/inbox-subscription.ts"
6384
+ "name": "FoundationInboxCounter",
6385
+ "module": "src/components/foundation-inbox/components/foundation-inbox-counter/foundation-inbox-counter.ts"
6386
6386
  }
6387
6387
  }
6388
6388
  ]
@@ -8727,54 +8727,268 @@
8727
8727
  },
8728
8728
  {
8729
8729
  "kind": "method",
8730
- "name": "deleteChild",
8730
+ "name": "deleteChild",
8731
+ "parameters": [
8732
+ {
8733
+ "name": "deletedChild",
8734
+ "type": {
8735
+ "text": "ConditionNode"
8736
+ }
8737
+ }
8738
+ ]
8739
+ },
8740
+ {
8741
+ "kind": "method",
8742
+ "name": "deleteSelf"
8743
+ }
8744
+ ],
8745
+ "events": [
8746
+ {
8747
+ "description": "Fired when this whole group should be removed",
8748
+ "name": "delete"
8749
+ },
8750
+ {
8751
+ "description": "Fired when anything inside this group changes",
8752
+ "name": "edit"
8753
+ }
8754
+ ],
8755
+ "superclass": {
8756
+ "name": "GenesisElement",
8757
+ "package": "@genesislcap/web-core"
8758
+ },
8759
+ "tagName": "rule-condition-group",
8760
+ "customElement": true
8761
+ }
8762
+ ],
8763
+ "exports": [
8764
+ {
8765
+ "kind": "js",
8766
+ "name": "RuleConditionGroup",
8767
+ "declaration": {
8768
+ "name": "RuleConditionGroup",
8769
+ "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts"
8770
+ }
8771
+ },
8772
+ {
8773
+ "kind": "custom-element-definition",
8774
+ "name": "rule-condition-group",
8775
+ "declaration": {
8776
+ "name": "RuleConditionGroup",
8777
+ "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts"
8778
+ }
8779
+ }
8780
+ ]
8781
+ },
8782
+ {
8783
+ "kind": "javascript-module",
8784
+ "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.styles.ts",
8785
+ "declarations": [
8786
+ {
8787
+ "kind": "variable",
8788
+ "name": "ParameterBuilderStyles",
8789
+ "default": "css`\n .parameter-builder {\n display: flex;\n gap: calc(var(--design-unit) * 2px);\n margin-bottom: calc(var(--design-unit) * 2px);\n }\n\n rapid-button {\n margin: 0;\n }\n\n .delete {\n margin: 0;\n display: flex;\n justify-content: center;\n height: calc(var(--design-unit) * 9px);\n }\n\n .delete:hover {\n background-color: color-mix(in srgb, var(--neutral-foreground-rest), transparent 89%);\n }\n\n rapid-text-field {\n width: 100%;\n margin-bottom: 0;\n }\n\n rapid-text-field::part(root) {\n height: calc(var(--design-unit) * 9px);\n }\n\n rapid-select {\n min-width: auto;\n }\n\n rapid-select.param-type::part(control) {\n width: 115px;\n }\n\n rapid-select.param-source-type::part(control) {\n width: 160px;\n }\n\n rapid-select.param-source::part(control) {\n width: ${PARAM_SOURCE_WIDTH}px;\n }\n\n rapid-text-field.param-source::part(root) {\n width: calc(${PARAM_SOURCE_WIDTH}px + 2px);\n }\n\n rapid-select::part(listbox) {\n max-height: 160px;\n }\n`"
8790
+ }
8791
+ ],
8792
+ "exports": [
8793
+ {
8794
+ "kind": "js",
8795
+ "name": "ParameterBuilderStyles",
8796
+ "declaration": {
8797
+ "name": "ParameterBuilderStyles",
8798
+ "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.styles.ts"
8799
+ }
8800
+ }
8801
+ ]
8802
+ },
8803
+ {
8804
+ "kind": "javascript-module",
8805
+ "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.template.ts",
8806
+ "declarations": [
8807
+ {
8808
+ "kind": "variable",
8809
+ "name": "ParameterBuilderTemplate",
8810
+ "default": "html<ParameterBuilder>`\n <div class=\"parameter-builder\">\n <rapid-text-field\n id=\"param-name\"\n placeholder=\"Name\"\n :value=${sync((x) => x.name)}\n ></rapid-text-field>\n\n <rapid-text-field\n id=\"param-label\"\n placeholder=\"Label\"\n :value=${sync((x) => x.label)}\n ></rapid-text-field>\n\n <rapid-select\n id=\"param-source-type\"\n :value=${sync((x) => x.sourceType)}\n class=\"param-source-type\"\n >\n ${repeat(\n (x) => ALL_PARAM_SOURCE_TYPES,\n html`\n <rapid-option value=${(x) => x}>${(x) => x}</rapid-option>\n `,\n )}\n </rapid-select>\n\n ${when(\n (x) => x.sourceType === PARAM_SOURCE_TYPE_USER_TEXT,\n html<ParameterBuilder>`\n <rapid-text-field class=\"param-source\" disabled></rapid-text-field>\n `,\n )}\n ${when(\n (x) => x.sourceType === PARAM_SOURCE_TYPE_REQ_REP,\n html<ParameterBuilder>`\n <rapid-select\n ${ref('sourceSelect')}\n id=\"param-source\"\n :value=${sync((x) => x.sourceSelected)}\n class=\"param-source\"\n ?disabled=${(x) => x.sourceType !== PARAM_SOURCE_TYPE_REQ_REP}\n >\n ${repeat(\n (x) => x.reqRepItems,\n html`\n <rapid-option value=${(x) => x}>${(x) => x}</rapid-option>\n `,\n )}\n </rapid-select>\n `,\n )}\n ${when(\n (x) => x.sourceType === PARAM_SOURCE_TYPE_DEFINED_GROUP,\n html<ParameterBuilder>`\n <rapid-text-field\n ${ref('sourceTextField')}\n class=\"param-source\"\n placeholder=\"item1,item2,item3\"\n :value=${sync((x) => x.sourceTyped)}\n ></rapid-text-field>\n `,\n )}\n\n <rapid-select id=\"param-type\" :value=${sync((x) => x.type)} class=\"param-type\">\n ${repeat(\n (x) => ALL_PARAM_TYPES,\n html`\n <rapid-option value=${(x) => x}>${(x) => x}</rapid-option>\n `,\n )}\n </rapid-select>\n\n <rapid-button appearance=\"icon\" class=\"delete\" @click=${(x) => x.deleteParameter()}>\n <rapid-icon\n style=\"opacity: 0.5\"\n variant=\"regular\"\n name=\"trash-alt\"\n size=\"lg\"\n part=\"icon\"\n ></rapid-icon>\n </rapid-button>\n </div>\n`"
8811
+ }
8812
+ ],
8813
+ "exports": [
8814
+ {
8815
+ "kind": "js",
8816
+ "name": "ParameterBuilderTemplate",
8817
+ "declaration": {
8818
+ "name": "ParameterBuilderTemplate",
8819
+ "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.template.ts"
8820
+ }
8821
+ }
8822
+ ]
8823
+ },
8824
+ {
8825
+ "kind": "javascript-module",
8826
+ "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts",
8827
+ "declarations": [
8828
+ {
8829
+ "kind": "class",
8830
+ "description": "Parameter builder for notification templates.",
8831
+ "name": "ParameterBuilder",
8832
+ "members": [
8833
+ {
8834
+ "kind": "field",
8835
+ "name": "parameter",
8836
+ "type": {
8837
+ "text": "ParameterBuilderEntity"
8838
+ }
8839
+ },
8840
+ {
8841
+ "kind": "field",
8842
+ "name": "name",
8843
+ "type": {
8844
+ "text": "string"
8845
+ }
8846
+ },
8847
+ {
8848
+ "kind": "field",
8849
+ "name": "label",
8850
+ "type": {
8851
+ "text": "string"
8852
+ }
8853
+ },
8854
+ {
8855
+ "kind": "field",
8856
+ "name": "type",
8857
+ "type": {
8858
+ "text": "string"
8859
+ }
8860
+ },
8861
+ {
8862
+ "kind": "field",
8863
+ "name": "sourceType",
8864
+ "type": {
8865
+ "text": "string"
8866
+ }
8867
+ },
8868
+ {
8869
+ "kind": "field",
8870
+ "name": "sourceSelected",
8871
+ "type": {
8872
+ "text": "string"
8873
+ }
8874
+ },
8875
+ {
8876
+ "kind": "field",
8877
+ "name": "sourceTyped",
8878
+ "type": {
8879
+ "text": "string"
8880
+ }
8881
+ },
8882
+ {
8883
+ "kind": "field",
8884
+ "name": "sourceTextField",
8885
+ "type": {
8886
+ "text": "TextField"
8887
+ }
8888
+ },
8889
+ {
8890
+ "kind": "field",
8891
+ "name": "sourceSelect",
8892
+ "type": {
8893
+ "text": "Select"
8894
+ }
8895
+ },
8896
+ {
8897
+ "kind": "field",
8898
+ "name": "reqRepItems",
8899
+ "type": {
8900
+ "text": "array"
8901
+ },
8902
+ "default": "['REQUEST_1', 'REQUEST_2', 'REQUEST_3']"
8903
+ },
8904
+ {
8905
+ "kind": "method",
8906
+ "name": "deleteParameter"
8907
+ },
8908
+ {
8909
+ "kind": "method",
8910
+ "name": "parameterChanged"
8911
+ },
8912
+ {
8913
+ "kind": "method",
8914
+ "name": "nameChanged"
8915
+ },
8916
+ {
8917
+ "kind": "method",
8918
+ "name": "labelChanged"
8919
+ },
8920
+ {
8921
+ "kind": "method",
8922
+ "name": "typeChanged"
8923
+ },
8924
+ {
8925
+ "kind": "method",
8926
+ "name": "sourceTypeChanged"
8927
+ },
8928
+ {
8929
+ "kind": "method",
8930
+ "name": "sourceSelectedChanged"
8931
+ },
8932
+ {
8933
+ "kind": "method",
8934
+ "name": "sourceTypedChanged"
8935
+ },
8936
+ {
8937
+ "kind": "method",
8938
+ "name": "genericChanged",
8939
+ "privacy": "private",
8731
8940
  "parameters": [
8732
8941
  {
8733
- "name": "deletedChild",
8734
- "type": {
8735
- "text": "ConditionNode"
8736
- }
8942
+ "name": "parameterAttribute"
8943
+ },
8944
+ {
8945
+ "name": "value"
8737
8946
  }
8738
8947
  ]
8739
- },
8740
- {
8741
- "kind": "method",
8742
- "name": "deleteSelf"
8743
8948
  }
8744
8949
  ],
8745
8950
  "events": [
8746
8951
  {
8747
- "description": "Fired when this whole group should be removed",
8952
+ "description": "Fired when a parameter is deleted. detail: `ParameterBuilderEntity`",
8748
8953
  "name": "delete"
8749
8954
  },
8750
8955
  {
8751
- "description": "Fired when anything inside this group changes",
8956
+ "description": "Fired when a parameter is edited. detail: `ParameterBuilderEntity`",
8752
8957
  "name": "edit"
8753
8958
  }
8754
8959
  ],
8960
+ "attributes": [
8961
+ {
8962
+ "name": "parameter",
8963
+ "type": {
8964
+ "text": "ParameterBuilderEntity"
8965
+ },
8966
+ "fieldName": "parameter"
8967
+ }
8968
+ ],
8755
8969
  "superclass": {
8756
8970
  "name": "GenesisElement",
8757
8971
  "package": "@genesislcap/web-core"
8758
8972
  },
8759
- "tagName": "rule-condition-group",
8973
+ "tagName": "parameter-builder",
8760
8974
  "customElement": true
8761
8975
  }
8762
8976
  ],
8763
8977
  "exports": [
8764
8978
  {
8765
8979
  "kind": "js",
8766
- "name": "RuleConditionGroup",
8980
+ "name": "ParameterBuilder",
8767
8981
  "declaration": {
8768
- "name": "RuleConditionGroup",
8769
- "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts"
8982
+ "name": "ParameterBuilder",
8983
+ "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts"
8770
8984
  }
8771
8985
  },
8772
8986
  {
8773
8987
  "kind": "custom-element-definition",
8774
- "name": "rule-condition-group",
8988
+ "name": "parameter-builder",
8775
8989
  "declaration": {
8776
- "name": "RuleConditionGroup",
8777
- "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts"
8990
+ "name": "ParameterBuilder",
8991
+ "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts"
8778
8992
  }
8779
8993
  }
8780
8994
  ]
@@ -9046,220 +9260,6 @@
9046
9260
  }
9047
9261
  ]
9048
9262
  },
9049
- {
9050
- "kind": "javascript-module",
9051
- "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.styles.ts",
9052
- "declarations": [
9053
- {
9054
- "kind": "variable",
9055
- "name": "ParameterBuilderStyles",
9056
- "default": "css`\n .parameter-builder {\n display: flex;\n gap: calc(var(--design-unit) * 2px);\n margin-bottom: calc(var(--design-unit) * 2px);\n }\n\n rapid-button {\n margin: 0;\n }\n\n .delete {\n margin: 0;\n display: flex;\n justify-content: center;\n height: calc(var(--design-unit) * 9px);\n }\n\n .delete:hover {\n background-color: color-mix(in srgb, var(--neutral-foreground-rest), transparent 89%);\n }\n\n rapid-text-field {\n width: 100%;\n margin-bottom: 0;\n }\n\n rapid-text-field::part(root) {\n height: calc(var(--design-unit) * 9px);\n }\n\n rapid-select {\n min-width: auto;\n }\n\n rapid-select.param-type::part(control) {\n width: 115px;\n }\n\n rapid-select.param-source-type::part(control) {\n width: 160px;\n }\n\n rapid-select.param-source::part(control) {\n width: ${PARAM_SOURCE_WIDTH}px;\n }\n\n rapid-text-field.param-source::part(root) {\n width: calc(${PARAM_SOURCE_WIDTH}px + 2px);\n }\n\n rapid-select::part(listbox) {\n max-height: 160px;\n }\n`"
9057
- }
9058
- ],
9059
- "exports": [
9060
- {
9061
- "kind": "js",
9062
- "name": "ParameterBuilderStyles",
9063
- "declaration": {
9064
- "name": "ParameterBuilderStyles",
9065
- "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.styles.ts"
9066
- }
9067
- }
9068
- ]
9069
- },
9070
- {
9071
- "kind": "javascript-module",
9072
- "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.template.ts",
9073
- "declarations": [
9074
- {
9075
- "kind": "variable",
9076
- "name": "ParameterBuilderTemplate",
9077
- "default": "html<ParameterBuilder>`\n <div class=\"parameter-builder\">\n <rapid-text-field\n id=\"param-name\"\n placeholder=\"Name\"\n :value=${sync((x) => x.name)}\n ></rapid-text-field>\n\n <rapid-text-field\n id=\"param-label\"\n placeholder=\"Label\"\n :value=${sync((x) => x.label)}\n ></rapid-text-field>\n\n <rapid-select\n id=\"param-source-type\"\n :value=${sync((x) => x.sourceType)}\n class=\"param-source-type\"\n >\n ${repeat(\n (x) => ALL_PARAM_SOURCE_TYPES,\n html`\n <rapid-option value=${(x) => x}>${(x) => x}</rapid-option>\n `,\n )}\n </rapid-select>\n\n ${when(\n (x) => x.sourceType === PARAM_SOURCE_TYPE_USER_TEXT,\n html<ParameterBuilder>`\n <rapid-text-field class=\"param-source\" disabled></rapid-text-field>\n `,\n )}\n ${when(\n (x) => x.sourceType === PARAM_SOURCE_TYPE_REQ_REP,\n html<ParameterBuilder>`\n <rapid-select\n ${ref('sourceSelect')}\n id=\"param-source\"\n :value=${sync((x) => x.sourceSelected)}\n class=\"param-source\"\n ?disabled=${(x) => x.sourceType !== PARAM_SOURCE_TYPE_REQ_REP}\n >\n ${repeat(\n (x) => x.reqRepItems,\n html`\n <rapid-option value=${(x) => x}>${(x) => x}</rapid-option>\n `,\n )}\n </rapid-select>\n `,\n )}\n ${when(\n (x) => x.sourceType === PARAM_SOURCE_TYPE_DEFINED_GROUP,\n html<ParameterBuilder>`\n <rapid-text-field\n ${ref('sourceTextField')}\n class=\"param-source\"\n placeholder=\"item1,item2,item3\"\n :value=${sync((x) => x.sourceTyped)}\n ></rapid-text-field>\n `,\n )}\n\n <rapid-select id=\"param-type\" :value=${sync((x) => x.type)} class=\"param-type\">\n ${repeat(\n (x) => ALL_PARAM_TYPES,\n html`\n <rapid-option value=${(x) => x}>${(x) => x}</rapid-option>\n `,\n )}\n </rapid-select>\n\n <rapid-button appearance=\"icon\" class=\"delete\" @click=${(x) => x.deleteParameter()}>\n <rapid-icon\n style=\"opacity: 0.5\"\n variant=\"regular\"\n name=\"trash-alt\"\n size=\"lg\"\n part=\"icon\"\n ></rapid-icon>\n </rapid-button>\n </div>\n`"
9078
- }
9079
- ],
9080
- "exports": [
9081
- {
9082
- "kind": "js",
9083
- "name": "ParameterBuilderTemplate",
9084
- "declaration": {
9085
- "name": "ParameterBuilderTemplate",
9086
- "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.template.ts"
9087
- }
9088
- }
9089
- ]
9090
- },
9091
- {
9092
- "kind": "javascript-module",
9093
- "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts",
9094
- "declarations": [
9095
- {
9096
- "kind": "class",
9097
- "description": "Parameter builder for notification templates.",
9098
- "name": "ParameterBuilder",
9099
- "members": [
9100
- {
9101
- "kind": "field",
9102
- "name": "parameter",
9103
- "type": {
9104
- "text": "ParameterBuilderEntity"
9105
- }
9106
- },
9107
- {
9108
- "kind": "field",
9109
- "name": "name",
9110
- "type": {
9111
- "text": "string"
9112
- }
9113
- },
9114
- {
9115
- "kind": "field",
9116
- "name": "label",
9117
- "type": {
9118
- "text": "string"
9119
- }
9120
- },
9121
- {
9122
- "kind": "field",
9123
- "name": "type",
9124
- "type": {
9125
- "text": "string"
9126
- }
9127
- },
9128
- {
9129
- "kind": "field",
9130
- "name": "sourceType",
9131
- "type": {
9132
- "text": "string"
9133
- }
9134
- },
9135
- {
9136
- "kind": "field",
9137
- "name": "sourceSelected",
9138
- "type": {
9139
- "text": "string"
9140
- }
9141
- },
9142
- {
9143
- "kind": "field",
9144
- "name": "sourceTyped",
9145
- "type": {
9146
- "text": "string"
9147
- }
9148
- },
9149
- {
9150
- "kind": "field",
9151
- "name": "sourceTextField",
9152
- "type": {
9153
- "text": "TextField"
9154
- }
9155
- },
9156
- {
9157
- "kind": "field",
9158
- "name": "sourceSelect",
9159
- "type": {
9160
- "text": "Select"
9161
- }
9162
- },
9163
- {
9164
- "kind": "field",
9165
- "name": "reqRepItems",
9166
- "type": {
9167
- "text": "array"
9168
- },
9169
- "default": "['REQUEST_1', 'REQUEST_2', 'REQUEST_3']"
9170
- },
9171
- {
9172
- "kind": "method",
9173
- "name": "deleteParameter"
9174
- },
9175
- {
9176
- "kind": "method",
9177
- "name": "parameterChanged"
9178
- },
9179
- {
9180
- "kind": "method",
9181
- "name": "nameChanged"
9182
- },
9183
- {
9184
- "kind": "method",
9185
- "name": "labelChanged"
9186
- },
9187
- {
9188
- "kind": "method",
9189
- "name": "typeChanged"
9190
- },
9191
- {
9192
- "kind": "method",
9193
- "name": "sourceTypeChanged"
9194
- },
9195
- {
9196
- "kind": "method",
9197
- "name": "sourceSelectedChanged"
9198
- },
9199
- {
9200
- "kind": "method",
9201
- "name": "sourceTypedChanged"
9202
- },
9203
- {
9204
- "kind": "method",
9205
- "name": "genericChanged",
9206
- "privacy": "private",
9207
- "parameters": [
9208
- {
9209
- "name": "parameterAttribute"
9210
- },
9211
- {
9212
- "name": "value"
9213
- }
9214
- ]
9215
- }
9216
- ],
9217
- "events": [
9218
- {
9219
- "description": "Fired when a parameter is deleted. detail: `ParameterBuilderEntity`",
9220
- "name": "delete"
9221
- },
9222
- {
9223
- "description": "Fired when a parameter is edited. detail: `ParameterBuilderEntity`",
9224
- "name": "edit"
9225
- }
9226
- ],
9227
- "attributes": [
9228
- {
9229
- "name": "parameter",
9230
- "type": {
9231
- "text": "ParameterBuilderEntity"
9232
- },
9233
- "fieldName": "parameter"
9234
- }
9235
- ],
9236
- "superclass": {
9237
- "name": "GenesisElement",
9238
- "package": "@genesislcap/web-core"
9239
- },
9240
- "tagName": "parameter-builder",
9241
- "customElement": true
9242
- }
9243
- ],
9244
- "exports": [
9245
- {
9246
- "kind": "js",
9247
- "name": "ParameterBuilder",
9248
- "declaration": {
9249
- "name": "ParameterBuilder",
9250
- "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts"
9251
- }
9252
- },
9253
- {
9254
- "kind": "custom-element-definition",
9255
- "name": "parameter-builder",
9256
- "declaration": {
9257
- "name": "ParameterBuilder",
9258
- "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts"
9259
- }
9260
- }
9261
- ]
9262
- },
9263
9263
  {
9264
9264
  "kind": "javascript-module",
9265
9265
  "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-group/template-condition-group.template.ts",