@genesislcap/pbc-notify-ui 15.14.0 → 15.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (16) hide show
  1. package/dist/custom-elements.json +1332 -1348
  2. package/dist/dts/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-builder/template-condition-builder.d.ts +2 -1
  3. package/dist/dts/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-builder/template-condition-builder.d.ts.map +1 -1
  4. package/dist/dts/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.d.ts +1 -0
  5. package/dist/dts/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.d.ts.map +1 -1
  6. package/dist/dts/react.d.ts +28 -28
  7. package/dist/dts/services/system.service.d.ts.map +1 -1
  8. package/dist/esm/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-builder/template-condition-builder.js +4 -4
  9. package/dist/esm/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.js +27 -13
  10. package/dist/esm/services/system.service.js +37 -12
  11. package/dist/react.cjs +30 -30
  12. package/dist/react.mjs +27 -27
  13. package/package.json +23 -23
  14. package/src/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-builder/template-condition-builder.ts +5 -4
  15. package/src/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.ts +27 -14
  16. package/src/services/system.service.ts +39 -12
@@ -2041,54 +2041,19 @@
2041
2041
  },
2042
2042
  {
2043
2043
  "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",
2044
+ "path": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts",
2066
2045
  "declarations": [
2067
2046
  {
2068
2047
  "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": [
2048
+ "name": "alertSoundAttachmentTemplate",
2049
+ "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`",
2050
+ "description": "Shared Attach/Replace/Test/Clear UI for rule and template dialogs.",
2051
+ "privacy": "public"
2052
+ },
2088
2053
  {
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",
2054
+ "kind": "mixin",
2055
+ "description": "Mixin: pick / test / clear / load server sound + apply fields to submit payload.\n\nSubclasses must provide ruleService, isAlertSoundEditMode,\nalertSoundEntityId, and alertSoundCacheSyncMode.",
2056
+ "name": "AlertSoundAttachmentMixin",
2092
2057
  "members": [
2093
2058
  {
2094
2059
  "kind": "field",
@@ -2099,21 +2064,56 @@
2099
2064
  },
2100
2065
  {
2101
2066
  "kind": "field",
2102
- "name": "volumePercent",
2067
+ "name": "isAlertSoundEditMode",
2103
2068
  "type": {
2104
- "text": "number"
2069
+ "text": "boolean"
2105
2070
  },
2106
- "default": "100",
2107
- "description": "Global playback volume 0–100. @internal"
2071
+ "description": "True when editing an existing entity (clear should set CLEAR_ALERT_SOUND).",
2072
+ "readonly": true
2108
2073
  },
2109
2074
  {
2110
2075
  "kind": "field",
2111
- "name": "selectableRules",
2076
+ "name": "alertSoundEntityId",
2112
2077
  "type": {
2113
- "text": "AlertSoundSelectableRule[]"
2078
+ "text": "string | null"
2114
2079
  },
2115
- "default": "[]",
2116
- "description": "Notification rules from REQ_NOTIFICATION_RULE. @internal"
2080
+ "description": "DYNAMIC_RULE_ID of the entity being edited (null on create).\nUsed when alertSoundCacheSyncMode is `'entity'`.",
2081
+ "readonly": true
2082
+ },
2083
+ {
2084
+ "kind": "field",
2085
+ "name": "alertSoundCacheSyncMode",
2086
+ "type": {
2087
+ "text": "'entity' | 'all'"
2088
+ },
2089
+ "description": "`'entity'` — update/clear cache for alertSoundEntityId (rules).\n`'all'` — drop every cached server sound (templates; instance ids unknown).",
2090
+ "readonly": true
2091
+ },
2092
+ {
2093
+ "kind": "field",
2094
+ "name": "alertSoundFileName",
2095
+ "type": {
2096
+ "text": "string"
2097
+ },
2098
+ "default": "''",
2099
+ "description": "Display name of the attached / pending alert sound file."
2100
+ },
2101
+ {
2102
+ "kind": "field",
2103
+ "name": "alertSoundMimeType",
2104
+ "type": {
2105
+ "text": "string"
2106
+ },
2107
+ "default": "''"
2108
+ },
2109
+ {
2110
+ "kind": "field",
2111
+ "name": "hasAlertSound",
2112
+ "type": {
2113
+ "text": "boolean"
2114
+ },
2115
+ "default": "false",
2116
+ "description": "True when edit loaded an existing server sound (or user attached one)."
2117
2117
  },
2118
2118
  {
2119
2119
  "kind": "field",
@@ -2124,98 +2124,58 @@
2124
2124
  },
2125
2125
  {
2126
2126
  "kind": "field",
2127
- "name": "pendingRuleIndex",
2127
+ "name": "pendingAlertSoundData",
2128
2128
  "type": {
2129
- "text": "number | null"
2129
+ "text": "string | null"
2130
2130
  },
2131
- "privacy": "private",
2132
2131
  "default": "null"
2133
2132
  },
2134
2133
  {
2135
2134
  "kind": "field",
2136
- "name": "player",
2137
- "privacy": "private",
2138
- "readonly": true
2135
+ "name": "alertSoundDirty",
2136
+ "type": {
2137
+ "text": "boolean"
2138
+ },
2139
+ "default": "false",
2140
+ "description": "True when the user picked a new file this session (needs upload)."
2139
2141
  },
2140
2142
  {
2141
2143
  "kind": "field",
2142
- "name": "unsubscribePlayer",
2144
+ "name": "clearAlertSound",
2143
2145
  "type": {
2144
- "text": "(() => void) | undefined"
2146
+ "text": "boolean"
2145
2147
  },
2146
- "privacy": "private"
2148
+ "default": "false"
2147
2149
  },
2148
2150
  {
2149
2151
  "kind": "field",
2150
- "name": "ignoreSelectChanges",
2152
+ "name": "testAudio",
2151
2153
  "type": {
2152
- "text": "boolean"
2154
+ "text": "HTMLAudioElement | null"
2153
2155
  },
2154
- "privacy": "private",
2155
- "default": "false",
2156
- "description": "Suppresses select change events while options are rebuilt."
2156
+ "default": "null",
2157
+ "description": "In-progress Test playback; not private — mixin return type is exported."
2157
2158
  },
2158
2159
  {
2159
2160
  "kind": "method",
2160
- "name": "onMatchModeChange",
2161
- "return": {
2162
- "type": {
2163
- "text": "boolean"
2164
- }
2165
- },
2161
+ "name": "loadExistingAlertSound",
2166
2162
  "parameters": [
2167
2163
  {
2168
- "name": "index",
2169
- "type": {
2170
- "text": "number"
2171
- }
2172
- },
2173
- {
2174
- "name": "event",
2164
+ "name": "dynamicRuleId",
2175
2165
  "type": {
2176
- "text": "Event"
2166
+ "text": "string"
2177
2167
  }
2178
2168
  }
2179
2169
  ]
2180
2170
  },
2181
2171
  {
2182
2172
  "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
- ]
2173
+ "name": "openAlertSoundPicker"
2203
2174
  },
2204
2175
  {
2205
2176
  "kind": "method",
2206
- "name": "onRuleChange",
2207
- "return": {
2208
- "type": {
2209
- "text": "boolean"
2210
- }
2211
- },
2177
+ "name": "onAlertSoundSelected",
2212
2178
  "parameters": [
2213
- {
2214
- "name": "index",
2215
- "type": {
2216
- "text": "number"
2217
- }
2218
- },
2219
2179
  {
2220
2180
  "name": "event",
2221
2181
  "type": {
@@ -2226,939 +2186,903 @@
2226
2186
  },
2227
2187
  {
2228
2188
  "kind": "method",
2229
- "name": "openFilePicker",
2230
- "return": {
2231
- "type": {
2232
- "text": "boolean"
2233
- }
2234
- },
2235
- "parameters": [
2236
- {
2237
- "name": "index",
2238
- "type": {
2239
- "text": "number"
2240
- }
2241
- }
2242
- ]
2189
+ "name": "clearAttachedAlertSound"
2243
2190
  },
2244
2191
  {
2245
2192
  "kind": "method",
2246
- "name": "onFileSelected",
2247
- "return": {
2248
- "type": {
2249
- "text": "boolean"
2250
- }
2251
- },
2252
- "parameters": [
2253
- {
2254
- "name": "event",
2255
- "type": {
2256
- "text": "Event"
2257
- }
2258
- }
2259
- ]
2193
+ "name": "testAttachedAlertSound"
2260
2194
  },
2261
2195
  {
2262
2196
  "kind": "method",
2263
- "name": "clearSound",
2264
- "return": {
2265
- "type": {
2266
- "text": "boolean"
2267
- }
2268
- },
2269
- "parameters": [
2270
- {
2271
- "name": "index",
2272
- "type": {
2273
- "text": "number"
2274
- }
2275
- }
2276
- ]
2197
+ "name": "stopTestSound"
2277
2198
  },
2278
2199
  {
2279
2200
  "kind": "method",
2280
- "name": "testSound",
2281
- "return": {
2282
- "type": {
2283
- "text": "boolean"
2284
- }
2285
- },
2286
- "parameters": [
2287
- {
2288
- "name": "index",
2289
- "type": {
2290
- "text": "number"
2291
- }
2292
- }
2293
- ]
2201
+ "name": "resetAlertSoundState"
2294
2202
  },
2295
2203
  {
2296
2204
  "kind": "method",
2297
- "name": "toggleRuleMute",
2205
+ "name": "applyAlertSoundToPayload",
2298
2206
  "return": {
2299
2207
  "type": {
2300
- "text": "boolean"
2208
+ "text": "T"
2301
2209
  }
2302
2210
  },
2303
2211
  "parameters": [
2304
2212
  {
2305
- "name": "index",
2213
+ "name": "target",
2306
2214
  "type": {
2307
- "text": "number"
2215
+ "text": "T"
2308
2216
  }
2309
2217
  }
2310
- ]
2218
+ ],
2219
+ "description": "Merges pending sound / clear flag onto a create/update DETAILS object."
2311
2220
  },
2312
2221
  {
2313
2222
  "kind": "method",
2314
- "name": "onVolumeChange",
2315
- "return": {
2316
- "type": {
2317
- "text": "boolean"
2318
- }
2319
- },
2320
- "parameters": [
2321
- {
2322
- "name": "event",
2323
- "type": {
2324
- "text": "Event"
2325
- }
2326
- }
2327
- ]
2328
- },
2329
- {
2330
- "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)."
2373
- },
2223
+ "name": "syncAlertSoundCacheAfterSave",
2224
+ "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."
2225
+ }
2226
+ ],
2227
+ "parameters": [
2374
2228
  {
2375
- "kind": "method",
2376
- "name": "loadRules",
2377
- "privacy": "private",
2378
- "return": {
2379
- "type": {
2380
- "text": "Promise<void>"
2381
- }
2229
+ "name": "Base",
2230
+ "type": {
2231
+ "text": "TBase"
2382
2232
  }
2383
- },
2384
- {
2385
- "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."
2394
- },
2395
- {
2396
- "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...\"."
2405
- },
2406
- {
2407
- "kind": "method",
2408
- "name": "mapRules",
2409
- "privacy": "private",
2410
- "return": {
2411
- "type": {
2412
- "text": "AlertSoundSelectableRule[]"
2413
- }
2414
- },
2415
- "parameters": [
2416
- {
2417
- "name": "ruleList",
2418
- "type": {
2419
- "text": "NamedRuleRow[]"
2420
- }
2421
- }
2422
- ]
2423
- },
2424
- {
2425
- "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
- },
2442
- {
2443
- "kind": "method",
2444
- "name": "syncSoundState",
2445
- "privacy": "private"
2446
2233
  }
2447
2234
  ],
2448
- "superclass": {
2449
- "name": "GenesisElement",
2450
- "package": "@genesislcap/web-core"
2451
- },
2452
- "tagName": "foundation-sounds-panel",
2453
- "customElement": true
2235
+ "privacy": "public"
2454
2236
  }
2455
2237
  ],
2456
2238
  "exports": [
2457
2239
  {
2458
2240
  "kind": "js",
2459
- "name": "FoundationSoundsPanel",
2241
+ "name": "alertSoundAttachmentTemplate",
2460
2242
  "declaration": {
2461
- "name": "FoundationSoundsPanel",
2462
- "module": "src/components/foundation-sounds/foundation-sounds-panel.ts"
2243
+ "name": "alertSoundAttachmentTemplate",
2244
+ "module": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts"
2463
2245
  }
2464
2246
  },
2465
2247
  {
2466
- "kind": "custom-element-definition",
2467
- "name": "foundation-sounds-panel",
2248
+ "kind": "js",
2249
+ "name": "AlertSoundAttachmentMixin",
2468
2250
  "declaration": {
2469
- "name": "FoundationSoundsPanel",
2470
- "module": "src/components/foundation-sounds/foundation-sounds-panel.ts"
2251
+ "name": "AlertSoundAttachmentMixin",
2252
+ "module": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts"
2471
2253
  }
2472
2254
  }
2473
2255
  ]
2474
2256
  },
2475
2257
  {
2476
2258
  "kind": "javascript-module",
2477
- "path": "src/components/foundation-sounds/foundation-sounds.styles.ts",
2259
+ "path": "src/components/foundation-notification-dashboard/index.ts",
2260
+ "declarations": [],
2261
+ "exports": [
2262
+ {
2263
+ "kind": "js",
2264
+ "name": "*",
2265
+ "declaration": {
2266
+ "name": "*",
2267
+ "package": "./notification-dashboard"
2268
+ }
2269
+ }
2270
+ ]
2271
+ },
2272
+ {
2273
+ "kind": "javascript-module",
2274
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.styles.ts",
2478
2275
  "declarations": [
2479
2276
  {
2480
2277
  "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."
2278
+ "name": "FoundationNotificationDashboardStyles",
2279
+ "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`",
2280
+ "privacy": "public"
2484
2281
  }
2485
2282
  ],
2486
2283
  "exports": [
2487
2284
  {
2488
2285
  "kind": "js",
2489
- "name": "FoundationSoundsStyles",
2286
+ "name": "FoundationNotificationDashboardStyles",
2490
2287
  "declaration": {
2491
- "name": "FoundationSoundsStyles",
2492
- "module": "src/components/foundation-sounds/foundation-sounds.styles.ts"
2288
+ "name": "FoundationNotificationDashboardStyles",
2289
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.styles.ts"
2493
2290
  }
2494
2291
  }
2495
2292
  ]
2496
2293
  },
2497
2294
  {
2498
2295
  "kind": "javascript-module",
2499
- "path": "src/components/foundation-sounds/foundation-sounds.ts",
2296
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts",
2500
2297
  "declarations": [
2501
2298
  {
2502
2299
  "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",
2300
+ "description": "",
2301
+ "name": "NotificationDashboardTab",
2505
2302
  "members": [
2506
2303
  {
2507
2304
  "kind": "field",
2508
- "name": "connect",
2305
+ "name": "id",
2509
2306
  "type": {
2510
- "text": "Connect"
2307
+ "text": "string"
2511
2308
  }
2512
2309
  },
2513
2310
  {
2514
2311
  "kind": "field",
2515
- "name": "inboxService",
2312
+ "name": "name",
2516
2313
  "type": {
2517
- "text": "FoundationInboxService"
2314
+ "text": "string"
2518
2315
  }
2519
2316
  },
2520
2317
  {
2521
2318
  "kind": "field",
2522
- "name": "ruleService",
2319
+ "name": "component",
2523
2320
  "type": {
2524
- "text": "RuleService"
2321
+ "text": "string"
2525
2322
  }
2526
2323
  },
2527
2324
  {
2528
2325
  "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",
2326
+ "name": "right",
2539
2327
  "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
- }
2328
+ "text": "string"
2572
2329
  }
2573
- },
2330
+ }
2331
+ ]
2332
+ },
2333
+ {
2334
+ "kind": "variable",
2335
+ "name": "NOTIFICATION_DASHBOARD_TABS",
2336
+ "type": {
2337
+ "text": "NotificationDashboardTab[]"
2338
+ },
2339
+ "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]"
2340
+ }
2341
+ ],
2342
+ "exports": [
2343
+ {
2344
+ "kind": "js",
2345
+ "name": "NotificationDashboardTab",
2346
+ "declaration": {
2347
+ "name": "NotificationDashboardTab",
2348
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts"
2349
+ }
2350
+ },
2351
+ {
2352
+ "kind": "js",
2353
+ "name": "NOTIFICATION_DASHBOARD_TABS",
2354
+ "declaration": {
2355
+ "name": "NOTIFICATION_DASHBOARD_TABS",
2356
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts"
2357
+ }
2358
+ }
2359
+ ]
2360
+ },
2361
+ {
2362
+ "kind": "javascript-module",
2363
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.template.ts",
2364
+ "declarations": [
2365
+ {
2366
+ "kind": "variable",
2367
+ "name": "FoundationNotificationDashboardTemplate",
2368
+ "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`"
2369
+ }
2370
+ ],
2371
+ "exports": [
2372
+ {
2373
+ "kind": "js",
2374
+ "name": "FoundationNotificationDashboardTemplate",
2375
+ "declaration": {
2376
+ "name": "FoundationNotificationDashboardTemplate",
2377
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.template.ts"
2378
+ }
2379
+ }
2380
+ ]
2381
+ },
2382
+ {
2383
+ "kind": "javascript-module",
2384
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.ts",
2385
+ "declarations": [
2386
+ {
2387
+ "kind": "class",
2388
+ "description": "",
2389
+ "name": "FoundationNotificationDashboard",
2390
+ "members": [
2574
2391
  {
2575
2392
  "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": [
2393
+ "name": "auth",
2394
+ "type": {
2395
+ "text": "Auth"
2396
+ }
2397
+ },
2635
2398
  {
2636
- "name": "sound-enabled",
2399
+ "kind": "field",
2400
+ "name": "ready",
2637
2401
  "type": {
2638
2402
  "text": "boolean"
2639
2403
  },
2640
- "default": "true",
2641
- "description": "When false, new audible alerts are tracked but do not play.",
2642
- "fieldName": "soundEnabled"
2404
+ "default": "false"
2405
+ },
2406
+ {
2407
+ "kind": "field",
2408
+ "name": "hasPermissions",
2409
+ "type": {
2410
+ "text": "boolean"
2411
+ },
2412
+ "default": "true"
2643
2413
  }
2644
2414
  ],
2645
2415
  "superclass": {
2646
2416
  "name": "GenesisElement",
2647
2417
  "package": "@genesislcap/web-core"
2648
2418
  },
2649
- "tagName": "foundation-sounds",
2419
+ "tagName": "foundation-notification-dashboard",
2650
2420
  "customElement": true
2651
2421
  }
2652
2422
  ],
2653
2423
  "exports": [
2654
2424
  {
2655
2425
  "kind": "js",
2656
- "name": "FoundationSounds",
2426
+ "name": "FoundationNotificationDashboard",
2657
2427
  "declaration": {
2658
- "name": "FoundationSounds",
2659
- "module": "src/components/foundation-sounds/foundation-sounds.ts"
2428
+ "name": "FoundationNotificationDashboard",
2429
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.ts"
2660
2430
  }
2661
2431
  },
2662
2432
  {
2663
2433
  "kind": "custom-element-definition",
2664
- "name": "foundation-sounds",
2434
+ "name": "foundation-notification-dashboard",
2665
2435
  "declaration": {
2666
- "name": "FoundationSounds",
2667
- "module": "src/components/foundation-sounds/foundation-sounds.ts"
2436
+ "name": "FoundationNotificationDashboard",
2437
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.ts"
2668
2438
  }
2669
2439
  }
2670
2440
  ]
2671
2441
  },
2672
2442
  {
2673
2443
  "kind": "javascript-module",
2674
- "path": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts",
2444
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts",
2675
2445
  "declarations": [
2676
2446
  {
2677
- "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"
2447
+ "kind": "class",
2448
+ "description": "",
2449
+ "name": "UUIDGenerator",
2450
+ "members": [
2451
+ {
2452
+ "kind": "field",
2453
+ "name": "uuid",
2454
+ "type": {
2455
+ "text": "UUID"
2456
+ },
2457
+ "privacy": "private",
2458
+ "static": true
2459
+ },
2460
+ {
2461
+ "kind": "field",
2462
+ "name": "createUUID",
2463
+ "static": true
2464
+ }
2465
+ ]
2682
2466
  },
2683
2467
  {
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",
2468
+ "kind": "function",
2469
+ "name": "isEmpty",
2470
+ "parameters": [
2471
+ {
2472
+ "name": "value"
2473
+ }
2474
+ ]
2475
+ },
2476
+ {
2477
+ "kind": "class",
2478
+ "description": "",
2479
+ "name": "DynamicRuleUtils",
2687
2480
  "members": [
2688
2481
  {
2689
2482
  "kind": "field",
2690
- "name": "ruleService",
2691
- "type": {
2692
- "text": "RuleService"
2693
- }
2483
+ "name": "createEmptyCondition",
2484
+ "static": true
2694
2485
  },
2695
2486
  {
2696
2487
  "kind": "field",
2697
- "name": "isAlertSoundEditMode",
2698
- "type": {
2699
- "text": "boolean"
2700
- },
2701
- "description": "True when editing an existing entity (clear should set CLEAR_ALERT_SOUND).",
2702
- "readonly": true
2488
+ "name": "createAssignment",
2489
+ "static": true
2703
2490
  },
2704
2491
  {
2705
2492
  "kind": "field",
2706
- "name": "alertSoundEntityId",
2707
- "type": {
2708
- "text": "string | null"
2709
- },
2710
- "description": "DYNAMIC_RULE_ID of the entity being edited (null on create).\nUsed when alertSoundCacheSyncMode is `'entity'`.",
2711
- "readonly": true
2493
+ "name": "createTextAssignment",
2494
+ "static": true
2712
2495
  },
2713
2496
  {
2714
2497
  "kind": "field",
2715
- "name": "alertSoundCacheSyncMode",
2716
- "type": {
2717
- "text": "'entity' | 'all'"
2718
- },
2719
- "description": "`'entity'` — update/clear cache for alertSoundEntityId (rules).\n`'all'` — drop every cached server sound (templates; instance ids unknown).",
2720
- "readonly": true
2498
+ "name": "getAssignmentValue",
2499
+ "static": true
2721
2500
  },
2722
2501
  {
2723
2502
  "kind": "field",
2724
- "name": "alertSoundFileName",
2725
- "type": {
2726
- "text": "string"
2503
+ "name": "getAssignmentText",
2504
+ "static": true
2505
+ },
2506
+ {
2507
+ "kind": "method",
2508
+ "name": "createConditions",
2509
+ "static": true,
2510
+ "return": {
2511
+ "type": {
2512
+ "text": "any"
2513
+ }
2727
2514
  },
2728
- "default": "''",
2729
- "description": "Display name of the attached / pending alert sound file."
2515
+ "parameters": [
2516
+ {
2517
+ "name": "conditions",
2518
+ "type": {
2519
+ "text": "ConditionNode[]"
2520
+ }
2521
+ },
2522
+ {
2523
+ "name": "parameters",
2524
+ "optional": true
2525
+ }
2526
+ ]
2730
2527
  },
2731
2528
  {
2732
- "kind": "field",
2733
- "name": "alertSoundMimeType",
2734
- "type": {
2735
- "text": "string"
2529
+ "kind": "method",
2530
+ "name": "hasMultiValueCondition",
2531
+ "static": true,
2532
+ "return": {
2533
+ "type": {
2534
+ "text": "boolean"
2535
+ }
2736
2536
  },
2737
- "default": "''"
2537
+ "parameters": [
2538
+ {
2539
+ "name": "conditions",
2540
+ "type": {
2541
+ "text": "ConditionNode[]"
2542
+ }
2543
+ }
2544
+ ]
2738
2545
  },
2739
2546
  {
2740
- "kind": "field",
2741
- "name": "hasAlertSound",
2742
- "type": {
2743
- "text": "boolean"
2547
+ "kind": "method",
2548
+ "name": "hasOrJoin",
2549
+ "static": true,
2550
+ "return": {
2551
+ "type": {
2552
+ "text": "boolean"
2553
+ }
2744
2554
  },
2745
- "default": "false",
2746
- "description": "True when edit loaded an existing server sound (or user attached one)."
2555
+ "parameters": [
2556
+ {
2557
+ "name": "conditions",
2558
+ "type": {
2559
+ "text": "ConditionNode[]"
2560
+ }
2561
+ }
2562
+ ]
2747
2563
  },
2748
2564
  {
2749
- "kind": "field",
2750
- "name": "fileInput",
2751
- "type": {
2752
- "text": "HTMLInputElement"
2753
- }
2565
+ "kind": "method",
2566
+ "name": "hasGroup",
2567
+ "static": true,
2568
+ "return": {
2569
+ "type": {
2570
+ "text": "boolean"
2571
+ }
2572
+ },
2573
+ "parameters": [
2574
+ {
2575
+ "name": "conditions",
2576
+ "type": {
2577
+ "text": "ConditionNode[]"
2578
+ }
2579
+ }
2580
+ ]
2754
2581
  },
2755
2582
  {
2756
- "kind": "field",
2757
- "name": "pendingAlertSoundData",
2758
- "type": {
2759
- "text": "string | null"
2583
+ "kind": "method",
2584
+ "name": "hasUnsupportedOperator",
2585
+ "static": true,
2586
+ "return": {
2587
+ "type": {
2588
+ "text": "boolean"
2589
+ }
2760
2590
  },
2761
- "default": "null"
2591
+ "parameters": [
2592
+ {
2593
+ "name": "conditions",
2594
+ "type": {
2595
+ "text": "ConditionNode[]"
2596
+ }
2597
+ }
2598
+ ]
2762
2599
  },
2763
2600
  {
2764
- "kind": "field",
2765
- "name": "alertSoundDirty",
2766
- "type": {
2767
- "text": "boolean"
2601
+ "kind": "method",
2602
+ "name": "flattenConditions",
2603
+ "static": true,
2604
+ "return": {
2605
+ "type": {
2606
+ "text": "ConditionBuilderEntity[]"
2607
+ }
2768
2608
  },
2769
- "default": "false",
2770
- "description": "True when the user picked a new file this session (needs upload)."
2609
+ "parameters": [
2610
+ {
2611
+ "name": "conditions",
2612
+ "type": {
2613
+ "text": "ConditionNode[]"
2614
+ }
2615
+ }
2616
+ ]
2771
2617
  },
2772
2618
  {
2773
- "kind": "field",
2774
- "name": "clearAlertSound",
2775
- "type": {
2776
- "text": "boolean"
2619
+ "kind": "method",
2620
+ "name": "resolveLeftValues",
2621
+ "static": true,
2622
+ "return": {
2623
+ "type": {
2624
+ "text": "ConditionNode[]"
2625
+ }
2777
2626
  },
2778
- "default": "false"
2627
+ "parameters": [
2628
+ {
2629
+ "name": "conditions",
2630
+ "type": {
2631
+ "text": "ConditionNode[]"
2632
+ }
2633
+ },
2634
+ {
2635
+ "name": "fields",
2636
+ "type": {
2637
+ "text": "any[]"
2638
+ }
2639
+ }
2640
+ ]
2779
2641
  },
2780
2642
  {
2781
2643
  "kind": "field",
2782
- "name": "testAudio",
2783
- "type": {
2784
- "text": "HTMLAudioElement | null"
2785
- },
2786
- "default": "null",
2787
- "description": "In-progress Test playback; not private — mixin return type is exported."
2644
+ "name": "createEmptyGroup",
2645
+ "static": true
2788
2646
  },
2789
2647
  {
2790
2648
  "kind": "method",
2791
- "name": "loadExistingAlertSound",
2649
+ "name": "buildRawExpression",
2650
+ "static": true,
2651
+ "return": {
2652
+ "type": {
2653
+ "text": "string"
2654
+ }
2655
+ },
2792
2656
  "parameters": [
2793
2657
  {
2794
- "name": "dynamicRuleId",
2658
+ "name": "conditions",
2795
2659
  "type": {
2796
- "text": "string"
2660
+ "text": "ConditionNode[]"
2797
2661
  }
2798
2662
  }
2799
2663
  ]
2800
2664
  },
2801
2665
  {
2802
2666
  "kind": "method",
2803
- "name": "openAlertSoundPicker"
2804
- },
2805
- {
2806
- "kind": "method",
2807
- "name": "onAlertSoundSelected",
2667
+ "name": "parseRawExpression",
2668
+ "static": true,
2669
+ "return": {
2670
+ "type": {
2671
+ "text": "ConditionNode[] | null"
2672
+ }
2673
+ },
2808
2674
  "parameters": [
2809
2675
  {
2810
- "name": "event",
2676
+ "name": "rawExpression",
2811
2677
  "type": {
2812
- "text": "Event"
2678
+ "text": "string"
2813
2679
  }
2814
2680
  }
2815
2681
  ]
2816
- },
2682
+ }
2683
+ ]
2684
+ },
2685
+ {
2686
+ "kind": "class",
2687
+ "description": "",
2688
+ "name": "TemplateUtils",
2689
+ "members": [
2817
2690
  {
2818
- "kind": "method",
2819
- "name": "clearAttachedAlertSound"
2691
+ "kind": "field",
2692
+ "name": "createEmptyParameter",
2693
+ "static": true
2820
2694
  },
2821
2695
  {
2822
2696
  "kind": "method",
2823
- "name": "testAttachedAlertSound"
2697
+ "name": "getParameters",
2698
+ "static": true,
2699
+ "parameters": [
2700
+ {
2701
+ "name": "parameters"
2702
+ }
2703
+ ]
2824
2704
  },
2825
2705
  {
2826
2706
  "kind": "method",
2827
- "name": "stopTestSound"
2707
+ "name": "buildRightValue",
2708
+ "privacy": "private",
2709
+ "static": true,
2710
+ "parameters": [
2711
+ {
2712
+ "name": "logicalOperator",
2713
+ "type": {
2714
+ "text": "LogicalOperator"
2715
+ }
2716
+ },
2717
+ {
2718
+ "name": "condition"
2719
+ },
2720
+ {
2721
+ "name": "parameters",
2722
+ "optional": true
2723
+ }
2724
+ ]
2828
2725
  },
2829
2726
  {
2830
2727
  "kind": "method",
2831
- "name": "resetAlertSoundState"
2728
+ "name": "getConditions",
2729
+ "static": true,
2730
+ "parameters": [
2731
+ {
2732
+ "name": "conditions"
2733
+ },
2734
+ {
2735
+ "name": "parameters",
2736
+ "optional": true
2737
+ }
2738
+ ]
2832
2739
  },
2833
2740
  {
2834
2741
  "kind": "method",
2835
- "name": "applyAlertSoundToPayload",
2836
- "return": {
2837
- "type": {
2838
- "text": "T"
2742
+ "name": "createParameterDetails",
2743
+ "static": true,
2744
+ "parameters": [
2745
+ {
2746
+ "name": "parameters"
2839
2747
  }
2840
- },
2748
+ ]
2749
+ }
2750
+ ]
2751
+ },
2752
+ {
2753
+ "kind": "class",
2754
+ "description": "",
2755
+ "name": "RuleUtils",
2756
+ "members": [
2757
+ {
2758
+ "kind": "method",
2759
+ "name": "buildRightValue",
2760
+ "privacy": "private",
2761
+ "static": true,
2841
2762
  "parameters": [
2842
2763
  {
2843
- "name": "target",
2764
+ "name": "logicalOperator",
2844
2765
  "type": {
2845
- "text": "T"
2766
+ "text": "LogicalOperator"
2846
2767
  }
2768
+ },
2769
+ {
2770
+ "name": "condition"
2847
2771
  }
2848
- ],
2849
- "description": "Merges pending sound / clear flag onto a create/update DETAILS object."
2772
+ ]
2850
2773
  },
2851
2774
  {
2852
2775
  "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."
2776
+ "name": "getConditions",
2777
+ "static": true,
2778
+ "parameters": [
2779
+ {
2780
+ "name": "conditions"
2781
+ }
2782
+ ]
2855
2783
  }
2856
- ],
2784
+ ]
2785
+ },
2786
+ {
2787
+ "kind": "function",
2788
+ "name": "showNotificationError",
2857
2789
  "parameters": [
2858
2790
  {
2859
- "name": "Base",
2860
- "type": {
2861
- "text": "TBase"
2862
- }
2791
+ "name": "error"
2863
2792
  }
2864
- ],
2865
- "privacy": "public"
2793
+ ]
2866
2794
  }
2867
2795
  ],
2868
2796
  "exports": [
2869
2797
  {
2870
2798
  "kind": "js",
2871
- "name": "alertSoundAttachmentTemplate",
2799
+ "name": "UUIDGenerator",
2872
2800
  "declaration": {
2873
- "name": "alertSoundAttachmentTemplate",
2874
- "module": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts"
2801
+ "name": "UUIDGenerator",
2802
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2875
2803
  }
2876
2804
  },
2877
2805
  {
2878
2806
  "kind": "js",
2879
- "name": "AlertSoundAttachmentMixin",
2807
+ "name": "isEmpty",
2880
2808
  "declaration": {
2881
- "name": "AlertSoundAttachmentMixin",
2882
- "module": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts"
2809
+ "name": "isEmpty",
2810
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2883
2811
  }
2884
- }
2885
- ]
2886
- },
2887
- {
2888
- "kind": "javascript-module",
2889
- "path": "src/components/foundation-notification-dashboard/index.ts",
2890
- "declarations": [],
2891
- "exports": [
2812
+ },
2892
2813
  {
2893
2814
  "kind": "js",
2894
- "name": "*",
2815
+ "name": "DynamicRuleUtils",
2895
2816
  "declaration": {
2896
- "name": "*",
2897
- "package": "./notification-dashboard"
2817
+ "name": "DynamicRuleUtils",
2818
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2898
2819
  }
2899
- }
2900
- ]
2901
- },
2902
- {
2903
- "kind": "javascript-module",
2904
- "path": "src/components/foundation-notification-dashboard/notification-dashboard.styles.ts",
2905
- "declarations": [
2820
+ },
2906
2821
  {
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": [
2822
+ "kind": "js",
2823
+ "name": "TemplateUtils",
2824
+ "declaration": {
2825
+ "name": "TemplateUtils",
2826
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2827
+ }
2828
+ },
2914
2829
  {
2915
2830
  "kind": "js",
2916
- "name": "FoundationNotificationDashboardStyles",
2831
+ "name": "RuleUtils",
2917
2832
  "declaration": {
2918
- "name": "FoundationNotificationDashboardStyles",
2919
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.styles.ts"
2833
+ "name": "RuleUtils",
2834
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2835
+ }
2836
+ },
2837
+ {
2838
+ "kind": "js",
2839
+ "name": "showNotificationError",
2840
+ "declaration": {
2841
+ "name": "showNotificationError",
2842
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2920
2843
  }
2921
2844
  }
2922
2845
  ]
2923
2846
  },
2924
2847
  {
2925
2848
  "kind": "javascript-module",
2926
- "path": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts",
2849
+ "path": "src/components/foundation-sounds/foundation-sounds-panel.styles.ts",
2927
2850
  "declarations": [
2928
2851
  {
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
- },
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]"
2852
+ "kind": "variable",
2853
+ "name": "FoundationSoundsPanelStyles",
2854
+ "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`"
2970
2855
  }
2971
2856
  ],
2972
2857
  "exports": [
2973
2858
  {
2974
2859
  "kind": "js",
2975
- "name": "NotificationDashboardTab",
2976
- "declaration": {
2977
- "name": "NotificationDashboardTab",
2978
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts"
2979
- }
2980
- },
2981
- {
2982
- "kind": "js",
2983
- "name": "NOTIFICATION_DASHBOARD_TABS",
2860
+ "name": "FoundationSoundsPanelStyles",
2984
2861
  "declaration": {
2985
- "name": "NOTIFICATION_DASHBOARD_TABS",
2986
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts"
2862
+ "name": "FoundationSoundsPanelStyles",
2863
+ "module": "src/components/foundation-sounds/foundation-sounds-panel.styles.ts"
2987
2864
  }
2988
2865
  }
2989
2866
  ]
2990
2867
  },
2991
2868
  {
2992
2869
  "kind": "javascript-module",
2993
- "path": "src/components/foundation-notification-dashboard/notification-dashboard.template.ts",
2870
+ "path": "src/components/foundation-sounds/foundation-sounds-panel.template.ts",
2994
2871
  "declarations": [
2995
2872
  {
2996
2873
  "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`"
2874
+ "name": "FoundationSoundsPanelTemplate",
2875
+ "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`"
2999
2876
  }
3000
2877
  ],
3001
2878
  "exports": [
3002
2879
  {
3003
2880
  "kind": "js",
3004
- "name": "FoundationNotificationDashboardTemplate",
2881
+ "name": "FoundationSoundsPanelTemplate",
3005
2882
  "declaration": {
3006
- "name": "FoundationNotificationDashboardTemplate",
3007
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.template.ts"
2883
+ "name": "FoundationSoundsPanelTemplate",
2884
+ "module": "src/components/foundation-sounds/foundation-sounds-panel.template.ts"
3008
2885
  }
3009
2886
  }
3010
2887
  ]
3011
2888
  },
3012
2889
  {
3013
2890
  "kind": "javascript-module",
3014
- "path": "src/components/foundation-notification-dashboard/notification-dashboard.ts",
2891
+ "path": "src/components/foundation-sounds/foundation-sounds-panel.ts",
3015
2892
  "declarations": [
3016
2893
  {
3017
2894
  "kind": "class",
3018
- "description": "",
3019
- "name": "FoundationNotificationDashboard",
2895
+ "description": "Configures alert sound rules in the inbox Sounds tab. Persists via the shared\nAlertSoundPlayer; playback is handled by layout-mounted\nFoundationSounds.",
2896
+ "name": "FoundationSoundsPanel",
3020
2897
  "members": [
3021
2898
  {
3022
2899
  "kind": "field",
3023
- "name": "auth",
2900
+ "name": "ruleService",
3024
2901
  "type": {
3025
- "text": "Auth"
2902
+ "text": "RuleService"
3026
2903
  }
3027
2904
  },
3028
2905
  {
3029
2906
  "kind": "field",
3030
- "name": "ready",
2907
+ "name": "volumePercent",
3031
2908
  "type": {
3032
- "text": "boolean"
2909
+ "text": "number"
3033
2910
  },
3034
- "default": "false"
2911
+ "default": "100",
2912
+ "description": "Global playback volume 0–100. @internal"
3035
2913
  },
3036
2914
  {
3037
2915
  "kind": "field",
3038
- "name": "hasPermissions",
2916
+ "name": "selectableRules",
3039
2917
  "type": {
3040
- "text": "boolean"
2918
+ "text": "AlertSoundSelectableRule[]"
3041
2919
  },
3042
- "default": "true"
3043
- }
3044
- ],
3045
- "superclass": {
3046
- "name": "GenesisElement",
3047
- "package": "@genesislcap/web-core"
3048
- },
3049
- "tagName": "foundation-notification-dashboard",
3050
- "customElement": true
3051
- }
3052
- ],
3053
- "exports": [
3054
- {
3055
- "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",
3065
- "declaration": {
3066
- "name": "FoundationNotificationDashboard",
3067
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.ts"
3068
- }
3069
- }
3070
- ]
3071
- },
3072
- {
3073
- "kind": "javascript-module",
3074
- "path": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts",
3075
- "declarations": [
3076
- {
3077
- "kind": "class",
3078
- "description": "",
3079
- "name": "UUIDGenerator",
3080
- "members": [
2920
+ "default": "[]",
2921
+ "description": "Notification rules from REQ_NOTIFICATION_RULE. @internal"
2922
+ },
3081
2923
  {
3082
2924
  "kind": "field",
3083
- "name": "uuid",
2925
+ "name": "fileInput",
3084
2926
  "type": {
3085
- "text": "UUID"
2927
+ "text": "HTMLInputElement"
2928
+ }
2929
+ },
2930
+ {
2931
+ "kind": "field",
2932
+ "name": "pendingRuleIndex",
2933
+ "type": {
2934
+ "text": "number | null"
3086
2935
  },
3087
2936
  "privacy": "private",
3088
- "static": true
2937
+ "default": "null"
3089
2938
  },
3090
2939
  {
3091
2940
  "kind": "field",
3092
- "name": "createUUID",
3093
- "static": true
3094
- }
3095
- ]
3096
- },
3097
- {
3098
- "kind": "function",
3099
- "name": "isEmpty",
3100
- "parameters": [
3101
- {
3102
- "name": "value"
3103
- }
3104
- ]
3105
- },
3106
- {
3107
- "kind": "class",
3108
- "description": "",
3109
- "name": "DynamicRuleUtils",
3110
- "members": [
2941
+ "name": "player",
2942
+ "privacy": "private",
2943
+ "readonly": true
2944
+ },
3111
2945
  {
3112
2946
  "kind": "field",
3113
- "name": "createEmptyCondition",
3114
- "static": true
2947
+ "name": "unsubscribePlayer",
2948
+ "type": {
2949
+ "text": "(() => void) | undefined"
2950
+ },
2951
+ "privacy": "private"
3115
2952
  },
3116
2953
  {
3117
2954
  "kind": "field",
3118
- "name": "createAssignment",
3119
- "static": true
2955
+ "name": "ignoreSelectChanges",
2956
+ "type": {
2957
+ "text": "boolean"
2958
+ },
2959
+ "privacy": "private",
2960
+ "default": "false",
2961
+ "description": "Suppresses select change events while options are rebuilt."
3120
2962
  },
3121
2963
  {
3122
- "kind": "field",
3123
- "name": "createTextAssignment",
3124
- "static": true
2964
+ "kind": "method",
2965
+ "name": "onMatchModeChange",
2966
+ "return": {
2967
+ "type": {
2968
+ "text": "boolean"
2969
+ }
2970
+ },
2971
+ "parameters": [
2972
+ {
2973
+ "name": "index",
2974
+ "type": {
2975
+ "text": "number"
2976
+ }
2977
+ },
2978
+ {
2979
+ "name": "event",
2980
+ "type": {
2981
+ "text": "Event"
2982
+ }
2983
+ }
2984
+ ]
3125
2985
  },
3126
2986
  {
3127
- "kind": "field",
3128
- "name": "getAssignmentValue",
3129
- "static": true
2987
+ "kind": "method",
2988
+ "name": "onPatternInput",
2989
+ "return": {
2990
+ "type": {
2991
+ "text": "boolean"
2992
+ }
2993
+ },
2994
+ "parameters": [
2995
+ {
2996
+ "name": "index",
2997
+ "type": {
2998
+ "text": "number"
2999
+ }
3000
+ },
3001
+ {
3002
+ "name": "event",
3003
+ "type": {
3004
+ "text": "Event"
3005
+ }
3006
+ }
3007
+ ]
3130
3008
  },
3131
3009
  {
3132
- "kind": "field",
3133
- "name": "getAssignmentText",
3134
- "static": true
3010
+ "kind": "method",
3011
+ "name": "onRuleChange",
3012
+ "return": {
3013
+ "type": {
3014
+ "text": "boolean"
3015
+ }
3016
+ },
3017
+ "parameters": [
3018
+ {
3019
+ "name": "index",
3020
+ "type": {
3021
+ "text": "number"
3022
+ }
3023
+ },
3024
+ {
3025
+ "name": "event",
3026
+ "type": {
3027
+ "text": "Event"
3028
+ }
3029
+ }
3030
+ ]
3135
3031
  },
3136
3032
  {
3137
3033
  "kind": "method",
3138
- "name": "createConditions",
3139
- "static": true,
3034
+ "name": "openFilePicker",
3140
3035
  "return": {
3141
3036
  "type": {
3142
- "text": "any"
3037
+ "text": "boolean"
3143
3038
  }
3144
3039
  },
3145
3040
  "parameters": [
3146
3041
  {
3147
- "name": "conditions",
3042
+ "name": "index",
3043
+ "type": {
3044
+ "text": "number"
3045
+ }
3046
+ }
3047
+ ]
3048
+ },
3049
+ {
3050
+ "kind": "method",
3051
+ "name": "onFileSelected",
3052
+ "return": {
3053
+ "type": {
3054
+ "text": "boolean"
3055
+ }
3056
+ },
3057
+ "parameters": [
3058
+ {
3059
+ "name": "event",
3060
+ "type": {
3061
+ "text": "Event"
3062
+ }
3063
+ }
3064
+ ]
3065
+ },
3066
+ {
3067
+ "kind": "method",
3068
+ "name": "clearSound",
3069
+ "return": {
3070
+ "type": {
3071
+ "text": "boolean"
3072
+ }
3073
+ },
3074
+ "parameters": [
3075
+ {
3076
+ "name": "index",
3148
3077
  "type": {
3149
- "text": "ConditionNode[]"
3078
+ "text": "number"
3150
3079
  }
3151
- },
3152
- {
3153
- "name": "parameters",
3154
- "optional": true
3155
3080
  }
3156
3081
  ]
3157
3082
  },
3158
3083
  {
3159
3084
  "kind": "method",
3160
- "name": "hasMultiValueCondition",
3161
- "static": true,
3085
+ "name": "testSound",
3162
3086
  "return": {
3163
3087
  "type": {
3164
3088
  "text": "boolean"
@@ -3166,17 +3090,16 @@
3166
3090
  },
3167
3091
  "parameters": [
3168
3092
  {
3169
- "name": "conditions",
3093
+ "name": "index",
3170
3094
  "type": {
3171
- "text": "ConditionNode[]"
3095
+ "text": "number"
3172
3096
  }
3173
3097
  }
3174
3098
  ]
3175
3099
  },
3176
3100
  {
3177
3101
  "kind": "method",
3178
- "name": "hasOrJoin",
3179
- "static": true,
3102
+ "name": "toggleRuleMute",
3180
3103
  "return": {
3181
3104
  "type": {
3182
3105
  "text": "boolean"
@@ -3184,17 +3107,16 @@
3184
3107
  },
3185
3108
  "parameters": [
3186
3109
  {
3187
- "name": "conditions",
3110
+ "name": "index",
3188
3111
  "type": {
3189
- "text": "ConditionNode[]"
3112
+ "text": "number"
3190
3113
  }
3191
3114
  }
3192
3115
  ]
3193
3116
  },
3194
3117
  {
3195
3118
  "kind": "method",
3196
- "name": "hasGroup",
3197
- "static": true,
3119
+ "name": "onVolumeChange",
3198
3120
  "return": {
3199
3121
  "type": {
3200
3122
  "text": "boolean"
@@ -3202,17 +3124,34 @@
3202
3124
  },
3203
3125
  "parameters": [
3204
3126
  {
3205
- "name": "conditions",
3127
+ "name": "event",
3206
3128
  "type": {
3207
- "text": "ConditionNode[]"
3129
+ "text": "Event"
3208
3130
  }
3209
3131
  }
3210
3132
  ]
3211
3133
  },
3212
3134
  {
3213
3135
  "kind": "method",
3214
- "name": "hasUnsupportedOperator",
3215
- "static": true,
3136
+ "name": "toggleMute",
3137
+ "return": {
3138
+ "type": {
3139
+ "text": "boolean"
3140
+ }
3141
+ }
3142
+ },
3143
+ {
3144
+ "kind": "method",
3145
+ "name": "addRule",
3146
+ "return": {
3147
+ "type": {
3148
+ "text": "boolean"
3149
+ }
3150
+ }
3151
+ },
3152
+ {
3153
+ "kind": "method",
3154
+ "name": "removeRule",
3216
3155
  "return": {
3217
3156
  "type": {
3218
3157
  "text": "boolean"
@@ -3220,256 +3159,317 @@
3220
3159
  },
3221
3160
  "parameters": [
3222
3161
  {
3223
- "name": "conditions",
3162
+ "name": "index",
3224
3163
  "type": {
3225
- "text": "ConditionNode[]"
3164
+ "text": "number"
3226
3165
  }
3227
3166
  }
3228
3167
  ]
3229
3168
  },
3230
3169
  {
3231
3170
  "kind": "method",
3232
- "name": "flattenConditions",
3233
- "static": true,
3171
+ "name": "reloadRules",
3234
3172
  "return": {
3235
3173
  "type": {
3236
- "text": "ConditionBuilderEntity[]"
3174
+ "text": "Promise<void>"
3175
+ }
3176
+ },
3177
+ "description": "Reloads the notification-rule picker (e.g. when the Sounds tab is opened)."
3178
+ },
3179
+ {
3180
+ "kind": "method",
3181
+ "name": "loadRules",
3182
+ "privacy": "private",
3183
+ "return": {
3184
+ "type": {
3185
+ "text": "Promise<void>"
3186
+ }
3187
+ }
3188
+ },
3189
+ {
3190
+ "kind": "method",
3191
+ "name": "settleRuleOptions",
3192
+ "privacy": "private",
3193
+ "return": {
3194
+ "type": {
3195
+ "text": "Promise<void>"
3196
+ }
3197
+ },
3198
+ "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."
3199
+ },
3200
+ {
3201
+ "kind": "method",
3202
+ "name": "applyRuleSelectValues",
3203
+ "privacy": "private",
3204
+ "return": {
3205
+ "type": {
3206
+ "text": "void"
3207
+ }
3208
+ },
3209
+ "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...\"."
3210
+ },
3211
+ {
3212
+ "kind": "method",
3213
+ "name": "mapRules",
3214
+ "privacy": "private",
3215
+ "return": {
3216
+ "type": {
3217
+ "text": "AlertSoundSelectableRule[]"
3237
3218
  }
3238
3219
  },
3239
3220
  "parameters": [
3240
3221
  {
3241
- "name": "conditions",
3222
+ "name": "ruleList",
3242
3223
  "type": {
3243
- "text": "ConditionNode[]"
3224
+ "text": "NamedRuleRow[]"
3244
3225
  }
3245
3226
  }
3246
3227
  ]
3247
3228
  },
3248
3229
  {
3249
3230
  "kind": "method",
3250
- "name": "resolveLeftValues",
3251
- "static": true,
3231
+ "name": "ruleMatchId",
3232
+ "privacy": "private",
3252
3233
  "return": {
3253
3234
  "type": {
3254
- "text": "ConditionNode[]"
3235
+ "text": "string"
3255
3236
  }
3256
3237
  },
3257
3238
  "parameters": [
3258
3239
  {
3259
- "name": "conditions",
3260
- "type": {
3261
- "text": "ConditionNode[]"
3262
- }
3263
- },
3264
- {
3265
- "name": "fields",
3240
+ "name": "rule",
3266
3241
  "type": {
3267
- "text": "any[]"
3242
+ "text": "NamedRuleRow | undefined"
3268
3243
  }
3269
3244
  }
3270
3245
  ]
3271
3246
  },
3247
+ {
3248
+ "kind": "method",
3249
+ "name": "syncSoundState",
3250
+ "privacy": "private"
3251
+ }
3252
+ ],
3253
+ "superclass": {
3254
+ "name": "GenesisElement",
3255
+ "package": "@genesislcap/web-core"
3256
+ },
3257
+ "tagName": "foundation-sounds-panel",
3258
+ "customElement": true
3259
+ }
3260
+ ],
3261
+ "exports": [
3262
+ {
3263
+ "kind": "js",
3264
+ "name": "FoundationSoundsPanel",
3265
+ "declaration": {
3266
+ "name": "FoundationSoundsPanel",
3267
+ "module": "src/components/foundation-sounds/foundation-sounds-panel.ts"
3268
+ }
3269
+ },
3270
+ {
3271
+ "kind": "custom-element-definition",
3272
+ "name": "foundation-sounds-panel",
3273
+ "declaration": {
3274
+ "name": "FoundationSoundsPanel",
3275
+ "module": "src/components/foundation-sounds/foundation-sounds-panel.ts"
3276
+ }
3277
+ }
3278
+ ]
3279
+ },
3280
+ {
3281
+ "kind": "javascript-module",
3282
+ "path": "src/components/foundation-sounds/foundation-sounds.styles.ts",
3283
+ "declarations": [
3284
+ {
3285
+ "kind": "variable",
3286
+ "name": "FoundationSoundsStyles",
3287
+ "default": "css`\n :host {\n display: none;\n }\n`",
3288
+ "description": "Headless layout listener — take no space in the layout chrome."
3289
+ }
3290
+ ],
3291
+ "exports": [
3292
+ {
3293
+ "kind": "js",
3294
+ "name": "FoundationSoundsStyles",
3295
+ "declaration": {
3296
+ "name": "FoundationSoundsStyles",
3297
+ "module": "src/components/foundation-sounds/foundation-sounds.styles.ts"
3298
+ }
3299
+ }
3300
+ ]
3301
+ },
3302
+ {
3303
+ "kind": "javascript-module",
3304
+ "path": "src/components/foundation-sounds/foundation-sounds.ts",
3305
+ "declarations": [
3306
+ {
3307
+ "kind": "class",
3308
+ "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.",
3309
+ "name": "FoundationSounds",
3310
+ "members": [
3311
+ {
3312
+ "kind": "field",
3313
+ "name": "connect",
3314
+ "type": {
3315
+ "text": "Connect"
3316
+ }
3317
+ },
3272
3318
  {
3273
3319
  "kind": "field",
3274
- "name": "createEmptyGroup",
3275
- "static": true
3320
+ "name": "inboxService",
3321
+ "type": {
3322
+ "text": "FoundationInboxService"
3323
+ }
3324
+ },
3325
+ {
3326
+ "kind": "field",
3327
+ "name": "ruleService",
3328
+ "type": {
3329
+ "text": "RuleService"
3330
+ }
3331
+ },
3332
+ {
3333
+ "kind": "field",
3334
+ "name": "soundEnabled",
3335
+ "type": {
3336
+ "text": "boolean"
3337
+ },
3338
+ "default": "true",
3339
+ "description": "When false, new audible alerts are tracked but do not play."
3340
+ },
3341
+ {
3342
+ "kind": "field",
3343
+ "name": "connectionSub",
3344
+ "type": {
3345
+ "text": "Subscription | undefined"
3346
+ },
3347
+ "privacy": "private"
3348
+ },
3349
+ {
3350
+ "kind": "field",
3351
+ "name": "player",
3352
+ "privacy": "private",
3353
+ "readonly": true
3354
+ },
3355
+ {
3356
+ "kind": "field",
3357
+ "name": "knownAlertIds",
3358
+ "privacy": "private",
3359
+ "default": "new Set<string>()"
3360
+ },
3361
+ {
3362
+ "kind": "field",
3363
+ "name": "serverSoundFetches",
3364
+ "privacy": "private",
3365
+ "readonly": true,
3366
+ "default": "new Map<string, Promise<boolean>>()",
3367
+ "description": "In-flight server sound fetches keyed by DYNAMIC_RULE_ID."
3368
+ },
3369
+ {
3370
+ "kind": "method",
3371
+ "name": "subscribeToAlerts",
3372
+ "privacy": "private",
3373
+ "return": {
3374
+ "type": {
3375
+ "text": "void"
3376
+ }
3377
+ }
3378
+ },
3379
+ {
3380
+ "kind": "field",
3381
+ "name": "subscriptionHandler",
3382
+ "privacy": "private"
3276
3383
  },
3277
3384
  {
3278
3385
  "kind": "method",
3279
- "name": "buildRawExpression",
3280
- "static": true,
3386
+ "name": "playForNewAlerts",
3387
+ "privacy": "private",
3281
3388
  "return": {
3282
3389
  "type": {
3283
- "text": "string"
3390
+ "text": "Promise<void>"
3284
3391
  }
3285
3392
  },
3286
3393
  "parameters": [
3287
3394
  {
3288
- "name": "conditions",
3395
+ "name": "rows",
3289
3396
  "type": {
3290
- "text": "ConditionNode[]"
3397
+ "text": "Array<{\n id: string;\n message?: string;\n header?: string;\n dynamicRuleId?: string;\n }>"
3291
3398
  }
3292
3399
  }
3293
3400
  ]
3294
3401
  },
3295
3402
  {
3296
3403
  "kind": "method",
3297
- "name": "parseRawExpression",
3298
- "static": true,
3404
+ "name": "tryPlayServerSound",
3405
+ "privacy": "private",
3299
3406
  "return": {
3300
3407
  "type": {
3301
- "text": "ConditionNode[] | null"
3408
+ "text": "Promise<boolean>"
3302
3409
  }
3303
3410
  },
3304
3411
  "parameters": [
3305
3412
  {
3306
- "name": "rawExpression",
3413
+ "name": "dynamicRuleId",
3307
3414
  "type": {
3308
3415
  "text": "string"
3309
3416
  }
3310
3417
  }
3311
3418
  ]
3312
- }
3313
- ]
3314
- },
3315
- {
3316
- "kind": "class",
3317
- "description": "",
3318
- "name": "TemplateUtils",
3319
- "members": [
3320
- {
3321
- "kind": "field",
3322
- "name": "createEmptyParameter",
3323
- "static": true
3324
- },
3325
- {
3326
- "kind": "method",
3327
- "name": "getParameters",
3328
- "static": true,
3329
- "parameters": [
3330
- {
3331
- "name": "parameters"
3332
- }
3333
- ]
3334
3419
  },
3335
3420
  {
3336
3421
  "kind": "method",
3337
- "name": "buildRightValue",
3422
+ "name": "fetchAndCacheServerSound",
3338
3423
  "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
- ]
3355
- },
3356
- {
3357
- "kind": "method",
3358
- "name": "getConditions",
3359
- "static": true,
3360
- "parameters": [
3361
- {
3362
- "name": "conditions"
3363
- },
3364
- {
3365
- "name": "parameters",
3366
- "optional": true
3367
- }
3368
- ]
3369
- },
3370
- {
3371
- "kind": "method",
3372
- "name": "createParameterDetails",
3373
- "static": true,
3374
- "parameters": [
3375
- {
3376
- "name": "parameters"
3424
+ "return": {
3425
+ "type": {
3426
+ "text": "Promise<boolean>"
3377
3427
  }
3378
- ]
3379
- }
3380
- ]
3381
- },
3382
- {
3383
- "kind": "class",
3384
- "description": "",
3385
- "name": "RuleUtils",
3386
- "members": [
3387
- {
3388
- "kind": "method",
3389
- "name": "buildRightValue",
3390
- "privacy": "private",
3391
- "static": true,
3428
+ },
3392
3429
  "parameters": [
3393
3430
  {
3394
- "name": "logicalOperator",
3431
+ "name": "dynamicRuleId",
3395
3432
  "type": {
3396
- "text": "LogicalOperator"
3433
+ "text": "string"
3397
3434
  }
3398
- },
3399
- {
3400
- "name": "condition"
3401
- }
3402
- ]
3403
- },
3404
- {
3405
- "kind": "method",
3406
- "name": "getConditions",
3407
- "static": true,
3408
- "parameters": [
3409
- {
3410
- "name": "conditions"
3411
3435
  }
3412
3436
  ]
3413
3437
  }
3414
- ]
3415
- },
3416
- {
3417
- "kind": "function",
3418
- "name": "showNotificationError",
3419
- "parameters": [
3438
+ ],
3439
+ "attributes": [
3420
3440
  {
3421
- "name": "error"
3441
+ "name": "sound-enabled",
3442
+ "type": {
3443
+ "text": "boolean"
3444
+ },
3445
+ "default": "true",
3446
+ "description": "When false, new audible alerts are tracked but do not play.",
3447
+ "fieldName": "soundEnabled"
3422
3448
  }
3423
- ]
3449
+ ],
3450
+ "superclass": {
3451
+ "name": "GenesisElement",
3452
+ "package": "@genesislcap/web-core"
3453
+ },
3454
+ "tagName": "foundation-sounds",
3455
+ "customElement": true
3424
3456
  }
3425
3457
  ],
3426
3458
  "exports": [
3427
3459
  {
3428
3460
  "kind": "js",
3429
- "name": "UUIDGenerator",
3430
- "declaration": {
3431
- "name": "UUIDGenerator",
3432
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3433
- }
3434
- },
3435
- {
3436
- "kind": "js",
3437
- "name": "isEmpty",
3438
- "declaration": {
3439
- "name": "isEmpty",
3440
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3441
- }
3442
- },
3443
- {
3444
- "kind": "js",
3445
- "name": "DynamicRuleUtils",
3446
- "declaration": {
3447
- "name": "DynamicRuleUtils",
3448
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3449
- }
3450
- },
3451
- {
3452
- "kind": "js",
3453
- "name": "TemplateUtils",
3454
- "declaration": {
3455
- "name": "TemplateUtils",
3456
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3457
- }
3458
- },
3459
- {
3460
- "kind": "js",
3461
- "name": "RuleUtils",
3461
+ "name": "FoundationSounds",
3462
3462
  "declaration": {
3463
- "name": "RuleUtils",
3464
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3463
+ "name": "FoundationSounds",
3464
+ "module": "src/components/foundation-sounds/foundation-sounds.ts"
3465
3465
  }
3466
3466
  },
3467
3467
  {
3468
- "kind": "js",
3469
- "name": "showNotificationError",
3468
+ "kind": "custom-element-definition",
3469
+ "name": "foundation-sounds",
3470
3470
  "declaration": {
3471
- "name": "showNotificationError",
3472
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3471
+ "name": "FoundationSounds",
3472
+ "module": "src/components/foundation-sounds/foundation-sounds.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": [
4855
+ "name": "SEVERITY_SERIOUS",
4856
+ "type": {
4857
+ "text": "string"
4858
+ },
4859
+ "default": "'SERIOUS'"
4860
+ },
4925
4861
  {
4926
4862
  "kind": "variable",
4927
- "name": "noItemsClass",
4863
+ "name": "SEVERITY_WARNING",
4928
4864
  "type": {
4929
4865
  "text": "string"
4930
4866
  },
4931
- "default": "'no-items'",
4932
- "description": "Class to use when there are no items"
4867
+ "default": "'WARNING'"
4933
4868
  },
4934
4869
  {
4935
4870
  "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`"
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
  ]
@@ -6831,235 +6831,25 @@
6831
6831
  "name": "GenesisElement",
6832
6832
  "package": "@genesislcap/web-core"
6833
6833
  },
6834
- "tagName": "rule-parameter",
6835
- "customElement": true
6836
- }
6837
- ],
6838
- "exports": [
6839
- {
6840
- "kind": "js",
6841
- "name": "RuleParameter",
6842
- "declaration": {
6843
- "name": "RuleParameter",
6844
- "module": "src/components/foundation-inbox/components/inbox-subscription/rule-parameter/rule-parameter.ts"
6845
- }
6846
- },
6847
- {
6848
- "kind": "custom-element-definition",
6849
- "name": "rule-parameter",
6850
- "declaration": {
6851
- "name": "RuleParameter",
6852
- "module": "src/components/foundation-inbox/components/inbox-subscription/rule-parameter/rule-parameter.ts"
6853
- }
6854
- }
6855
- ]
6856
- },
6857
- {
6858
- "kind": "javascript-module",
6859
- "path": "src/components/foundation-notification-dashboard/components/routes/tabs/email-distribution-route-management.ts",
6860
- "declarations": [
6861
- {
6862
- "kind": "class",
6863
- "description": "",
6864
- "name": "EmailDistributionRouteManagement",
6865
- "superclass": {
6866
- "name": "GenesisElement",
6867
- "package": "@genesislcap/web-core"
6868
- },
6869
- "tagName": "email-distribution-route-management",
6870
- "customElement": true
6871
- }
6872
- ],
6873
- "exports": [
6874
- {
6875
- "kind": "js",
6876
- "name": "EmailDistributionRouteManagement",
6877
- "declaration": {
6878
- "name": "EmailDistributionRouteManagement",
6879
- "module": "src/components/foundation-notification-dashboard/components/routes/tabs/email-distribution-route-management.ts"
6880
- }
6881
- },
6882
- {
6883
- "kind": "custom-element-definition",
6884
- "name": "email-distribution-route-management",
6885
- "declaration": {
6886
- "name": "EmailDistributionRouteManagement",
6887
- "module": "src/components/foundation-notification-dashboard/components/routes/tabs/email-distribution-route-management.ts"
6888
- }
6889
- }
6890
- ]
6891
- },
6892
- {
6893
- "kind": "javascript-module",
6894
- "path": "src/components/foundation-notification-dashboard/components/routes/tabs/email-user-route-management.ts",
6895
- "declarations": [
6896
- {
6897
- "kind": "class",
6898
- "description": "",
6899
- "name": "EmailUserRouteManagement",
6900
- "superclass": {
6901
- "name": "GenesisElement",
6902
- "package": "@genesislcap/web-core"
6903
- },
6904
- "tagName": "email-user-route-management",
6905
- "customElement": true
6906
- }
6907
- ],
6908
- "exports": [
6909
- {
6910
- "kind": "js",
6911
- "name": "EmailUserRouteManagement",
6912
- "declaration": {
6913
- "name": "EmailUserRouteManagement",
6914
- "module": "src/components/foundation-notification-dashboard/components/routes/tabs/email-user-route-management.ts"
6915
- }
6916
- },
6917
- {
6918
- "kind": "custom-element-definition",
6919
- "name": "email-user-route-management",
6920
- "declaration": {
6921
- "name": "EmailUserRouteManagement",
6922
- "module": "src/components/foundation-notification-dashboard/components/routes/tabs/email-user-route-management.ts"
6923
- }
6924
- }
6925
- ]
6926
- },
6927
- {
6928
- "kind": "javascript-module",
6929
- "path": "src/components/foundation-notification-dashboard/components/routes/tabs/log-route-management.ts",
6930
- "declarations": [
6931
- {
6932
- "kind": "class",
6933
- "description": "",
6934
- "name": "LogRouteManagement",
6935
- "superclass": {
6936
- "name": "GenesisElement",
6937
- "package": "@genesislcap/web-core"
6938
- },
6939
- "tagName": "log-route-management",
6940
- "customElement": true
6941
- }
6942
- ],
6943
- "exports": [
6944
- {
6945
- "kind": "js",
6946
- "name": "LogRouteManagement",
6947
- "declaration": {
6948
- "name": "LogRouteManagement",
6949
- "module": "src/components/foundation-notification-dashboard/components/routes/tabs/log-route-management.ts"
6950
- }
6951
- },
6952
- {
6953
- "kind": "custom-element-definition",
6954
- "name": "log-route-management",
6955
- "declaration": {
6956
- "name": "LogRouteManagement",
6957
- "module": "src/components/foundation-notification-dashboard/components/routes/tabs/log-route-management.ts"
6958
- }
6959
- }
6960
- ]
6961
- },
6962
- {
6963
- "kind": "javascript-module",
6964
- "path": "src/components/foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management.ts",
6965
- "declarations": [
6966
- {
6967
- "kind": "class",
6968
- "description": "",
6969
- "name": "MSTeamsRouteManagement",
6970
- "superclass": {
6971
- "name": "GenesisElement",
6972
- "package": "@genesislcap/web-core"
6973
- },
6974
- "tagName": "ms-teams-route-management",
6975
- "customElement": true
6976
- }
6977
- ],
6978
- "exports": [
6979
- {
6980
- "kind": "js",
6981
- "name": "MSTeamsRouteManagement",
6982
- "declaration": {
6983
- "name": "MSTeamsRouteManagement",
6984
- "module": "src/components/foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management.ts"
6985
- }
6986
- },
6987
- {
6988
- "kind": "custom-element-definition",
6989
- "name": "ms-teams-route-management",
6990
- "declaration": {
6991
- "name": "MSTeamsRouteManagement",
6992
- "module": "src/components/foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management.ts"
6993
- }
6994
- }
6995
- ]
6996
- },
6997
- {
6998
- "kind": "javascript-module",
6999
- "path": "src/components/foundation-notification-dashboard/components/routes/tabs/screen-route-management.ts",
7000
- "declarations": [
7001
- {
7002
- "kind": "class",
7003
- "description": "",
7004
- "name": "ScreenRouteManagement",
7005
- "superclass": {
7006
- "name": "GenesisElement",
7007
- "package": "@genesislcap/web-core"
7008
- },
7009
- "tagName": "screen-route-management",
7010
- "customElement": true
7011
- }
7012
- ],
7013
- "exports": [
7014
- {
7015
- "kind": "js",
7016
- "name": "ScreenRouteManagement",
7017
- "declaration": {
7018
- "name": "ScreenRouteManagement",
7019
- "module": "src/components/foundation-notification-dashboard/components/routes/tabs/screen-route-management.ts"
7020
- }
7021
- },
7022
- {
7023
- "kind": "custom-element-definition",
7024
- "name": "screen-route-management",
7025
- "declaration": {
7026
- "name": "ScreenRouteManagement",
7027
- "module": "src/components/foundation-notification-dashboard/components/routes/tabs/screen-route-management.ts"
7028
- }
7029
- }
7030
- ]
7031
- },
7032
- {
7033
- "kind": "javascript-module",
7034
- "path": "src/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.ts",
7035
- "declarations": [
7036
- {
7037
- "kind": "class",
7038
- "description": "",
7039
- "name": "SlackRouteManagement",
7040
- "superclass": {
7041
- "name": "GenesisElement",
7042
- "package": "@genesislcap/web-core"
7043
- },
7044
- "tagName": "slack-route-management",
6834
+ "tagName": "rule-parameter",
7045
6835
  "customElement": true
7046
6836
  }
7047
6837
  ],
7048
6838
  "exports": [
7049
6839
  {
7050
6840
  "kind": "js",
7051
- "name": "SlackRouteManagement",
6841
+ "name": "RuleParameter",
7052
6842
  "declaration": {
7053
- "name": "SlackRouteManagement",
7054
- "module": "src/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.ts"
6843
+ "name": "RuleParameter",
6844
+ "module": "src/components/foundation-inbox/components/inbox-subscription/rule-parameter/rule-parameter.ts"
7055
6845
  }
7056
6846
  },
7057
6847
  {
7058
6848
  "kind": "custom-element-definition",
7059
- "name": "slack-route-management",
6849
+ "name": "rule-parameter",
7060
6850
  "declaration": {
7061
- "name": "SlackRouteManagement",
7062
- "module": "src/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.ts"
6851
+ "name": "RuleParameter",
6852
+ "module": "src/components/foundation-inbox/components/inbox-subscription/rule-parameter/rule-parameter.ts"
7063
6853
  }
7064
6854
  }
7065
6855
  ]
@@ -7677,6 +7467,216 @@
7677
7467
  }
7678
7468
  ]
7679
7469
  },
7470
+ {
7471
+ "kind": "javascript-module",
7472
+ "path": "src/components/foundation-notification-dashboard/components/routes/tabs/email-distribution-route-management.ts",
7473
+ "declarations": [
7474
+ {
7475
+ "kind": "class",
7476
+ "description": "",
7477
+ "name": "EmailDistributionRouteManagement",
7478
+ "superclass": {
7479
+ "name": "GenesisElement",
7480
+ "package": "@genesislcap/web-core"
7481
+ },
7482
+ "tagName": "email-distribution-route-management",
7483
+ "customElement": true
7484
+ }
7485
+ ],
7486
+ "exports": [
7487
+ {
7488
+ "kind": "js",
7489
+ "name": "EmailDistributionRouteManagement",
7490
+ "declaration": {
7491
+ "name": "EmailDistributionRouteManagement",
7492
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/email-distribution-route-management.ts"
7493
+ }
7494
+ },
7495
+ {
7496
+ "kind": "custom-element-definition",
7497
+ "name": "email-distribution-route-management",
7498
+ "declaration": {
7499
+ "name": "EmailDistributionRouteManagement",
7500
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/email-distribution-route-management.ts"
7501
+ }
7502
+ }
7503
+ ]
7504
+ },
7505
+ {
7506
+ "kind": "javascript-module",
7507
+ "path": "src/components/foundation-notification-dashboard/components/routes/tabs/email-user-route-management.ts",
7508
+ "declarations": [
7509
+ {
7510
+ "kind": "class",
7511
+ "description": "",
7512
+ "name": "EmailUserRouteManagement",
7513
+ "superclass": {
7514
+ "name": "GenesisElement",
7515
+ "package": "@genesislcap/web-core"
7516
+ },
7517
+ "tagName": "email-user-route-management",
7518
+ "customElement": true
7519
+ }
7520
+ ],
7521
+ "exports": [
7522
+ {
7523
+ "kind": "js",
7524
+ "name": "EmailUserRouteManagement",
7525
+ "declaration": {
7526
+ "name": "EmailUserRouteManagement",
7527
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/email-user-route-management.ts"
7528
+ }
7529
+ },
7530
+ {
7531
+ "kind": "custom-element-definition",
7532
+ "name": "email-user-route-management",
7533
+ "declaration": {
7534
+ "name": "EmailUserRouteManagement",
7535
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/email-user-route-management.ts"
7536
+ }
7537
+ }
7538
+ ]
7539
+ },
7540
+ {
7541
+ "kind": "javascript-module",
7542
+ "path": "src/components/foundation-notification-dashboard/components/routes/tabs/log-route-management.ts",
7543
+ "declarations": [
7544
+ {
7545
+ "kind": "class",
7546
+ "description": "",
7547
+ "name": "LogRouteManagement",
7548
+ "superclass": {
7549
+ "name": "GenesisElement",
7550
+ "package": "@genesislcap/web-core"
7551
+ },
7552
+ "tagName": "log-route-management",
7553
+ "customElement": true
7554
+ }
7555
+ ],
7556
+ "exports": [
7557
+ {
7558
+ "kind": "js",
7559
+ "name": "LogRouteManagement",
7560
+ "declaration": {
7561
+ "name": "LogRouteManagement",
7562
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/log-route-management.ts"
7563
+ }
7564
+ },
7565
+ {
7566
+ "kind": "custom-element-definition",
7567
+ "name": "log-route-management",
7568
+ "declaration": {
7569
+ "name": "LogRouteManagement",
7570
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/log-route-management.ts"
7571
+ }
7572
+ }
7573
+ ]
7574
+ },
7575
+ {
7576
+ "kind": "javascript-module",
7577
+ "path": "src/components/foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management.ts",
7578
+ "declarations": [
7579
+ {
7580
+ "kind": "class",
7581
+ "description": "",
7582
+ "name": "MSTeamsRouteManagement",
7583
+ "superclass": {
7584
+ "name": "GenesisElement",
7585
+ "package": "@genesislcap/web-core"
7586
+ },
7587
+ "tagName": "ms-teams-route-management",
7588
+ "customElement": true
7589
+ }
7590
+ ],
7591
+ "exports": [
7592
+ {
7593
+ "kind": "js",
7594
+ "name": "MSTeamsRouteManagement",
7595
+ "declaration": {
7596
+ "name": "MSTeamsRouteManagement",
7597
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management.ts"
7598
+ }
7599
+ },
7600
+ {
7601
+ "kind": "custom-element-definition",
7602
+ "name": "ms-teams-route-management",
7603
+ "declaration": {
7604
+ "name": "MSTeamsRouteManagement",
7605
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/ms-teams-route-management.ts"
7606
+ }
7607
+ }
7608
+ ]
7609
+ },
7610
+ {
7611
+ "kind": "javascript-module",
7612
+ "path": "src/components/foundation-notification-dashboard/components/routes/tabs/screen-route-management.ts",
7613
+ "declarations": [
7614
+ {
7615
+ "kind": "class",
7616
+ "description": "",
7617
+ "name": "ScreenRouteManagement",
7618
+ "superclass": {
7619
+ "name": "GenesisElement",
7620
+ "package": "@genesislcap/web-core"
7621
+ },
7622
+ "tagName": "screen-route-management",
7623
+ "customElement": true
7624
+ }
7625
+ ],
7626
+ "exports": [
7627
+ {
7628
+ "kind": "js",
7629
+ "name": "ScreenRouteManagement",
7630
+ "declaration": {
7631
+ "name": "ScreenRouteManagement",
7632
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/screen-route-management.ts"
7633
+ }
7634
+ },
7635
+ {
7636
+ "kind": "custom-element-definition",
7637
+ "name": "screen-route-management",
7638
+ "declaration": {
7639
+ "name": "ScreenRouteManagement",
7640
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/screen-route-management.ts"
7641
+ }
7642
+ }
7643
+ ]
7644
+ },
7645
+ {
7646
+ "kind": "javascript-module",
7647
+ "path": "src/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.ts",
7648
+ "declarations": [
7649
+ {
7650
+ "kind": "class",
7651
+ "description": "",
7652
+ "name": "SlackRouteManagement",
7653
+ "superclass": {
7654
+ "name": "GenesisElement",
7655
+ "package": "@genesislcap/web-core"
7656
+ },
7657
+ "tagName": "slack-route-management",
7658
+ "customElement": true
7659
+ }
7660
+ ],
7661
+ "exports": [
7662
+ {
7663
+ "kind": "js",
7664
+ "name": "SlackRouteManagement",
7665
+ "declaration": {
7666
+ "name": "SlackRouteManagement",
7667
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.ts"
7668
+ }
7669
+ },
7670
+ {
7671
+ "kind": "custom-element-definition",
7672
+ "name": "slack-route-management",
7673
+ "declaration": {
7674
+ "name": "SlackRouteManagement",
7675
+ "module": "src/components/foundation-notification-dashboard/components/routes/tabs/slack-route-management.ts"
7676
+ }
7677
+ }
7678
+ ]
7679
+ },
7680
7680
  {
7681
7681
  "kind": "javascript-module",
7682
7682
  "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/template-dialog.template.ts",
@@ -7875,6 +7875,15 @@
7875
7875
  },
7876
7876
  "default": "[]"
7877
7877
  },
7878
+ {
7879
+ "kind": "field",
7880
+ "name": "hydrating",
7881
+ "type": {
7882
+ "text": "boolean"
7883
+ },
7884
+ "privacy": "private",
7885
+ "default": "false"
7886
+ },
7878
7887
  {
7879
7888
  "kind": "field",
7880
7889
  "name": "requiredFields",
@@ -9033,7 +9042,7 @@
9033
9042
  "kind": "field",
9034
9043
  "name": "fields",
9035
9044
  "type": {
9036
- "text": "Array<string>"
9045
+ "text": "Field[]"
9037
9046
  },
9038
9047
  "default": "[]"
9039
9048
  },
@@ -9224,31 +9233,6 @@
9224
9233
  "name": "edit"
9225
9234
  }
9226
9235
  ],
9227
- "attributes": [
9228
- {
9229
- "name": "condition",
9230
- "type": {
9231
- "text": "ConditionBuilderEntity"
9232
- },
9233
- "fieldName": "condition"
9234
- },
9235
- {
9236
- "name": "parameters",
9237
- "type": {
9238
- "text": "Array<ParameterBuilderEntity>"
9239
- },
9240
- "default": "[]",
9241
- "fieldName": "parameters"
9242
- },
9243
- {
9244
- "name": "fields",
9245
- "type": {
9246
- "text": "Array<string>"
9247
- },
9248
- "default": "[]",
9249
- "fieldName": "fields"
9250
- }
9251
- ],
9252
9236
  "superclass": {
9253
9237
  "name": "GenesisElement",
9254
9238
  "package": "@genesislcap/web-core"