@genesislcap/pbc-notify-ui 15.20.1 → 15.20.2-grid-pro-datasource-fix.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.
@@ -479,6 +479,27 @@
479
479
  }
480
480
  ]
481
481
  },
482
+ {
483
+ "kind": "javascript-module",
484
+ "path": "src/styles/scrollbar.styles.ts",
485
+ "declarations": [
486
+ {
487
+ "kind": "variable",
488
+ "name": "scrollbarStyles",
489
+ "default": "css`\n ::-webkit-scrollbar {\n width: calc((var(--base-height-multiplier) + var(--design-unit)) * 1px);\n }\n\n ::-webkit-scrollbar-track {\n background: var(--neutral-layer-1);\n }\n\n ::-webkit-scrollbar-thumb {\n background: var(--neutral-fill-rest);\n }\n`"
490
+ }
491
+ ],
492
+ "exports": [
493
+ {
494
+ "kind": "js",
495
+ "name": "scrollbarStyles",
496
+ "declaration": {
497
+ "name": "scrollbarStyles",
498
+ "module": "src/styles/scrollbar.styles.ts"
499
+ }
500
+ }
501
+ ]
502
+ },
482
503
  {
483
504
  "kind": "javascript-module",
484
505
  "path": "src/utils/eventDetail.ts",
@@ -800,27 +821,6 @@
800
821
  }
801
822
  ]
802
823
  },
803
- {
804
- "kind": "javascript-module",
805
- "path": "src/styles/scrollbar.styles.ts",
806
- "declarations": [
807
- {
808
- "kind": "variable",
809
- "name": "scrollbarStyles",
810
- "default": "css`\n ::-webkit-scrollbar {\n width: calc((var(--base-height-multiplier) + var(--design-unit)) * 1px);\n }\n\n ::-webkit-scrollbar-track {\n background: var(--neutral-layer-1);\n }\n\n ::-webkit-scrollbar-thumb {\n background: var(--neutral-fill-rest);\n }\n`"
811
- }
812
- ],
813
- "exports": [
814
- {
815
- "kind": "js",
816
- "name": "scrollbarStyles",
817
- "declaration": {
818
- "name": "scrollbarStyles",
819
- "module": "src/styles/scrollbar.styles.ts"
820
- }
821
- }
822
- ]
823
- },
824
824
  {
825
825
  "kind": "javascript-module",
826
826
  "path": "src/components/foundation-inbox/inbox.styles.ts",
@@ -2041,19 +2041,54 @@
2041
2041
  },
2042
2042
  {
2043
2043
  "kind": "javascript-module",
2044
- "path": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts",
2044
+ "path": "src/components/foundation-sounds/foundation-sounds-panel.styles.ts",
2045
2045
  "declarations": [
2046
2046
  {
2047
2047
  "kind": "variable",
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
- },
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
2053
  {
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",
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",
2066
+ "declarations": [
2067
+ {
2068
+ "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": [
2088
+ {
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",
2057
2092
  "members": [
2058
2093
  {
2059
2094
  "kind": "field",
@@ -2064,56 +2099,21 @@
2064
2099
  },
2065
2100
  {
2066
2101
  "kind": "field",
2067
- "name": "isAlertSoundEditMode",
2068
- "type": {
2069
- "text": "boolean"
2070
- },
2071
- "description": "True when editing an existing entity (clear should set CLEAR_ALERT_SOUND).",
2072
- "readonly": true
2073
- },
2074
- {
2075
- "kind": "field",
2076
- "name": "alertSoundEntityId",
2077
- "type": {
2078
- "text": "string | null"
2079
- },
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",
2102
+ "name": "volumePercent",
2104
2103
  "type": {
2105
- "text": "string"
2104
+ "text": "number"
2106
2105
  },
2107
- "default": "''"
2106
+ "default": "100",
2107
+ "description": "Global playback volume 0–100. @internal"
2108
2108
  },
2109
2109
  {
2110
2110
  "kind": "field",
2111
- "name": "hasAlertSound",
2111
+ "name": "selectableRules",
2112
2112
  "type": {
2113
- "text": "boolean"
2113
+ "text": "AlertSoundSelectableRule[]"
2114
2114
  },
2115
- "default": "false",
2116
- "description": "True when edit loaded an existing server sound (or user attached one)."
2115
+ "default": "[]",
2116
+ "description": "Notification rules from REQ_NOTIFICATION_RULE. @internal"
2117
2117
  },
2118
2118
  {
2119
2119
  "kind": "field",
@@ -2124,58 +2124,75 @@
2124
2124
  },
2125
2125
  {
2126
2126
  "kind": "field",
2127
- "name": "pendingAlertSoundData",
2127
+ "name": "pendingRuleIndex",
2128
2128
  "type": {
2129
- "text": "string | null"
2129
+ "text": "number | null"
2130
2130
  },
2131
+ "privacy": "private",
2131
2132
  "default": "null"
2132
2133
  },
2133
2134
  {
2134
2135
  "kind": "field",
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)."
2136
+ "name": "player",
2137
+ "privacy": "private",
2138
+ "readonly": true
2141
2139
  },
2142
2140
  {
2143
2141
  "kind": "field",
2144
- "name": "clearAlertSound",
2142
+ "name": "unsubscribePlayer",
2145
2143
  "type": {
2146
- "text": "boolean"
2144
+ "text": "(() => void) | undefined"
2147
2145
  },
2148
- "default": "false"
2146
+ "privacy": "private"
2149
2147
  },
2150
2148
  {
2151
2149
  "kind": "field",
2152
- "name": "testAudio",
2150
+ "name": "ignoreSelectChanges",
2153
2151
  "type": {
2154
- "text": "HTMLAudioElement | null"
2152
+ "text": "boolean"
2155
2153
  },
2156
- "default": "null",
2157
- "description": "In-progress Test playback; not private — mixin return type is exported."
2154
+ "privacy": "private",
2155
+ "default": "false",
2156
+ "description": "Suppresses select change events while options are rebuilt."
2158
2157
  },
2159
2158
  {
2160
2159
  "kind": "method",
2161
- "name": "loadExistingAlertSound",
2160
+ "name": "onMatchModeChange",
2161
+ "return": {
2162
+ "type": {
2163
+ "text": "boolean"
2164
+ }
2165
+ },
2162
2166
  "parameters": [
2163
2167
  {
2164
- "name": "dynamicRuleId",
2168
+ "name": "index",
2165
2169
  "type": {
2166
- "text": "string"
2170
+ "text": "number"
2171
+ }
2172
+ },
2173
+ {
2174
+ "name": "event",
2175
+ "type": {
2176
+ "text": "Event"
2167
2177
  }
2168
2178
  }
2169
2179
  ]
2170
2180
  },
2171
2181
  {
2172
2182
  "kind": "method",
2173
- "name": "openAlertSoundPicker"
2174
- },
2175
- {
2176
- "kind": "method",
2177
- "name": "onAlertSoundSelected",
2183
+ "name": "onPatternInput",
2184
+ "return": {
2185
+ "type": {
2186
+ "text": "boolean"
2187
+ }
2188
+ },
2178
2189
  "parameters": [
2190
+ {
2191
+ "name": "index",
2192
+ "type": {
2193
+ "text": "number"
2194
+ }
2195
+ },
2179
2196
  {
2180
2197
  "name": "event",
2181
2198
  "type": {
@@ -2186,349 +2203,47 @@
2186
2203
  },
2187
2204
  {
2188
2205
  "kind": "method",
2189
- "name": "clearAttachedAlertSound"
2190
- },
2191
- {
2192
- "kind": "method",
2193
- "name": "testAttachedAlertSound"
2194
- },
2195
- {
2196
- "kind": "method",
2197
- "name": "stopTestSound"
2198
- },
2199
- {
2200
- "kind": "method",
2201
- "name": "resetAlertSoundState"
2206
+ "name": "onRuleChange",
2207
+ "return": {
2208
+ "type": {
2209
+ "text": "boolean"
2210
+ }
2211
+ },
2212
+ "parameters": [
2213
+ {
2214
+ "name": "index",
2215
+ "type": {
2216
+ "text": "number"
2217
+ }
2218
+ },
2219
+ {
2220
+ "name": "event",
2221
+ "type": {
2222
+ "text": "Event"
2223
+ }
2224
+ }
2225
+ ]
2202
2226
  },
2203
2227
  {
2204
2228
  "kind": "method",
2205
- "name": "applyAlertSoundToPayload",
2229
+ "name": "openFilePicker",
2206
2230
  "return": {
2207
2231
  "type": {
2208
- "text": "T"
2232
+ "text": "boolean"
2209
2233
  }
2210
2234
  },
2211
2235
  "parameters": [
2212
2236
  {
2213
- "name": "target",
2237
+ "name": "index",
2214
2238
  "type": {
2215
- "text": "T"
2239
+ "text": "number"
2216
2240
  }
2217
2241
  }
2218
- ],
2219
- "description": "Merges pending sound / clear flag onto a create/update DETAILS object."
2242
+ ]
2220
2243
  },
2221
2244
  {
2222
2245
  "kind": "method",
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": [
2228
- {
2229
- "name": "Base",
2230
- "type": {
2231
- "text": "TBase"
2232
- }
2233
- }
2234
- ],
2235
- "privacy": "public"
2236
- }
2237
- ],
2238
- "exports": [
2239
- {
2240
- "kind": "js",
2241
- "name": "alertSoundAttachmentTemplate",
2242
- "declaration": {
2243
- "name": "alertSoundAttachmentTemplate",
2244
- "module": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts"
2245
- }
2246
- },
2247
- {
2248
- "kind": "js",
2249
- "name": "AlertSoundAttachmentMixin",
2250
- "declaration": {
2251
- "name": "AlertSoundAttachmentMixin",
2252
- "module": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts"
2253
- }
2254
- }
2255
- ]
2256
- },
2257
- {
2258
- "kind": "javascript-module",
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",
2275
- "declarations": [
2276
- {
2277
- "kind": "variable",
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"
2281
- }
2282
- ],
2283
- "exports": [
2284
- {
2285
- "kind": "js",
2286
- "name": "FoundationNotificationDashboardStyles",
2287
- "declaration": {
2288
- "name": "FoundationNotificationDashboardStyles",
2289
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.styles.ts"
2290
- }
2291
- }
2292
- ]
2293
- },
2294
- {
2295
- "kind": "javascript-module",
2296
- "path": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts",
2297
- "declarations": [
2298
- {
2299
- "kind": "class",
2300
- "description": "",
2301
- "name": "NotificationDashboardTab",
2302
- "members": [
2303
- {
2304
- "kind": "field",
2305
- "name": "id",
2306
- "type": {
2307
- "text": "string"
2308
- }
2309
- },
2310
- {
2311
- "kind": "field",
2312
- "name": "name",
2313
- "type": {
2314
- "text": "string"
2315
- }
2316
- },
2317
- {
2318
- "kind": "field",
2319
- "name": "component",
2320
- "type": {
2321
- "text": "string"
2322
- }
2323
- },
2324
- {
2325
- "kind": "field",
2326
- "name": "right",
2327
- "type": {
2328
- "text": "string"
2329
- }
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": [
2391
- {
2392
- "kind": "field",
2393
- "name": "auth",
2394
- "type": {
2395
- "text": "Auth"
2396
- }
2397
- },
2398
- {
2399
- "kind": "field",
2400
- "name": "ready",
2401
- "type": {
2402
- "text": "boolean"
2403
- },
2404
- "default": "false"
2405
- },
2406
- {
2407
- "kind": "field",
2408
- "name": "hasPermissions",
2409
- "type": {
2410
- "text": "boolean"
2411
- },
2412
- "default": "true"
2413
- }
2414
- ],
2415
- "superclass": {
2416
- "name": "GenesisElement",
2417
- "package": "@genesislcap/web-core"
2418
- },
2419
- "tagName": "foundation-notification-dashboard",
2420
- "customElement": true
2421
- }
2422
- ],
2423
- "exports": [
2424
- {
2425
- "kind": "js",
2426
- "name": "FoundationNotificationDashboard",
2427
- "declaration": {
2428
- "name": "FoundationNotificationDashboard",
2429
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.ts"
2430
- }
2431
- },
2432
- {
2433
- "kind": "custom-element-definition",
2434
- "name": "foundation-notification-dashboard",
2435
- "declaration": {
2436
- "name": "FoundationNotificationDashboard",
2437
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.ts"
2438
- }
2439
- }
2440
- ]
2441
- },
2442
- {
2443
- "kind": "javascript-module",
2444
- "path": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts",
2445
- "declarations": [
2446
- {
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
- ]
2466
- },
2467
- {
2468
- "kind": "function",
2469
- "name": "isEmpty",
2470
- "parameters": [
2471
- {
2472
- "name": "value"
2473
- }
2474
- ]
2475
- },
2476
- {
2477
- "kind": "class",
2478
- "description": "",
2479
- "name": "DynamicRuleUtils",
2480
- "members": [
2481
- {
2482
- "kind": "field",
2483
- "name": "createEmptyCondition",
2484
- "static": true
2485
- },
2486
- {
2487
- "kind": "field",
2488
- "name": "createAssignment",
2489
- "static": true
2490
- },
2491
- {
2492
- "kind": "field",
2493
- "name": "createTextAssignment",
2494
- "static": true
2495
- },
2496
- {
2497
- "kind": "field",
2498
- "name": "getAssignmentValue",
2499
- "static": true
2500
- },
2501
- {
2502
- "kind": "field",
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
- }
2514
- },
2515
- "parameters": [
2516
- {
2517
- "name": "conditions",
2518
- "type": {
2519
- "text": "ConditionNode[]"
2520
- }
2521
- },
2522
- {
2523
- "name": "parameters",
2524
- "optional": true
2525
- }
2526
- ]
2527
- },
2528
- {
2529
- "kind": "method",
2530
- "name": "hasMultiValueCondition",
2531
- "static": true,
2246
+ "name": "onFileSelected",
2532
2247
  "return": {
2533
2248
  "type": {
2534
2249
  "text": "boolean"
@@ -2536,17 +2251,16 @@
2536
2251
  },
2537
2252
  "parameters": [
2538
2253
  {
2539
- "name": "conditions",
2254
+ "name": "event",
2540
2255
  "type": {
2541
- "text": "ConditionNode[]"
2256
+ "text": "Event"
2542
2257
  }
2543
2258
  }
2544
2259
  ]
2545
2260
  },
2546
2261
  {
2547
2262
  "kind": "method",
2548
- "name": "hasOrJoin",
2549
- "static": true,
2263
+ "name": "clearSound",
2550
2264
  "return": {
2551
2265
  "type": {
2552
2266
  "text": "boolean"
@@ -2554,17 +2268,16 @@
2554
2268
  },
2555
2269
  "parameters": [
2556
2270
  {
2557
- "name": "conditions",
2271
+ "name": "index",
2558
2272
  "type": {
2559
- "text": "ConditionNode[]"
2273
+ "text": "number"
2560
2274
  }
2561
2275
  }
2562
2276
  ]
2563
2277
  },
2564
2278
  {
2565
2279
  "kind": "method",
2566
- "name": "hasGroup",
2567
- "static": true,
2280
+ "name": "testSound",
2568
2281
  "return": {
2569
2282
  "type": {
2570
2283
  "text": "boolean"
@@ -2572,17 +2285,16 @@
2572
2285
  },
2573
2286
  "parameters": [
2574
2287
  {
2575
- "name": "conditions",
2288
+ "name": "index",
2576
2289
  "type": {
2577
- "text": "ConditionNode[]"
2290
+ "text": "number"
2578
2291
  }
2579
2292
  }
2580
2293
  ]
2581
2294
  },
2582
2295
  {
2583
2296
  "kind": "method",
2584
- "name": "hasUnsupportedOperator",
2585
- "static": true,
2297
+ "name": "toggleRuleMute",
2586
2298
  "return": {
2587
2299
  "type": {
2588
2300
  "text": "boolean"
@@ -2590,351 +2302,244 @@
2590
2302
  },
2591
2303
  "parameters": [
2592
2304
  {
2593
- "name": "conditions",
2594
- "type": {
2595
- "text": "ConditionNode[]"
2596
- }
2597
- }
2598
- ]
2599
- },
2600
- {
2601
- "kind": "method",
2602
- "name": "flattenConditions",
2603
- "static": true,
2604
- "return": {
2605
- "type": {
2606
- "text": "ConditionBuilderEntity[]"
2607
- }
2608
- },
2609
- "parameters": [
2610
- {
2611
- "name": "conditions",
2305
+ "name": "index",
2612
2306
  "type": {
2613
- "text": "ConditionNode[]"
2307
+ "text": "number"
2614
2308
  }
2615
2309
  }
2616
2310
  ]
2617
2311
  },
2618
2312
  {
2619
2313
  "kind": "method",
2620
- "name": "resolveLeftValues",
2621
- "static": true,
2314
+ "name": "onVolumeChange",
2622
2315
  "return": {
2623
2316
  "type": {
2624
- "text": "ConditionNode[]"
2317
+ "text": "boolean"
2625
2318
  }
2626
2319
  },
2627
2320
  "parameters": [
2628
2321
  {
2629
- "name": "conditions",
2630
- "type": {
2631
- "text": "ConditionNode[]"
2632
- }
2633
- },
2634
- {
2635
- "name": "fields",
2322
+ "name": "event",
2636
2323
  "type": {
2637
- "text": "any[]"
2324
+ "text": "Event"
2638
2325
  }
2639
2326
  }
2640
2327
  ]
2641
2328
  },
2642
2329
  {
2643
- "kind": "field",
2644
- "name": "createEmptyGroup",
2645
- "static": true
2330
+ "kind": "method",
2331
+ "name": "toggleMute",
2332
+ "return": {
2333
+ "type": {
2334
+ "text": "boolean"
2335
+ }
2336
+ }
2646
2337
  },
2647
2338
  {
2648
2339
  "kind": "method",
2649
- "name": "buildRawExpression",
2650
- "static": true,
2340
+ "name": "addRule",
2651
2341
  "return": {
2652
2342
  "type": {
2653
- "text": "string"
2654
- }
2655
- },
2656
- "parameters": [
2657
- {
2658
- "name": "conditions",
2659
- "type": {
2660
- "text": "ConditionNode[]"
2661
- }
2343
+ "text": "boolean"
2662
2344
  }
2663
- ]
2345
+ }
2664
2346
  },
2665
2347
  {
2666
2348
  "kind": "method",
2667
- "name": "parseRawExpression",
2668
- "static": true,
2349
+ "name": "removeRule",
2669
2350
  "return": {
2670
2351
  "type": {
2671
- "text": "ConditionNode[] | null"
2352
+ "text": "boolean"
2672
2353
  }
2673
2354
  },
2674
2355
  "parameters": [
2675
2356
  {
2676
- "name": "rawExpression",
2357
+ "name": "index",
2677
2358
  "type": {
2678
- "text": "string"
2359
+ "text": "number"
2679
2360
  }
2680
2361
  }
2681
2362
  ]
2682
- }
2683
- ]
2684
- },
2685
- {
2686
- "kind": "class",
2687
- "description": "",
2688
- "name": "TemplateUtils",
2689
- "members": [
2690
- {
2691
- "kind": "field",
2692
- "name": "createEmptyParameter",
2693
- "static": true
2694
2363
  },
2695
2364
  {
2696
2365
  "kind": "method",
2697
- "name": "getParameters",
2698
- "static": true,
2699
- "parameters": [
2700
- {
2701
- "name": "parameters"
2366
+ "name": "reloadRules",
2367
+ "return": {
2368
+ "type": {
2369
+ "text": "Promise<void>"
2702
2370
  }
2703
- ]
2371
+ },
2372
+ "description": "Reloads the notification-rule picker (e.g. when the Sounds tab is opened)."
2704
2373
  },
2705
2374
  {
2706
2375
  "kind": "method",
2707
- "name": "buildRightValue",
2376
+ "name": "loadRules",
2708
2377
  "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
2378
+ "return": {
2379
+ "type": {
2380
+ "text": "Promise<void>"
2723
2381
  }
2724
- ]
2382
+ }
2725
2383
  },
2726
2384
  {
2727
2385
  "kind": "method",
2728
- "name": "getConditions",
2729
- "static": true,
2730
- "parameters": [
2731
- {
2732
- "name": "conditions"
2733
- },
2734
- {
2735
- "name": "parameters",
2736
- "optional": true
2386
+ "name": "settleRuleOptions",
2387
+ "privacy": "private",
2388
+ "return": {
2389
+ "type": {
2390
+ "text": "Promise<void>"
2737
2391
  }
2738
- ]
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."
2739
2394
  },
2740
2395
  {
2741
2396
  "kind": "method",
2742
- "name": "createParameterDetails",
2743
- "static": true,
2744
- "parameters": [
2745
- {
2746
- "name": "parameters"
2397
+ "name": "applyRuleSelectValues",
2398
+ "privacy": "private",
2399
+ "return": {
2400
+ "type": {
2401
+ "text": "void"
2747
2402
  }
2748
- ]
2749
- }
2750
- ]
2751
- },
2752
- {
2753
- "kind": "class",
2754
- "description": "",
2755
- "name": "RuleUtils",
2756
- "members": [
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
+ },
2757
2406
  {
2758
2407
  "kind": "method",
2759
- "name": "buildRightValue",
2408
+ "name": "mapRules",
2760
2409
  "privacy": "private",
2761
- "static": true,
2410
+ "return": {
2411
+ "type": {
2412
+ "text": "AlertSoundSelectableRule[]"
2413
+ }
2414
+ },
2762
2415
  "parameters": [
2763
2416
  {
2764
- "name": "logicalOperator",
2417
+ "name": "ruleList",
2765
2418
  "type": {
2766
- "text": "LogicalOperator"
2419
+ "text": "NamedRuleRow[]"
2767
2420
  }
2768
- },
2769
- {
2770
- "name": "condition"
2771
2421
  }
2772
2422
  ]
2773
2423
  },
2774
2424
  {
2775
2425
  "kind": "method",
2776
- "name": "getConditions",
2777
- "static": true,
2426
+ "name": "ruleMatchId",
2427
+ "privacy": "private",
2428
+ "return": {
2429
+ "type": {
2430
+ "text": "string"
2431
+ }
2432
+ },
2778
2433
  "parameters": [
2779
2434
  {
2780
- "name": "conditions"
2435
+ "name": "rule",
2436
+ "type": {
2437
+ "text": "NamedRuleRow | undefined"
2438
+ }
2781
2439
  }
2782
2440
  ]
2783
- }
2784
- ]
2785
- },
2786
- {
2787
- "kind": "function",
2788
- "name": "showNotificationError",
2789
- "parameters": [
2441
+ },
2790
2442
  {
2791
- "name": "error"
2443
+ "kind": "method",
2444
+ "name": "syncSoundState",
2445
+ "privacy": "private"
2792
2446
  }
2793
- ]
2447
+ ],
2448
+ "superclass": {
2449
+ "name": "GenesisElement",
2450
+ "package": "@genesislcap/web-core"
2451
+ },
2452
+ "tagName": "foundation-sounds-panel",
2453
+ "customElement": true
2794
2454
  }
2795
2455
  ],
2796
2456
  "exports": [
2797
2457
  {
2798
2458
  "kind": "js",
2799
- "name": "UUIDGenerator",
2800
- "declaration": {
2801
- "name": "UUIDGenerator",
2802
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2803
- }
2804
- },
2805
- {
2806
- "kind": "js",
2807
- "name": "isEmpty",
2808
- "declaration": {
2809
- "name": "isEmpty",
2810
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2811
- }
2812
- },
2813
- {
2814
- "kind": "js",
2815
- "name": "DynamicRuleUtils",
2816
- "declaration": {
2817
- "name": "DynamicRuleUtils",
2818
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2819
- }
2820
- },
2821
- {
2822
- "kind": "js",
2823
- "name": "TemplateUtils",
2824
- "declaration": {
2825
- "name": "TemplateUtils",
2826
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2827
- }
2828
- },
2829
- {
2830
- "kind": "js",
2831
- "name": "RuleUtils",
2459
+ "name": "FoundationSoundsPanel",
2832
2460
  "declaration": {
2833
- "name": "RuleUtils",
2834
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2461
+ "name": "FoundationSoundsPanel",
2462
+ "module": "src/components/foundation-sounds/foundation-sounds-panel.ts"
2835
2463
  }
2836
2464
  },
2837
2465
  {
2838
- "kind": "js",
2839
- "name": "showNotificationError",
2840
- "declaration": {
2841
- "name": "showNotificationError",
2842
- "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
2843
- }
2844
- }
2845
- ]
2846
- },
2847
- {
2848
- "kind": "javascript-module",
2849
- "path": "src/components/foundation-sounds/foundation-sounds-panel.styles.ts",
2850
- "declarations": [
2851
- {
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`"
2855
- }
2856
- ],
2857
- "exports": [
2858
- {
2859
- "kind": "js",
2860
- "name": "FoundationSoundsPanelStyles",
2466
+ "kind": "custom-element-definition",
2467
+ "name": "foundation-sounds-panel",
2861
2468
  "declaration": {
2862
- "name": "FoundationSoundsPanelStyles",
2863
- "module": "src/components/foundation-sounds/foundation-sounds-panel.styles.ts"
2469
+ "name": "FoundationSoundsPanel",
2470
+ "module": "src/components/foundation-sounds/foundation-sounds-panel.ts"
2864
2471
  }
2865
2472
  }
2866
2473
  ]
2867
2474
  },
2868
2475
  {
2869
2476
  "kind": "javascript-module",
2870
- "path": "src/components/foundation-sounds/foundation-sounds-panel.template.ts",
2477
+ "path": "src/components/foundation-sounds/foundation-sounds.styles.ts",
2871
2478
  "declarations": [
2872
2479
  {
2873
- "kind": "variable",
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`"
2480
+ "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."
2876
2484
  }
2877
2485
  ],
2878
2486
  "exports": [
2879
2487
  {
2880
2488
  "kind": "js",
2881
- "name": "FoundationSoundsPanelTemplate",
2489
+ "name": "FoundationSoundsStyles",
2882
2490
  "declaration": {
2883
- "name": "FoundationSoundsPanelTemplate",
2884
- "module": "src/components/foundation-sounds/foundation-sounds-panel.template.ts"
2491
+ "name": "FoundationSoundsStyles",
2492
+ "module": "src/components/foundation-sounds/foundation-sounds.styles.ts"
2885
2493
  }
2886
2494
  }
2887
2495
  ]
2888
2496
  },
2889
2497
  {
2890
2498
  "kind": "javascript-module",
2891
- "path": "src/components/foundation-sounds/foundation-sounds-panel.ts",
2499
+ "path": "src/components/foundation-sounds/foundation-sounds.ts",
2892
2500
  "declarations": [
2893
2501
  {
2894
2502
  "kind": "class",
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",
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",
2897
2505
  "members": [
2898
2506
  {
2899
2507
  "kind": "field",
2900
- "name": "ruleService",
2508
+ "name": "connect",
2901
2509
  "type": {
2902
- "text": "RuleService"
2510
+ "text": "Connect"
2903
2511
  }
2904
2512
  },
2905
2513
  {
2906
2514
  "kind": "field",
2907
- "name": "volumePercent",
2515
+ "name": "inboxService",
2908
2516
  "type": {
2909
- "text": "number"
2910
- },
2911
- "default": "100",
2912
- "description": "Global playback volume 0–100. @internal"
2517
+ "text": "FoundationInboxService"
2518
+ }
2913
2519
  },
2914
2520
  {
2915
2521
  "kind": "field",
2916
- "name": "selectableRules",
2522
+ "name": "ruleService",
2917
2523
  "type": {
2918
- "text": "AlertSoundSelectableRule[]"
2919
- },
2920
- "default": "[]",
2921
- "description": "Notification rules from REQ_NOTIFICATION_RULE. @internal"
2524
+ "text": "RuleService"
2525
+ }
2922
2526
  },
2923
2527
  {
2924
2528
  "kind": "field",
2925
- "name": "fileInput",
2529
+ "name": "soundEnabled",
2926
2530
  "type": {
2927
- "text": "HTMLInputElement"
2928
- }
2531
+ "text": "boolean"
2532
+ },
2533
+ "default": "true",
2534
+ "description": "When false, new audible alerts are tracked but do not play."
2929
2535
  },
2930
2536
  {
2931
2537
  "kind": "field",
2932
- "name": "pendingRuleIndex",
2538
+ "name": "connectionSub",
2933
2539
  "type": {
2934
- "text": "number | null"
2540
+ "text": "Subscription | undefined"
2935
2541
  },
2936
- "privacy": "private",
2937
- "default": "null"
2542
+ "privacy": "private"
2938
2543
  },
2939
2544
  {
2940
2545
  "kind": "field",
@@ -2944,532 +2549,927 @@
2944
2549
  },
2945
2550
  {
2946
2551
  "kind": "field",
2947
- "name": "unsubscribePlayer",
2948
- "type": {
2949
- "text": "(() => void) | undefined"
2950
- },
2951
- "privacy": "private"
2552
+ "name": "knownAlertIds",
2553
+ "privacy": "private",
2554
+ "default": "new Set<string>()"
2952
2555
  },
2953
2556
  {
2954
2557
  "kind": "field",
2955
- "name": "ignoreSelectChanges",
2956
- "type": {
2957
- "text": "boolean"
2958
- },
2558
+ "name": "serverSoundFetches",
2959
2559
  "privacy": "private",
2960
- "default": "false",
2961
- "description": "Suppresses select change events while options are rebuilt."
2560
+ "readonly": true,
2561
+ "default": "new Map<string, Promise<boolean>>()",
2562
+ "description": "In-flight server sound fetches keyed by DYNAMIC_RULE_ID."
2962
2563
  },
2963
2564
  {
2964
2565
  "kind": "method",
2965
- "name": "onMatchModeChange",
2566
+ "name": "subscribeToAlerts",
2567
+ "privacy": "private",
2966
2568
  "return": {
2967
2569
  "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
- }
2570
+ "text": "void"
2983
2571
  }
2984
- ]
2572
+ }
2573
+ },
2574
+ {
2575
+ "kind": "field",
2576
+ "name": "subscriptionHandler",
2577
+ "privacy": "private"
2985
2578
  },
2986
2579
  {
2987
2580
  "kind": "method",
2988
- "name": "onPatternInput",
2581
+ "name": "playForNewAlerts",
2582
+ "privacy": "private",
2989
2583
  "return": {
2990
2584
  "type": {
2991
- "text": "boolean"
2585
+ "text": "Promise<void>"
2992
2586
  }
2993
2587
  },
2994
2588
  "parameters": [
2995
2589
  {
2996
- "name": "index",
2997
- "type": {
2998
- "text": "number"
2999
- }
3000
- },
3001
- {
3002
- "name": "event",
2590
+ "name": "rows",
3003
2591
  "type": {
3004
- "text": "Event"
2592
+ "text": "Array<{\n id: string;\n message?: string;\n header?: string;\n dynamicRuleId?: string;\n }>"
3005
2593
  }
3006
2594
  }
3007
2595
  ]
3008
2596
  },
3009
2597
  {
3010
2598
  "kind": "method",
3011
- "name": "onRuleChange",
2599
+ "name": "tryPlayServerSound",
2600
+ "privacy": "private",
3012
2601
  "return": {
3013
2602
  "type": {
3014
- "text": "boolean"
2603
+ "text": "Promise<boolean>"
3015
2604
  }
3016
2605
  },
3017
2606
  "parameters": [
3018
2607
  {
3019
- "name": "index",
3020
- "type": {
3021
- "text": "number"
3022
- }
3023
- },
3024
- {
3025
- "name": "event",
2608
+ "name": "dynamicRuleId",
3026
2609
  "type": {
3027
- "text": "Event"
2610
+ "text": "string"
3028
2611
  }
3029
2612
  }
3030
2613
  ]
3031
2614
  },
3032
2615
  {
3033
2616
  "kind": "method",
3034
- "name": "openFilePicker",
2617
+ "name": "fetchAndCacheServerSound",
2618
+ "privacy": "private",
3035
2619
  "return": {
3036
2620
  "type": {
3037
- "text": "boolean"
2621
+ "text": "Promise<boolean>"
3038
2622
  }
3039
2623
  },
3040
2624
  "parameters": [
3041
2625
  {
3042
- "name": "index",
2626
+ "name": "dynamicRuleId",
3043
2627
  "type": {
3044
- "text": "number"
2628
+ "text": "string"
3045
2629
  }
3046
2630
  }
3047
2631
  ]
2632
+ }
2633
+ ],
2634
+ "attributes": [
2635
+ {
2636
+ "name": "sound-enabled",
2637
+ "type": {
2638
+ "text": "boolean"
2639
+ },
2640
+ "default": "true",
2641
+ "description": "When false, new audible alerts are tracked but do not play.",
2642
+ "fieldName": "soundEnabled"
2643
+ }
2644
+ ],
2645
+ "superclass": {
2646
+ "name": "GenesisElement",
2647
+ "package": "@genesislcap/web-core"
2648
+ },
2649
+ "tagName": "foundation-sounds",
2650
+ "customElement": true
2651
+ }
2652
+ ],
2653
+ "exports": [
2654
+ {
2655
+ "kind": "js",
2656
+ "name": "FoundationSounds",
2657
+ "declaration": {
2658
+ "name": "FoundationSounds",
2659
+ "module": "src/components/foundation-sounds/foundation-sounds.ts"
2660
+ }
2661
+ },
2662
+ {
2663
+ "kind": "custom-element-definition",
2664
+ "name": "foundation-sounds",
2665
+ "declaration": {
2666
+ "name": "FoundationSounds",
2667
+ "module": "src/components/foundation-sounds/foundation-sounds.ts"
2668
+ }
2669
+ }
2670
+ ]
2671
+ },
2672
+ {
2673
+ "kind": "javascript-module",
2674
+ "path": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts",
2675
+ "declarations": [
2676
+ {
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"
2682
+ },
2683
+ {
2684
+ "kind": "mixin",
2685
+ "description": "Mixin: pick / test / clear / load server sound + apply fields to submit payload.\n\nSubclasses must provide ruleService, isAlertSoundEditMode,\nalertSoundEntityId, and alertSoundCacheSyncMode.",
2686
+ "name": "AlertSoundAttachmentMixin",
2687
+ "members": [
2688
+ {
2689
+ "kind": "field",
2690
+ "name": "ruleService",
2691
+ "type": {
2692
+ "text": "RuleService"
2693
+ }
2694
+ },
2695
+ {
2696
+ "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
2703
+ },
2704
+ {
2705
+ "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
2712
+ },
2713
+ {
2714
+ "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
2721
+ },
2722
+ {
2723
+ "kind": "field",
2724
+ "name": "alertSoundFileName",
2725
+ "type": {
2726
+ "text": "string"
2727
+ },
2728
+ "default": "''",
2729
+ "description": "Display name of the attached / pending alert sound file."
2730
+ },
2731
+ {
2732
+ "kind": "field",
2733
+ "name": "alertSoundMimeType",
2734
+ "type": {
2735
+ "text": "string"
2736
+ },
2737
+ "default": "''"
2738
+ },
2739
+ {
2740
+ "kind": "field",
2741
+ "name": "hasAlertSound",
2742
+ "type": {
2743
+ "text": "boolean"
2744
+ },
2745
+ "default": "false",
2746
+ "description": "True when edit loaded an existing server sound (or user attached one)."
2747
+ },
2748
+ {
2749
+ "kind": "field",
2750
+ "name": "fileInput",
2751
+ "type": {
2752
+ "text": "HTMLInputElement"
2753
+ }
3048
2754
  },
3049
2755
  {
3050
- "kind": "method",
3051
- "name": "onFileSelected",
3052
- "return": {
3053
- "type": {
3054
- "text": "boolean"
3055
- }
2756
+ "kind": "field",
2757
+ "name": "pendingAlertSoundData",
2758
+ "type": {
2759
+ "text": "string | null"
3056
2760
  },
3057
- "parameters": [
3058
- {
3059
- "name": "event",
3060
- "type": {
3061
- "text": "Event"
3062
- }
3063
- }
3064
- ]
2761
+ "default": "null"
3065
2762
  },
3066
2763
  {
3067
- "kind": "method",
3068
- "name": "clearSound",
3069
- "return": {
3070
- "type": {
3071
- "text": "boolean"
3072
- }
2764
+ "kind": "field",
2765
+ "name": "alertSoundDirty",
2766
+ "type": {
2767
+ "text": "boolean"
3073
2768
  },
3074
- "parameters": [
3075
- {
3076
- "name": "index",
3077
- "type": {
3078
- "text": "number"
3079
- }
3080
- }
3081
- ]
2769
+ "default": "false",
2770
+ "description": "True when the user picked a new file this session (needs upload)."
3082
2771
  },
3083
2772
  {
3084
- "kind": "method",
3085
- "name": "testSound",
3086
- "return": {
3087
- "type": {
3088
- "text": "boolean"
3089
- }
2773
+ "kind": "field",
2774
+ "name": "clearAlertSound",
2775
+ "type": {
2776
+ "text": "boolean"
3090
2777
  },
3091
- "parameters": [
3092
- {
3093
- "name": "index",
3094
- "type": {
3095
- "text": "number"
3096
- }
3097
- }
3098
- ]
2778
+ "default": "false"
3099
2779
  },
3100
2780
  {
3101
- "kind": "method",
3102
- "name": "toggleRuleMute",
3103
- "return": {
3104
- "type": {
3105
- "text": "boolean"
3106
- }
2781
+ "kind": "field",
2782
+ "name": "testAudio",
2783
+ "type": {
2784
+ "text": "HTMLAudioElement | null"
3107
2785
  },
3108
- "parameters": [
3109
- {
3110
- "name": "index",
3111
- "type": {
3112
- "text": "number"
3113
- }
3114
- }
3115
- ]
2786
+ "default": "null",
2787
+ "description": "In-progress Test playback; not private — mixin return type is exported."
3116
2788
  },
3117
2789
  {
3118
2790
  "kind": "method",
3119
- "name": "onVolumeChange",
3120
- "return": {
3121
- "type": {
3122
- "text": "boolean"
3123
- }
3124
- },
2791
+ "name": "loadExistingAlertSound",
3125
2792
  "parameters": [
3126
2793
  {
3127
- "name": "event",
2794
+ "name": "dynamicRuleId",
3128
2795
  "type": {
3129
- "text": "Event"
2796
+ "text": "string"
3130
2797
  }
3131
2798
  }
3132
2799
  ]
3133
2800
  },
3134
2801
  {
3135
2802
  "kind": "method",
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
- }
2803
+ "name": "openAlertSoundPicker"
3151
2804
  },
3152
2805
  {
3153
2806
  "kind": "method",
3154
- "name": "removeRule",
3155
- "return": {
3156
- "type": {
3157
- "text": "boolean"
3158
- }
3159
- },
2807
+ "name": "onAlertSoundSelected",
3160
2808
  "parameters": [
3161
2809
  {
3162
- "name": "index",
2810
+ "name": "event",
3163
2811
  "type": {
3164
- "text": "number"
2812
+ "text": "Event"
3165
2813
  }
3166
2814
  }
3167
2815
  ]
3168
2816
  },
3169
2817
  {
3170
2818
  "kind": "method",
3171
- "name": "reloadRules",
3172
- "return": {
3173
- "type": {
3174
- "text": "Promise<void>"
3175
- }
3176
- },
3177
- "description": "Reloads the notification-rule picker (e.g. when the Sounds tab is opened)."
2819
+ "name": "clearAttachedAlertSound"
3178
2820
  },
3179
2821
  {
3180
2822
  "kind": "method",
3181
- "name": "loadRules",
3182
- "privacy": "private",
3183
- "return": {
3184
- "type": {
3185
- "text": "Promise<void>"
3186
- }
3187
- }
2823
+ "name": "testAttachedAlertSound"
3188
2824
  },
3189
2825
  {
3190
2826
  "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."
2827
+ "name": "stopTestSound"
3199
2828
  },
3200
2829
  {
3201
2830
  "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...\"."
2831
+ "name": "resetAlertSoundState"
3210
2832
  },
3211
2833
  {
3212
2834
  "kind": "method",
3213
- "name": "mapRules",
3214
- "privacy": "private",
2835
+ "name": "applyAlertSoundToPayload",
3215
2836
  "return": {
3216
2837
  "type": {
3217
- "text": "AlertSoundSelectableRule[]"
2838
+ "text": "T"
3218
2839
  }
3219
2840
  },
3220
2841
  "parameters": [
3221
2842
  {
3222
- "name": "ruleList",
2843
+ "name": "target",
3223
2844
  "type": {
3224
- "text": "NamedRuleRow[]"
2845
+ "text": "T"
3225
2846
  }
3226
2847
  }
3227
- ]
2848
+ ],
2849
+ "description": "Merges pending sound / clear flag onto a create/update DETAILS object."
2850
+ },
2851
+ {
2852
+ "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."
2855
+ }
2856
+ ],
2857
+ "parameters": [
2858
+ {
2859
+ "name": "Base",
2860
+ "type": {
2861
+ "text": "TBase"
2862
+ }
2863
+ }
2864
+ ],
2865
+ "privacy": "public"
2866
+ }
2867
+ ],
2868
+ "exports": [
2869
+ {
2870
+ "kind": "js",
2871
+ "name": "alertSoundAttachmentTemplate",
2872
+ "declaration": {
2873
+ "name": "alertSoundAttachmentTemplate",
2874
+ "module": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts"
2875
+ }
2876
+ },
2877
+ {
2878
+ "kind": "js",
2879
+ "name": "AlertSoundAttachmentMixin",
2880
+ "declaration": {
2881
+ "name": "AlertSoundAttachmentMixin",
2882
+ "module": "src/components/foundation-notification-dashboard/alert-sound-attachment.ts"
2883
+ }
2884
+ }
2885
+ ]
2886
+ },
2887
+ {
2888
+ "kind": "javascript-module",
2889
+ "path": "src/components/foundation-notification-dashboard/index.ts",
2890
+ "declarations": [],
2891
+ "exports": [
2892
+ {
2893
+ "kind": "js",
2894
+ "name": "*",
2895
+ "declaration": {
2896
+ "name": "*",
2897
+ "package": "./notification-dashboard"
2898
+ }
2899
+ }
2900
+ ]
2901
+ },
2902
+ {
2903
+ "kind": "javascript-module",
2904
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.styles.ts",
2905
+ "declarations": [
2906
+ {
2907
+ "kind": "variable",
2908
+ "name": "FoundationNotificationDashboardStyles",
2909
+ "default": "css`\n .notification-dashboard,\n rapid-tabs,\n rapid-tab-panel {\n height: 100%;\n }\n\n .no-permissions {\n font-family: var(--body-font);\n color: var(--neutral-foreground-rest);\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n`",
2910
+ "privacy": "public"
2911
+ }
2912
+ ],
2913
+ "exports": [
2914
+ {
2915
+ "kind": "js",
2916
+ "name": "FoundationNotificationDashboardStyles",
2917
+ "declaration": {
2918
+ "name": "FoundationNotificationDashboardStyles",
2919
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.styles.ts"
2920
+ }
2921
+ }
2922
+ ]
2923
+ },
2924
+ {
2925
+ "kind": "javascript-module",
2926
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts",
2927
+ "declarations": [
2928
+ {
2929
+ "kind": "class",
2930
+ "description": "",
2931
+ "name": "NotificationDashboardTab",
2932
+ "members": [
2933
+ {
2934
+ "kind": "field",
2935
+ "name": "id",
2936
+ "type": {
2937
+ "text": "string"
2938
+ }
2939
+ },
2940
+ {
2941
+ "kind": "field",
2942
+ "name": "name",
2943
+ "type": {
2944
+ "text": "string"
2945
+ }
3228
2946
  },
3229
2947
  {
3230
- "kind": "method",
3231
- "name": "ruleMatchId",
3232
- "privacy": "private",
3233
- "return": {
3234
- "type": {
3235
- "text": "string"
3236
- }
3237
- },
3238
- "parameters": [
3239
- {
3240
- "name": "rule",
3241
- "type": {
3242
- "text": "NamedRuleRow | undefined"
3243
- }
3244
- }
3245
- ]
2948
+ "kind": "field",
2949
+ "name": "component",
2950
+ "type": {
2951
+ "text": "string"
2952
+ }
3246
2953
  },
3247
2954
  {
3248
- "kind": "method",
3249
- "name": "syncSoundState",
3250
- "privacy": "private"
2955
+ "kind": "field",
2956
+ "name": "right",
2957
+ "type": {
2958
+ "text": "string"
2959
+ }
3251
2960
  }
3252
- ],
3253
- "superclass": {
3254
- "name": "GenesisElement",
3255
- "package": "@genesislcap/web-core"
2961
+ ]
2962
+ },
2963
+ {
2964
+ "kind": "variable",
2965
+ "name": "NOTIFICATION_DASHBOARD_TABS",
2966
+ "type": {
2967
+ "text": "NotificationDashboardTab[]"
3256
2968
  },
3257
- "tagName": "foundation-sounds-panel",
3258
- "customElement": true
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]"
3259
2970
  }
3260
2971
  ],
3261
2972
  "exports": [
3262
2973
  {
3263
2974
  "kind": "js",
3264
- "name": "FoundationSoundsPanel",
2975
+ "name": "NotificationDashboardTab",
3265
2976
  "declaration": {
3266
- "name": "FoundationSoundsPanel",
3267
- "module": "src/components/foundation-sounds/foundation-sounds-panel.ts"
2977
+ "name": "NotificationDashboardTab",
2978
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts"
3268
2979
  }
3269
2980
  },
3270
2981
  {
3271
- "kind": "custom-element-definition",
3272
- "name": "foundation-sounds-panel",
2982
+ "kind": "js",
2983
+ "name": "NOTIFICATION_DASHBOARD_TABS",
3273
2984
  "declaration": {
3274
- "name": "FoundationSoundsPanel",
3275
- "module": "src/components/foundation-sounds/foundation-sounds-panel.ts"
2985
+ "name": "NOTIFICATION_DASHBOARD_TABS",
2986
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.tabs.ts"
3276
2987
  }
3277
2988
  }
3278
2989
  ]
3279
2990
  },
3280
2991
  {
3281
2992
  "kind": "javascript-module",
3282
- "path": "src/components/foundation-sounds/foundation-sounds.styles.ts",
2993
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.template.ts",
3283
2994
  "declarations": [
3284
2995
  {
3285
2996
  "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."
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`"
3289
2999
  }
3290
3000
  ],
3291
3001
  "exports": [
3292
3002
  {
3293
3003
  "kind": "js",
3294
- "name": "FoundationSoundsStyles",
3004
+ "name": "FoundationNotificationDashboardTemplate",
3295
3005
  "declaration": {
3296
- "name": "FoundationSoundsStyles",
3297
- "module": "src/components/foundation-sounds/foundation-sounds.styles.ts"
3006
+ "name": "FoundationNotificationDashboardTemplate",
3007
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.template.ts"
3298
3008
  }
3299
3009
  }
3300
3010
  ]
3301
3011
  },
3302
3012
  {
3303
3013
  "kind": "javascript-module",
3304
- "path": "src/components/foundation-sounds/foundation-sounds.ts",
3014
+ "path": "src/components/foundation-notification-dashboard/notification-dashboard.ts",
3305
3015
  "declarations": [
3306
3016
  {
3307
3017
  "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",
3018
+ "description": "",
3019
+ "name": "FoundationNotificationDashboard",
3310
3020
  "members": [
3311
3021
  {
3312
3022
  "kind": "field",
3313
- "name": "connect",
3023
+ "name": "auth",
3314
3024
  "type": {
3315
- "text": "Connect"
3025
+ "text": "Auth"
3316
3026
  }
3317
3027
  },
3318
3028
  {
3319
3029
  "kind": "field",
3320
- "name": "inboxService",
3030
+ "name": "ready",
3321
3031
  "type": {
3322
- "text": "FoundationInboxService"
3323
- }
3032
+ "text": "boolean"
3033
+ },
3034
+ "default": "false"
3324
3035
  },
3325
3036
  {
3326
3037
  "kind": "field",
3327
- "name": "ruleService",
3038
+ "name": "hasPermissions",
3328
3039
  "type": {
3329
- "text": "RuleService"
3330
- }
3331
- },
3040
+ "text": "boolean"
3041
+ },
3042
+ "default": "true"
3043
+ }
3044
+ ],
3045
+ "superclass": {
3046
+ "name": "GenesisElement",
3047
+ "package": "@genesislcap/web-core"
3048
+ },
3049
+ "tagName": "foundation-notification-dashboard",
3050
+ "customElement": true
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": [
3332
3081
  {
3333
3082
  "kind": "field",
3334
- "name": "soundEnabled",
3083
+ "name": "uuid",
3335
3084
  "type": {
3336
- "text": "boolean"
3085
+ "text": "UUID"
3337
3086
  },
3338
- "default": "true",
3339
- "description": "When false, new audible alerts are tracked but do not play."
3087
+ "privacy": "private",
3088
+ "static": true
3340
3089
  },
3341
3090
  {
3342
3091
  "kind": "field",
3343
- "name": "connectionSub",
3344
- "type": {
3345
- "text": "Subscription | undefined"
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": [
3111
+ {
3112
+ "kind": "field",
3113
+ "name": "createEmptyCondition",
3114
+ "static": true
3115
+ },
3116
+ {
3117
+ "kind": "field",
3118
+ "name": "createAssignment",
3119
+ "static": true
3120
+ },
3121
+ {
3122
+ "kind": "field",
3123
+ "name": "createTextAssignment",
3124
+ "static": true
3125
+ },
3126
+ {
3127
+ "kind": "field",
3128
+ "name": "getAssignmentValue",
3129
+ "static": true
3130
+ },
3131
+ {
3132
+ "kind": "field",
3133
+ "name": "getAssignmentText",
3134
+ "static": true
3135
+ },
3136
+ {
3137
+ "kind": "method",
3138
+ "name": "createConditions",
3139
+ "static": true,
3140
+ "return": {
3141
+ "type": {
3142
+ "text": "any"
3143
+ }
3144
+ },
3145
+ "parameters": [
3146
+ {
3147
+ "name": "conditions",
3148
+ "type": {
3149
+ "text": "ConditionNode[]"
3150
+ }
3151
+ },
3152
+ {
3153
+ "name": "parameters",
3154
+ "optional": true
3155
+ }
3156
+ ]
3157
+ },
3158
+ {
3159
+ "kind": "method",
3160
+ "name": "hasMultiValueCondition",
3161
+ "static": true,
3162
+ "return": {
3163
+ "type": {
3164
+ "text": "boolean"
3165
+ }
3166
+ },
3167
+ "parameters": [
3168
+ {
3169
+ "name": "conditions",
3170
+ "type": {
3171
+ "text": "ConditionNode[]"
3172
+ }
3173
+ }
3174
+ ]
3175
+ },
3176
+ {
3177
+ "kind": "method",
3178
+ "name": "hasOrJoin",
3179
+ "static": true,
3180
+ "return": {
3181
+ "type": {
3182
+ "text": "boolean"
3183
+ }
3184
+ },
3185
+ "parameters": [
3186
+ {
3187
+ "name": "conditions",
3188
+ "type": {
3189
+ "text": "ConditionNode[]"
3190
+ }
3191
+ }
3192
+ ]
3193
+ },
3194
+ {
3195
+ "kind": "method",
3196
+ "name": "hasGroup",
3197
+ "static": true,
3198
+ "return": {
3199
+ "type": {
3200
+ "text": "boolean"
3201
+ }
3346
3202
  },
3347
- "privacy": "private"
3348
- },
3349
- {
3350
- "kind": "field",
3351
- "name": "player",
3352
- "privacy": "private",
3353
- "readonly": true
3203
+ "parameters": [
3204
+ {
3205
+ "name": "conditions",
3206
+ "type": {
3207
+ "text": "ConditionNode[]"
3208
+ }
3209
+ }
3210
+ ]
3354
3211
  },
3355
3212
  {
3356
- "kind": "field",
3357
- "name": "knownAlertIds",
3358
- "privacy": "private",
3359
- "default": "new Set<string>()"
3213
+ "kind": "method",
3214
+ "name": "hasUnsupportedOperator",
3215
+ "static": true,
3216
+ "return": {
3217
+ "type": {
3218
+ "text": "boolean"
3219
+ }
3220
+ },
3221
+ "parameters": [
3222
+ {
3223
+ "name": "conditions",
3224
+ "type": {
3225
+ "text": "ConditionNode[]"
3226
+ }
3227
+ }
3228
+ ]
3360
3229
  },
3361
3230
  {
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."
3231
+ "kind": "method",
3232
+ "name": "flattenConditions",
3233
+ "static": true,
3234
+ "return": {
3235
+ "type": {
3236
+ "text": "ConditionBuilderEntity[]"
3237
+ }
3238
+ },
3239
+ "parameters": [
3240
+ {
3241
+ "name": "conditions",
3242
+ "type": {
3243
+ "text": "ConditionNode[]"
3244
+ }
3245
+ }
3246
+ ]
3368
3247
  },
3369
3248
  {
3370
3249
  "kind": "method",
3371
- "name": "subscribeToAlerts",
3372
- "privacy": "private",
3250
+ "name": "resolveLeftValues",
3251
+ "static": true,
3373
3252
  "return": {
3374
3253
  "type": {
3375
- "text": "void"
3254
+ "text": "ConditionNode[]"
3376
3255
  }
3377
- }
3256
+ },
3257
+ "parameters": [
3258
+ {
3259
+ "name": "conditions",
3260
+ "type": {
3261
+ "text": "ConditionNode[]"
3262
+ }
3263
+ },
3264
+ {
3265
+ "name": "fields",
3266
+ "type": {
3267
+ "text": "any[]"
3268
+ }
3269
+ }
3270
+ ]
3378
3271
  },
3379
3272
  {
3380
3273
  "kind": "field",
3381
- "name": "subscriptionHandler",
3382
- "privacy": "private"
3274
+ "name": "createEmptyGroup",
3275
+ "static": true
3383
3276
  },
3384
3277
  {
3385
3278
  "kind": "method",
3386
- "name": "playForNewAlerts",
3387
- "privacy": "private",
3279
+ "name": "buildRawExpression",
3280
+ "static": true,
3388
3281
  "return": {
3389
3282
  "type": {
3390
- "text": "Promise<void>"
3283
+ "text": "string"
3391
3284
  }
3392
3285
  },
3393
3286
  "parameters": [
3394
3287
  {
3395
- "name": "rows",
3288
+ "name": "conditions",
3396
3289
  "type": {
3397
- "text": "Array<{\n id: string;\n message?: string;\n header?: string;\n dynamicRuleId?: string;\n }>"
3290
+ "text": "ConditionNode[]"
3398
3291
  }
3399
3292
  }
3400
3293
  ]
3401
3294
  },
3402
3295
  {
3403
3296
  "kind": "method",
3404
- "name": "tryPlayServerSound",
3405
- "privacy": "private",
3297
+ "name": "parseRawExpression",
3298
+ "static": true,
3406
3299
  "return": {
3407
3300
  "type": {
3408
- "text": "Promise<boolean>"
3301
+ "text": "ConditionNode[] | null"
3409
3302
  }
3410
3303
  },
3411
3304
  "parameters": [
3412
3305
  {
3413
- "name": "dynamicRuleId",
3306
+ "name": "rawExpression",
3414
3307
  "type": {
3415
3308
  "text": "string"
3416
3309
  }
3417
3310
  }
3418
3311
  ]
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
+ ]
3419
3334
  },
3420
3335
  {
3421
3336
  "kind": "method",
3422
- "name": "fetchAndCacheServerSound",
3337
+ "name": "buildRightValue",
3423
3338
  "privacy": "private",
3424
- "return": {
3425
- "type": {
3426
- "text": "Promise<boolean>"
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
3427
3353
  }
3428
- },
3354
+ ]
3355
+ },
3356
+ {
3357
+ "kind": "method",
3358
+ "name": "getConditions",
3359
+ "static": true,
3429
3360
  "parameters": [
3430
3361
  {
3431
- "name": "dynamicRuleId",
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"
3377
+ }
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,
3392
+ "parameters": [
3393
+ {
3394
+ "name": "logicalOperator",
3432
3395
  "type": {
3433
- "text": "string"
3396
+ "text": "LogicalOperator"
3434
3397
  }
3398
+ },
3399
+ {
3400
+ "name": "condition"
3401
+ }
3402
+ ]
3403
+ },
3404
+ {
3405
+ "kind": "method",
3406
+ "name": "getConditions",
3407
+ "static": true,
3408
+ "parameters": [
3409
+ {
3410
+ "name": "conditions"
3435
3411
  }
3436
3412
  ]
3437
3413
  }
3438
- ],
3439
- "attributes": [
3414
+ ]
3415
+ },
3416
+ {
3417
+ "kind": "function",
3418
+ "name": "showNotificationError",
3419
+ "parameters": [
3440
3420
  {
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"
3421
+ "name": "error"
3448
3422
  }
3449
- ],
3450
- "superclass": {
3451
- "name": "GenesisElement",
3452
- "package": "@genesislcap/web-core"
3453
- },
3454
- "tagName": "foundation-sounds",
3455
- "customElement": true
3423
+ ]
3456
3424
  }
3457
3425
  ],
3458
3426
  "exports": [
3459
3427
  {
3460
3428
  "kind": "js",
3461
- "name": "FoundationSounds",
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",
3462
3462
  "declaration": {
3463
- "name": "FoundationSounds",
3464
- "module": "src/components/foundation-sounds/foundation-sounds.ts"
3463
+ "name": "RuleUtils",
3464
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3465
3465
  }
3466
3466
  },
3467
3467
  {
3468
- "kind": "custom-element-definition",
3469
- "name": "foundation-sounds",
3468
+ "kind": "js",
3469
+ "name": "showNotificationError",
3470
3470
  "declaration": {
3471
- "name": "FoundationSounds",
3472
- "module": "src/components/foundation-sounds/foundation-sounds.ts"
3471
+ "name": "showNotificationError",
3472
+ "module": "src/components/foundation-notification-dashboard/notification-dashboard.utils.ts"
3473
3473
  }
3474
3474
  }
3475
3475
  ]
@@ -6389,70 +6389,70 @@
6389
6389
  },
6390
6390
  {
6391
6391
  "kind": "javascript-module",
6392
- "path": "src/components/foundation-notification-dashboard/components/routes/route-management.ts",
6392
+ "path": "src/components/foundation-notification-dashboard/components/notify-audit/notify-audit-management.ts",
6393
6393
  "declarations": [
6394
6394
  {
6395
6395
  "kind": "class",
6396
6396
  "description": "",
6397
- "name": "RouteManagement",
6397
+ "name": "NotifyAuditManagement",
6398
6398
  "superclass": {
6399
6399
  "name": "GenesisElement",
6400
6400
  "package": "@genesislcap/web-core"
6401
6401
  },
6402
- "tagName": "route-management",
6402
+ "tagName": "notify-audit-management",
6403
6403
  "customElement": true
6404
6404
  }
6405
6405
  ],
6406
6406
  "exports": [
6407
6407
  {
6408
6408
  "kind": "js",
6409
- "name": "RouteManagement",
6409
+ "name": "NotifyAuditManagement",
6410
6410
  "declaration": {
6411
- "name": "RouteManagement",
6412
- "module": "src/components/foundation-notification-dashboard/components/routes/route-management.ts"
6411
+ "name": "NotifyAuditManagement",
6412
+ "module": "src/components/foundation-notification-dashboard/components/notify-audit/notify-audit-management.ts"
6413
6413
  }
6414
6414
  },
6415
6415
  {
6416
6416
  "kind": "custom-element-definition",
6417
- "name": "route-management",
6417
+ "name": "notify-audit-management",
6418
6418
  "declaration": {
6419
- "name": "RouteManagement",
6420
- "module": "src/components/foundation-notification-dashboard/components/routes/route-management.ts"
6419
+ "name": "NotifyAuditManagement",
6420
+ "module": "src/components/foundation-notification-dashboard/components/notify-audit/notify-audit-management.ts"
6421
6421
  }
6422
6422
  }
6423
6423
  ]
6424
6424
  },
6425
6425
  {
6426
6426
  "kind": "javascript-module",
6427
- "path": "src/components/foundation-notification-dashboard/components/notify-audit/notify-audit-management.ts",
6427
+ "path": "src/components/foundation-notification-dashboard/components/routes/route-management.ts",
6428
6428
  "declarations": [
6429
6429
  {
6430
6430
  "kind": "class",
6431
6431
  "description": "",
6432
- "name": "NotifyAuditManagement",
6432
+ "name": "RouteManagement",
6433
6433
  "superclass": {
6434
6434
  "name": "GenesisElement",
6435
6435
  "package": "@genesislcap/web-core"
6436
6436
  },
6437
- "tagName": "notify-audit-management",
6437
+ "tagName": "route-management",
6438
6438
  "customElement": true
6439
6439
  }
6440
6440
  ],
6441
6441
  "exports": [
6442
6442
  {
6443
6443
  "kind": "js",
6444
- "name": "NotifyAuditManagement",
6444
+ "name": "RouteManagement",
6445
6445
  "declaration": {
6446
- "name": "NotifyAuditManagement",
6447
- "module": "src/components/foundation-notification-dashboard/components/notify-audit/notify-audit-management.ts"
6446
+ "name": "RouteManagement",
6447
+ "module": "src/components/foundation-notification-dashboard/components/routes/route-management.ts"
6448
6448
  }
6449
6449
  },
6450
6450
  {
6451
6451
  "kind": "custom-element-definition",
6452
- "name": "notify-audit-management",
6452
+ "name": "route-management",
6453
6453
  "declaration": {
6454
- "name": "NotifyAuditManagement",
6455
- "module": "src/components/foundation-notification-dashboard/components/notify-audit/notify-audit-management.ts"
6454
+ "name": "RouteManagement",
6455
+ "module": "src/components/foundation-notification-dashboard/components/routes/route-management.ts"
6456
6456
  }
6457
6457
  }
6458
6458
  ]
@@ -8727,268 +8727,54 @@
8727
8727
  },
8728
8728
  {
8729
8729
  "kind": "method",
8730
- "name": "deleteChild",
8731
- "parameters": [
8732
- {
8733
- "name": "deletedChild",
8734
- "type": {
8735
- "text": "ConditionNode"
8736
- }
8737
- }
8738
- ]
8739
- },
8740
- {
8741
- "kind": "method",
8742
- "name": "deleteSelf"
8743
- }
8744
- ],
8745
- "events": [
8746
- {
8747
- "description": "Fired when this whole group should be removed",
8748
- "name": "delete"
8749
- },
8750
- {
8751
- "description": "Fired when anything inside this group changes",
8752
- "name": "edit"
8753
- }
8754
- ],
8755
- "superclass": {
8756
- "name": "GenesisElement",
8757
- "package": "@genesislcap/web-core"
8758
- },
8759
- "tagName": "rule-condition-group",
8760
- "customElement": true
8761
- }
8762
- ],
8763
- "exports": [
8764
- {
8765
- "kind": "js",
8766
- "name": "RuleConditionGroup",
8767
- "declaration": {
8768
- "name": "RuleConditionGroup",
8769
- "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts"
8770
- }
8771
- },
8772
- {
8773
- "kind": "custom-element-definition",
8774
- "name": "rule-condition-group",
8775
- "declaration": {
8776
- "name": "RuleConditionGroup",
8777
- "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts"
8778
- }
8779
- }
8780
- ]
8781
- },
8782
- {
8783
- "kind": "javascript-module",
8784
- "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.styles.ts",
8785
- "declarations": [
8786
- {
8787
- "kind": "variable",
8788
- "name": "ParameterBuilderStyles",
8789
- "default": "css`\n .parameter-builder {\n display: flex;\n gap: calc(var(--design-unit) * 2px);\n margin-bottom: calc(var(--design-unit) * 2px);\n }\n\n rapid-button {\n margin: 0;\n }\n\n .delete {\n margin: 0;\n display: flex;\n justify-content: center;\n height: calc(var(--design-unit) * 9px);\n }\n\n .delete:hover {\n background-color: color-mix(in srgb, var(--neutral-foreground-rest), transparent 89%);\n }\n\n rapid-text-field {\n width: 100%;\n margin-bottom: 0;\n }\n\n rapid-text-field::part(root) {\n height: calc(var(--design-unit) * 9px);\n }\n\n rapid-select {\n min-width: auto;\n }\n\n rapid-select.param-type::part(control) {\n width: 115px;\n }\n\n rapid-select.param-source-type::part(control) {\n width: 160px;\n }\n\n rapid-select.param-source::part(control) {\n width: ${PARAM_SOURCE_WIDTH}px;\n }\n\n rapid-text-field.param-source::part(root) {\n width: calc(${PARAM_SOURCE_WIDTH}px + 2px);\n }\n\n rapid-select::part(listbox) {\n max-height: 160px;\n }\n`"
8790
- }
8791
- ],
8792
- "exports": [
8793
- {
8794
- "kind": "js",
8795
- "name": "ParameterBuilderStyles",
8796
- "declaration": {
8797
- "name": "ParameterBuilderStyles",
8798
- "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.styles.ts"
8799
- }
8800
- }
8801
- ]
8802
- },
8803
- {
8804
- "kind": "javascript-module",
8805
- "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.template.ts",
8806
- "declarations": [
8807
- {
8808
- "kind": "variable",
8809
- "name": "ParameterBuilderTemplate",
8810
- "default": "html<ParameterBuilder>`\n <div class=\"parameter-builder\">\n <rapid-text-field\n id=\"param-name\"\n placeholder=\"Name\"\n :value=${sync((x) => x.name)}\n ></rapid-text-field>\n\n <rapid-text-field\n id=\"param-label\"\n placeholder=\"Label\"\n :value=${sync((x) => x.label)}\n ></rapid-text-field>\n\n <rapid-select\n id=\"param-source-type\"\n :value=${sync((x) => x.sourceType)}\n class=\"param-source-type\"\n >\n ${repeat(\n (x) => ALL_PARAM_SOURCE_TYPES,\n html`\n <rapid-option value=${(x) => x}>${(x) => x}</rapid-option>\n `,\n )}\n </rapid-select>\n\n ${when(\n (x) => x.sourceType === PARAM_SOURCE_TYPE_USER_TEXT,\n html<ParameterBuilder>`\n <rapid-text-field class=\"param-source\" disabled></rapid-text-field>\n `,\n )}\n ${when(\n (x) => x.sourceType === PARAM_SOURCE_TYPE_REQ_REP,\n html<ParameterBuilder>`\n <rapid-select\n ${ref('sourceSelect')}\n id=\"param-source\"\n :value=${sync((x) => x.sourceSelected)}\n class=\"param-source\"\n ?disabled=${(x) => x.sourceType !== PARAM_SOURCE_TYPE_REQ_REP}\n >\n ${repeat(\n (x) => x.reqRepItems,\n html`\n <rapid-option value=${(x) => x}>${(x) => x}</rapid-option>\n `,\n )}\n </rapid-select>\n `,\n )}\n ${when(\n (x) => x.sourceType === PARAM_SOURCE_TYPE_DEFINED_GROUP,\n html<ParameterBuilder>`\n <rapid-text-field\n ${ref('sourceTextField')}\n class=\"param-source\"\n placeholder=\"item1,item2,item3\"\n :value=${sync((x) => x.sourceTyped)}\n ></rapid-text-field>\n `,\n )}\n\n <rapid-select id=\"param-type\" :value=${sync((x) => x.type)} class=\"param-type\">\n ${repeat(\n (x) => ALL_PARAM_TYPES,\n html`\n <rapid-option value=${(x) => x}>${(x) => x}</rapid-option>\n `,\n )}\n </rapid-select>\n\n <rapid-button appearance=\"icon\" class=\"delete\" @click=${(x) => x.deleteParameter()}>\n <rapid-icon\n style=\"opacity: 0.5\"\n variant=\"regular\"\n name=\"trash-alt\"\n size=\"lg\"\n part=\"icon\"\n ></rapid-icon>\n </rapid-button>\n </div>\n`"
8811
- }
8812
- ],
8813
- "exports": [
8814
- {
8815
- "kind": "js",
8816
- "name": "ParameterBuilderTemplate",
8817
- "declaration": {
8818
- "name": "ParameterBuilderTemplate",
8819
- "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.template.ts"
8820
- }
8821
- }
8822
- ]
8823
- },
8824
- {
8825
- "kind": "javascript-module",
8826
- "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts",
8827
- "declarations": [
8828
- {
8829
- "kind": "class",
8830
- "description": "Parameter builder for notification templates.",
8831
- "name": "ParameterBuilder",
8832
- "members": [
8833
- {
8834
- "kind": "field",
8835
- "name": "parameter",
8836
- "type": {
8837
- "text": "ParameterBuilderEntity"
8838
- }
8839
- },
8840
- {
8841
- "kind": "field",
8842
- "name": "name",
8843
- "type": {
8844
- "text": "string"
8845
- }
8846
- },
8847
- {
8848
- "kind": "field",
8849
- "name": "label",
8850
- "type": {
8851
- "text": "string"
8852
- }
8853
- },
8854
- {
8855
- "kind": "field",
8856
- "name": "type",
8857
- "type": {
8858
- "text": "string"
8859
- }
8860
- },
8861
- {
8862
- "kind": "field",
8863
- "name": "sourceType",
8864
- "type": {
8865
- "text": "string"
8866
- }
8867
- },
8868
- {
8869
- "kind": "field",
8870
- "name": "sourceSelected",
8871
- "type": {
8872
- "text": "string"
8873
- }
8874
- },
8875
- {
8876
- "kind": "field",
8877
- "name": "sourceTyped",
8878
- "type": {
8879
- "text": "string"
8880
- }
8881
- },
8882
- {
8883
- "kind": "field",
8884
- "name": "sourceTextField",
8885
- "type": {
8886
- "text": "TextField"
8887
- }
8888
- },
8889
- {
8890
- "kind": "field",
8891
- "name": "sourceSelect",
8892
- "type": {
8893
- "text": "Select"
8894
- }
8895
- },
8896
- {
8897
- "kind": "field",
8898
- "name": "reqRepItems",
8899
- "type": {
8900
- "text": "array"
8901
- },
8902
- "default": "['REQUEST_1', 'REQUEST_2', 'REQUEST_3']"
8903
- },
8904
- {
8905
- "kind": "method",
8906
- "name": "deleteParameter"
8907
- },
8908
- {
8909
- "kind": "method",
8910
- "name": "parameterChanged"
8911
- },
8912
- {
8913
- "kind": "method",
8914
- "name": "nameChanged"
8915
- },
8916
- {
8917
- "kind": "method",
8918
- "name": "labelChanged"
8919
- },
8920
- {
8921
- "kind": "method",
8922
- "name": "typeChanged"
8923
- },
8924
- {
8925
- "kind": "method",
8926
- "name": "sourceTypeChanged"
8927
- },
8928
- {
8929
- "kind": "method",
8930
- "name": "sourceSelectedChanged"
8931
- },
8932
- {
8933
- "kind": "method",
8934
- "name": "sourceTypedChanged"
8935
- },
8936
- {
8937
- "kind": "method",
8938
- "name": "genericChanged",
8939
- "privacy": "private",
8730
+ "name": "deleteChild",
8940
8731
  "parameters": [
8941
8732
  {
8942
- "name": "parameterAttribute"
8943
- },
8944
- {
8945
- "name": "value"
8733
+ "name": "deletedChild",
8734
+ "type": {
8735
+ "text": "ConditionNode"
8736
+ }
8946
8737
  }
8947
8738
  ]
8739
+ },
8740
+ {
8741
+ "kind": "method",
8742
+ "name": "deleteSelf"
8948
8743
  }
8949
8744
  ],
8950
8745
  "events": [
8951
8746
  {
8952
- "description": "Fired when a parameter is deleted. detail: `ParameterBuilderEntity`",
8747
+ "description": "Fired when this whole group should be removed",
8953
8748
  "name": "delete"
8954
8749
  },
8955
8750
  {
8956
- "description": "Fired when a parameter is edited. detail: `ParameterBuilderEntity`",
8751
+ "description": "Fired when anything inside this group changes",
8957
8752
  "name": "edit"
8958
8753
  }
8959
8754
  ],
8960
- "attributes": [
8961
- {
8962
- "name": "parameter",
8963
- "type": {
8964
- "text": "ParameterBuilderEntity"
8965
- },
8966
- "fieldName": "parameter"
8967
- }
8968
- ],
8969
8755
  "superclass": {
8970
8756
  "name": "GenesisElement",
8971
8757
  "package": "@genesislcap/web-core"
8972
8758
  },
8973
- "tagName": "parameter-builder",
8759
+ "tagName": "rule-condition-group",
8974
8760
  "customElement": true
8975
8761
  }
8976
8762
  ],
8977
8763
  "exports": [
8978
8764
  {
8979
8765
  "kind": "js",
8980
- "name": "ParameterBuilder",
8766
+ "name": "RuleConditionGroup",
8981
8767
  "declaration": {
8982
- "name": "ParameterBuilder",
8983
- "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts"
8768
+ "name": "RuleConditionGroup",
8769
+ "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts"
8984
8770
  }
8985
8771
  },
8986
8772
  {
8987
8773
  "kind": "custom-element-definition",
8988
- "name": "parameter-builder",
8774
+ "name": "rule-condition-group",
8989
8775
  "declaration": {
8990
- "name": "ParameterBuilder",
8991
- "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts"
8776
+ "name": "RuleConditionGroup",
8777
+ "module": "src/components/foundation-notification-dashboard/components/rules/rule-dialog/rule-condition-group/rule-condition-group.ts"
8992
8778
  }
8993
8779
  }
8994
8780
  ]
@@ -9260,6 +9046,220 @@
9260
9046
  }
9261
9047
  ]
9262
9048
  },
9049
+ {
9050
+ "kind": "javascript-module",
9051
+ "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.styles.ts",
9052
+ "declarations": [
9053
+ {
9054
+ "kind": "variable",
9055
+ "name": "ParameterBuilderStyles",
9056
+ "default": "css`\n .parameter-builder {\n display: flex;\n gap: calc(var(--design-unit) * 2px);\n margin-bottom: calc(var(--design-unit) * 2px);\n }\n\n rapid-button {\n margin: 0;\n }\n\n .delete {\n margin: 0;\n display: flex;\n justify-content: center;\n height: calc(var(--design-unit) * 9px);\n }\n\n .delete:hover {\n background-color: color-mix(in srgb, var(--neutral-foreground-rest), transparent 89%);\n }\n\n rapid-text-field {\n width: 100%;\n margin-bottom: 0;\n }\n\n rapid-text-field::part(root) {\n height: calc(var(--design-unit) * 9px);\n }\n\n rapid-select {\n min-width: auto;\n }\n\n rapid-select.param-type::part(control) {\n width: 115px;\n }\n\n rapid-select.param-source-type::part(control) {\n width: 160px;\n }\n\n rapid-select.param-source::part(control) {\n width: ${PARAM_SOURCE_WIDTH}px;\n }\n\n rapid-text-field.param-source::part(root) {\n width: calc(${PARAM_SOURCE_WIDTH}px + 2px);\n }\n\n rapid-select::part(listbox) {\n max-height: 160px;\n }\n`"
9057
+ }
9058
+ ],
9059
+ "exports": [
9060
+ {
9061
+ "kind": "js",
9062
+ "name": "ParameterBuilderStyles",
9063
+ "declaration": {
9064
+ "name": "ParameterBuilderStyles",
9065
+ "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.styles.ts"
9066
+ }
9067
+ }
9068
+ ]
9069
+ },
9070
+ {
9071
+ "kind": "javascript-module",
9072
+ "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.template.ts",
9073
+ "declarations": [
9074
+ {
9075
+ "kind": "variable",
9076
+ "name": "ParameterBuilderTemplate",
9077
+ "default": "html<ParameterBuilder>`\n <div class=\"parameter-builder\">\n <rapid-text-field\n id=\"param-name\"\n placeholder=\"Name\"\n :value=${sync((x) => x.name)}\n ></rapid-text-field>\n\n <rapid-text-field\n id=\"param-label\"\n placeholder=\"Label\"\n :value=${sync((x) => x.label)}\n ></rapid-text-field>\n\n <rapid-select\n id=\"param-source-type\"\n :value=${sync((x) => x.sourceType)}\n class=\"param-source-type\"\n >\n ${repeat(\n (x) => ALL_PARAM_SOURCE_TYPES,\n html`\n <rapid-option value=${(x) => x}>${(x) => x}</rapid-option>\n `,\n )}\n </rapid-select>\n\n ${when(\n (x) => x.sourceType === PARAM_SOURCE_TYPE_USER_TEXT,\n html<ParameterBuilder>`\n <rapid-text-field class=\"param-source\" disabled></rapid-text-field>\n `,\n )}\n ${when(\n (x) => x.sourceType === PARAM_SOURCE_TYPE_REQ_REP,\n html<ParameterBuilder>`\n <rapid-select\n ${ref('sourceSelect')}\n id=\"param-source\"\n :value=${sync((x) => x.sourceSelected)}\n class=\"param-source\"\n ?disabled=${(x) => x.sourceType !== PARAM_SOURCE_TYPE_REQ_REP}\n >\n ${repeat(\n (x) => x.reqRepItems,\n html`\n <rapid-option value=${(x) => x}>${(x) => x}</rapid-option>\n `,\n )}\n </rapid-select>\n `,\n )}\n ${when(\n (x) => x.sourceType === PARAM_SOURCE_TYPE_DEFINED_GROUP,\n html<ParameterBuilder>`\n <rapid-text-field\n ${ref('sourceTextField')}\n class=\"param-source\"\n placeholder=\"item1,item2,item3\"\n :value=${sync((x) => x.sourceTyped)}\n ></rapid-text-field>\n `,\n )}\n\n <rapid-select id=\"param-type\" :value=${sync((x) => x.type)} class=\"param-type\">\n ${repeat(\n (x) => ALL_PARAM_TYPES,\n html`\n <rapid-option value=${(x) => x}>${(x) => x}</rapid-option>\n `,\n )}\n </rapid-select>\n\n <rapid-button appearance=\"icon\" class=\"delete\" @click=${(x) => x.deleteParameter()}>\n <rapid-icon\n style=\"opacity: 0.5\"\n variant=\"regular\"\n name=\"trash-alt\"\n size=\"lg\"\n part=\"icon\"\n ></rapid-icon>\n </rapid-button>\n </div>\n`"
9078
+ }
9079
+ ],
9080
+ "exports": [
9081
+ {
9082
+ "kind": "js",
9083
+ "name": "ParameterBuilderTemplate",
9084
+ "declaration": {
9085
+ "name": "ParameterBuilderTemplate",
9086
+ "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.template.ts"
9087
+ }
9088
+ }
9089
+ ]
9090
+ },
9091
+ {
9092
+ "kind": "javascript-module",
9093
+ "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts",
9094
+ "declarations": [
9095
+ {
9096
+ "kind": "class",
9097
+ "description": "Parameter builder for notification templates.",
9098
+ "name": "ParameterBuilder",
9099
+ "members": [
9100
+ {
9101
+ "kind": "field",
9102
+ "name": "parameter",
9103
+ "type": {
9104
+ "text": "ParameterBuilderEntity"
9105
+ }
9106
+ },
9107
+ {
9108
+ "kind": "field",
9109
+ "name": "name",
9110
+ "type": {
9111
+ "text": "string"
9112
+ }
9113
+ },
9114
+ {
9115
+ "kind": "field",
9116
+ "name": "label",
9117
+ "type": {
9118
+ "text": "string"
9119
+ }
9120
+ },
9121
+ {
9122
+ "kind": "field",
9123
+ "name": "type",
9124
+ "type": {
9125
+ "text": "string"
9126
+ }
9127
+ },
9128
+ {
9129
+ "kind": "field",
9130
+ "name": "sourceType",
9131
+ "type": {
9132
+ "text": "string"
9133
+ }
9134
+ },
9135
+ {
9136
+ "kind": "field",
9137
+ "name": "sourceSelected",
9138
+ "type": {
9139
+ "text": "string"
9140
+ }
9141
+ },
9142
+ {
9143
+ "kind": "field",
9144
+ "name": "sourceTyped",
9145
+ "type": {
9146
+ "text": "string"
9147
+ }
9148
+ },
9149
+ {
9150
+ "kind": "field",
9151
+ "name": "sourceTextField",
9152
+ "type": {
9153
+ "text": "TextField"
9154
+ }
9155
+ },
9156
+ {
9157
+ "kind": "field",
9158
+ "name": "sourceSelect",
9159
+ "type": {
9160
+ "text": "Select"
9161
+ }
9162
+ },
9163
+ {
9164
+ "kind": "field",
9165
+ "name": "reqRepItems",
9166
+ "type": {
9167
+ "text": "array"
9168
+ },
9169
+ "default": "['REQUEST_1', 'REQUEST_2', 'REQUEST_3']"
9170
+ },
9171
+ {
9172
+ "kind": "method",
9173
+ "name": "deleteParameter"
9174
+ },
9175
+ {
9176
+ "kind": "method",
9177
+ "name": "parameterChanged"
9178
+ },
9179
+ {
9180
+ "kind": "method",
9181
+ "name": "nameChanged"
9182
+ },
9183
+ {
9184
+ "kind": "method",
9185
+ "name": "labelChanged"
9186
+ },
9187
+ {
9188
+ "kind": "method",
9189
+ "name": "typeChanged"
9190
+ },
9191
+ {
9192
+ "kind": "method",
9193
+ "name": "sourceTypeChanged"
9194
+ },
9195
+ {
9196
+ "kind": "method",
9197
+ "name": "sourceSelectedChanged"
9198
+ },
9199
+ {
9200
+ "kind": "method",
9201
+ "name": "sourceTypedChanged"
9202
+ },
9203
+ {
9204
+ "kind": "method",
9205
+ "name": "genericChanged",
9206
+ "privacy": "private",
9207
+ "parameters": [
9208
+ {
9209
+ "name": "parameterAttribute"
9210
+ },
9211
+ {
9212
+ "name": "value"
9213
+ }
9214
+ ]
9215
+ }
9216
+ ],
9217
+ "events": [
9218
+ {
9219
+ "description": "Fired when a parameter is deleted. detail: `ParameterBuilderEntity`",
9220
+ "name": "delete"
9221
+ },
9222
+ {
9223
+ "description": "Fired when a parameter is edited. detail: `ParameterBuilderEntity`",
9224
+ "name": "edit"
9225
+ }
9226
+ ],
9227
+ "attributes": [
9228
+ {
9229
+ "name": "parameter",
9230
+ "type": {
9231
+ "text": "ParameterBuilderEntity"
9232
+ },
9233
+ "fieldName": "parameter"
9234
+ }
9235
+ ],
9236
+ "superclass": {
9237
+ "name": "GenesisElement",
9238
+ "package": "@genesislcap/web-core"
9239
+ },
9240
+ "tagName": "parameter-builder",
9241
+ "customElement": true
9242
+ }
9243
+ ],
9244
+ "exports": [
9245
+ {
9246
+ "kind": "js",
9247
+ "name": "ParameterBuilder",
9248
+ "declaration": {
9249
+ "name": "ParameterBuilder",
9250
+ "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts"
9251
+ }
9252
+ },
9253
+ {
9254
+ "kind": "custom-element-definition",
9255
+ "name": "parameter-builder",
9256
+ "declaration": {
9257
+ "name": "ParameterBuilder",
9258
+ "module": "src/components/foundation-notification-dashboard/components/templates/template-dialog/parameter-builder/parameter-builder.ts"
9259
+ }
9260
+ }
9261
+ ]
9262
+ },
9263
9263
  {
9264
9264
  "kind": "javascript-module",
9265
9265
  "path": "src/components/foundation-notification-dashboard/components/templates/template-dialog/template-condition-group/template-condition-group.template.ts",