diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..839f2fe1edee46c407cedcf22c8cac6464b7455a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +web/assets/images/sad_girl.png filter=lfs diff=lfs merge=lfs -text +web/fonts/materialdesignicons-webfont.woff2 filter=lfs diff=lfs merge=lfs -text diff --git a/comfy_execution/caching.py b/comfy_execution/caching.py new file mode 100644 index 0000000000000000000000000000000000000000..630f280fc5e94ae7fd1cfa81f290a49f2a506e8a --- /dev/null +++ b/comfy_execution/caching.py @@ -0,0 +1,318 @@ +import itertools +from typing import Sequence, Mapping, Dict +from comfy_execution.graph import DynamicPrompt + +import nodes + +from comfy_execution.graph_utils import is_link + +NODE_CLASS_CONTAINS_UNIQUE_ID: Dict[str, bool] = {} + + +def include_unique_id_in_input(class_type: str) -> bool: + if class_type in NODE_CLASS_CONTAINS_UNIQUE_ID: + return NODE_CLASS_CONTAINS_UNIQUE_ID[class_type] + class_def = nodes.NODE_CLASS_MAPPINGS[class_type] + NODE_CLASS_CONTAINS_UNIQUE_ID[class_type] = "UNIQUE_ID" in class_def.INPUT_TYPES().get("hidden", {}).values() + return NODE_CLASS_CONTAINS_UNIQUE_ID[class_type] + +class CacheKeySet: + def __init__(self, dynprompt, node_ids, is_changed_cache): + self.keys = {} + self.subcache_keys = {} + + def add_keys(self, node_ids): + raise NotImplementedError() + + def all_node_ids(self): + return set(self.keys.keys()) + + def get_used_keys(self): + return self.keys.values() + + def get_used_subcache_keys(self): + return self.subcache_keys.values() + + def get_data_key(self, node_id): + return self.keys.get(node_id, None) + + def get_subcache_key(self, node_id): + return self.subcache_keys.get(node_id, None) + +class Unhashable: + def __init__(self): + self.value = float("NaN") + +def to_hashable(obj): + # So that we don't infinitely recurse since frozenset and tuples + # are Sequences. + if isinstance(obj, (int, float, str, bool, type(None))): + return obj + elif isinstance(obj, Mapping): + return frozenset([(to_hashable(k), to_hashable(v)) for k, v in sorted(obj.items())]) + elif isinstance(obj, Sequence): + return frozenset(zip(itertools.count(), [to_hashable(i) for i in obj])) + else: + # TODO - Support other objects like tensors? + return Unhashable() + +class CacheKeySetID(CacheKeySet): + def __init__(self, dynprompt, node_ids, is_changed_cache): + super().__init__(dynprompt, node_ids, is_changed_cache) + self.dynprompt = dynprompt + self.add_keys(node_ids) + + def add_keys(self, node_ids): + for node_id in node_ids: + if node_id in self.keys: + continue + if not self.dynprompt.has_node(node_id): + continue + node = self.dynprompt.get_node(node_id) + self.keys[node_id] = (node_id, node["class_type"]) + self.subcache_keys[node_id] = (node_id, node["class_type"]) + +class CacheKeySetInputSignature(CacheKeySet): + def __init__(self, dynprompt, node_ids, is_changed_cache): + super().__init__(dynprompt, node_ids, is_changed_cache) + self.dynprompt = dynprompt + self.is_changed_cache = is_changed_cache + self.add_keys(node_ids) + + def include_node_id_in_input(self) -> bool: + return False + + def add_keys(self, node_ids): + for node_id in node_ids: + if node_id in self.keys: + continue + if not self.dynprompt.has_node(node_id): + continue + node = self.dynprompt.get_node(node_id) + self.keys[node_id] = self.get_node_signature(self.dynprompt, node_id) + self.subcache_keys[node_id] = (node_id, node["class_type"]) + + def get_node_signature(self, dynprompt, node_id): + signature = [] + ancestors, order_mapping = self.get_ordered_ancestry(dynprompt, node_id) + signature.append(self.get_immediate_node_signature(dynprompt, node_id, order_mapping)) + for ancestor_id in ancestors: + signature.append(self.get_immediate_node_signature(dynprompt, ancestor_id, order_mapping)) + return to_hashable(signature) + + def get_immediate_node_signature(self, dynprompt, node_id, ancestor_order_mapping): + if not dynprompt.has_node(node_id): + # This node doesn't exist -- we can't cache it. + return [float("NaN")] + node = dynprompt.get_node(node_id) + class_type = node["class_type"] + class_def = nodes.NODE_CLASS_MAPPINGS[class_type] + signature = [class_type, self.is_changed_cache.get(node_id)] + if self.include_node_id_in_input() or (hasattr(class_def, "NOT_IDEMPOTENT") and class_def.NOT_IDEMPOTENT) or include_unique_id_in_input(class_type): + signature.append(node_id) + inputs = node["inputs"] + for key in sorted(inputs.keys()): + if is_link(inputs[key]): + (ancestor_id, ancestor_socket) = inputs[key] + ancestor_index = ancestor_order_mapping[ancestor_id] + signature.append((key,("ANCESTOR", ancestor_index, ancestor_socket))) + else: + signature.append((key, inputs[key])) + return signature + + # This function returns a list of all ancestors of the given node. The order of the list is + # deterministic based on which specific inputs the ancestor is connected by. + def get_ordered_ancestry(self, dynprompt, node_id): + ancestors = [] + order_mapping = {} + self.get_ordered_ancestry_internal(dynprompt, node_id, ancestors, order_mapping) + return ancestors, order_mapping + + def get_ordered_ancestry_internal(self, dynprompt, node_id, ancestors, order_mapping): + if not dynprompt.has_node(node_id): + return + inputs = dynprompt.get_node(node_id)["inputs"] + input_keys = sorted(inputs.keys()) + for key in input_keys: + if is_link(inputs[key]): + ancestor_id = inputs[key][0] + if ancestor_id not in order_mapping: + ancestors.append(ancestor_id) + order_mapping[ancestor_id] = len(ancestors) - 1 + self.get_ordered_ancestry_internal(dynprompt, ancestor_id, ancestors, order_mapping) + +class BasicCache: + def __init__(self, key_class): + self.key_class = key_class + self.initialized = False + self.dynprompt: DynamicPrompt + self.cache_key_set: CacheKeySet + self.cache = {} + self.subcaches = {} + + def set_prompt(self, dynprompt, node_ids, is_changed_cache): + self.dynprompt = dynprompt + self.cache_key_set = self.key_class(dynprompt, node_ids, is_changed_cache) + self.is_changed_cache = is_changed_cache + self.initialized = True + + def all_node_ids(self): + assert self.initialized + node_ids = self.cache_key_set.all_node_ids() + for subcache in self.subcaches.values(): + node_ids = node_ids.union(subcache.all_node_ids()) + return node_ids + + def _clean_cache(self): + preserve_keys = set(self.cache_key_set.get_used_keys()) + to_remove = [] + for key in self.cache: + if key not in preserve_keys: + to_remove.append(key) + for key in to_remove: + del self.cache[key] + + def _clean_subcaches(self): + preserve_subcaches = set(self.cache_key_set.get_used_subcache_keys()) + + to_remove = [] + for key in self.subcaches: + if key not in preserve_subcaches: + to_remove.append(key) + for key in to_remove: + del self.subcaches[key] + + def clean_unused(self): + assert self.initialized + self._clean_cache() + self._clean_subcaches() + + def _set_immediate(self, node_id, value): + assert self.initialized + cache_key = self.cache_key_set.get_data_key(node_id) + self.cache[cache_key] = value + + def _get_immediate(self, node_id): + if not self.initialized: + return None + cache_key = self.cache_key_set.get_data_key(node_id) + if cache_key in self.cache: + return self.cache[cache_key] + else: + return None + + def _ensure_subcache(self, node_id, children_ids): + subcache_key = self.cache_key_set.get_subcache_key(node_id) + subcache = self.subcaches.get(subcache_key, None) + if subcache is None: + subcache = BasicCache(self.key_class) + self.subcaches[subcache_key] = subcache + subcache.set_prompt(self.dynprompt, children_ids, self.is_changed_cache) + return subcache + + def _get_subcache(self, node_id): + assert self.initialized + subcache_key = self.cache_key_set.get_subcache_key(node_id) + if subcache_key in self.subcaches: + return self.subcaches[subcache_key] + else: + return None + + def recursive_debug_dump(self): + result = [] + for key in self.cache: + result.append({"key": key, "value": self.cache[key]}) + for key in self.subcaches: + result.append({"subcache_key": key, "subcache": self.subcaches[key].recursive_debug_dump()}) + return result + +class HierarchicalCache(BasicCache): + def __init__(self, key_class): + super().__init__(key_class) + + def _get_cache_for(self, node_id): + assert self.dynprompt is not None + parent_id = self.dynprompt.get_parent_node_id(node_id) + if parent_id is None: + return self + + hierarchy = [] + while parent_id is not None: + hierarchy.append(parent_id) + parent_id = self.dynprompt.get_parent_node_id(parent_id) + + cache = self + for parent_id in reversed(hierarchy): + cache = cache._get_subcache(parent_id) + if cache is None: + return None + return cache + + def get(self, node_id): + cache = self._get_cache_for(node_id) + if cache is None: + return None + return cache._get_immediate(node_id) + + def set(self, node_id, value): + cache = self._get_cache_for(node_id) + assert cache is not None + cache._set_immediate(node_id, value) + + def ensure_subcache_for(self, node_id, children_ids): + cache = self._get_cache_for(node_id) + assert cache is not None + return cache._ensure_subcache(node_id, children_ids) + +class LRUCache(BasicCache): + def __init__(self, key_class, max_size=100): + super().__init__(key_class) + self.max_size = max_size + self.min_generation = 0 + self.generation = 0 + self.used_generation = {} + self.children = {} + + def set_prompt(self, dynprompt, node_ids, is_changed_cache): + super().set_prompt(dynprompt, node_ids, is_changed_cache) + self.generation += 1 + for node_id in node_ids: + self._mark_used(node_id) + + def clean_unused(self): + while len(self.cache) > self.max_size and self.min_generation < self.generation: + self.min_generation += 1 + to_remove = [key for key in self.cache if self.used_generation[key] < self.min_generation] + for key in to_remove: + del self.cache[key] + del self.used_generation[key] + if key in self.children: + del self.children[key] + self._clean_subcaches() + + def get(self, node_id): + self._mark_used(node_id) + return self._get_immediate(node_id) + + def _mark_used(self, node_id): + cache_key = self.cache_key_set.get_data_key(node_id) + if cache_key is not None: + self.used_generation[cache_key] = self.generation + + def set(self, node_id, value): + self._mark_used(node_id) + return self._set_immediate(node_id, value) + + def ensure_subcache_for(self, node_id, children_ids): + # Just uses subcaches for tracking 'live' nodes + super()._ensure_subcache(node_id, children_ids) + + self.cache_key_set.add_keys(children_ids) + self._mark_used(node_id) + cache_key = self.cache_key_set.get_data_key(node_id) + self.children[cache_key] = [] + for child_id in children_ids: + self._mark_used(child_id) + self.children[cache_key].append(self.cache_key_set.get_data_key(child_id)) + return self + diff --git a/comfy_execution/graph.py b/comfy_execution/graph.py new file mode 100644 index 0000000000000000000000000000000000000000..59b42b746f517b0cf6a0a4de333a74ba93bae1df --- /dev/null +++ b/comfy_execution/graph.py @@ -0,0 +1,270 @@ +import nodes + +from comfy_execution.graph_utils import is_link + +class DependencyCycleError(Exception): + pass + +class NodeInputError(Exception): + pass + +class NodeNotFoundError(Exception): + pass + +class DynamicPrompt: + def __init__(self, original_prompt): + # The original prompt provided by the user + self.original_prompt = original_prompt + # Any extra pieces of the graph created during execution + self.ephemeral_prompt = {} + self.ephemeral_parents = {} + self.ephemeral_display = {} + + def get_node(self, node_id): + if node_id in self.ephemeral_prompt: + return self.ephemeral_prompt[node_id] + if node_id in self.original_prompt: + return self.original_prompt[node_id] + raise NodeNotFoundError(f"Node {node_id} not found") + + def has_node(self, node_id): + return node_id in self.original_prompt or node_id in self.ephemeral_prompt + + def add_ephemeral_node(self, node_id, node_info, parent_id, display_id): + self.ephemeral_prompt[node_id] = node_info + self.ephemeral_parents[node_id] = parent_id + self.ephemeral_display[node_id] = display_id + + def get_real_node_id(self, node_id): + while node_id in self.ephemeral_parents: + node_id = self.ephemeral_parents[node_id] + return node_id + + def get_parent_node_id(self, node_id): + return self.ephemeral_parents.get(node_id, None) + + def get_display_node_id(self, node_id): + while node_id in self.ephemeral_display: + node_id = self.ephemeral_display[node_id] + return node_id + + def all_node_ids(self): + return set(self.original_prompt.keys()).union(set(self.ephemeral_prompt.keys())) + + def get_original_prompt(self): + return self.original_prompt + +def get_input_info(class_def, input_name, valid_inputs=None): + valid_inputs = valid_inputs or class_def.INPUT_TYPES() + input_info = None + input_category = None + if "required" in valid_inputs and input_name in valid_inputs["required"]: + input_category = "required" + input_info = valid_inputs["required"][input_name] + elif "optional" in valid_inputs and input_name in valid_inputs["optional"]: + input_category = "optional" + input_info = valid_inputs["optional"][input_name] + elif "hidden" in valid_inputs and input_name in valid_inputs["hidden"]: + input_category = "hidden" + input_info = valid_inputs["hidden"][input_name] + if input_info is None: + return None, None, None + input_type = input_info[0] + if len(input_info) > 1: + extra_info = input_info[1] + else: + extra_info = {} + return input_type, input_category, extra_info + +class TopologicalSort: + def __init__(self, dynprompt): + self.dynprompt = dynprompt + self.pendingNodes = {} + self.blockCount = {} # Number of nodes this node is directly blocked by + self.blocking = {} # Which nodes are blocked by this node + + def get_input_info(self, unique_id, input_name): + class_type = self.dynprompt.get_node(unique_id)["class_type"] + class_def = nodes.NODE_CLASS_MAPPINGS[class_type] + return get_input_info(class_def, input_name) + + def make_input_strong_link(self, to_node_id, to_input): + inputs = self.dynprompt.get_node(to_node_id)["inputs"] + if to_input not in inputs: + raise NodeInputError(f"Node {to_node_id} says it needs input {to_input}, but there is no input to that node at all") + value = inputs[to_input] + if not is_link(value): + raise NodeInputError(f"Node {to_node_id} says it needs input {to_input}, but that value is a constant") + from_node_id, from_socket = value + self.add_strong_link(from_node_id, from_socket, to_node_id) + + def add_strong_link(self, from_node_id, from_socket, to_node_id): + if not self.is_cached(from_node_id): + self.add_node(from_node_id) + if to_node_id not in self.blocking[from_node_id]: + self.blocking[from_node_id][to_node_id] = {} + self.blockCount[to_node_id] += 1 + self.blocking[from_node_id][to_node_id][from_socket] = True + + def add_node(self, node_unique_id, include_lazy=False, subgraph_nodes=None): + node_ids = [node_unique_id] + links = [] + + while len(node_ids) > 0: + unique_id = node_ids.pop() + if unique_id in self.pendingNodes: + continue + + self.pendingNodes[unique_id] = True + self.blockCount[unique_id] = 0 + self.blocking[unique_id] = {} + + inputs = self.dynprompt.get_node(unique_id)["inputs"] + for input_name in inputs: + value = inputs[input_name] + if is_link(value): + from_node_id, from_socket = value + if subgraph_nodes is not None and from_node_id not in subgraph_nodes: + continue + input_type, input_category, input_info = self.get_input_info(unique_id, input_name) + is_lazy = input_info is not None and "lazy" in input_info and input_info["lazy"] + if (include_lazy or not is_lazy) and not self.is_cached(from_node_id): + node_ids.append(from_node_id) + links.append((from_node_id, from_socket, unique_id)) + + for link in links: + self.add_strong_link(*link) + + def is_cached(self, node_id): + return False + + def get_ready_nodes(self): + return [node_id for node_id in self.pendingNodes if self.blockCount[node_id] == 0] + + def pop_node(self, unique_id): + del self.pendingNodes[unique_id] + for blocked_node_id in self.blocking[unique_id]: + self.blockCount[blocked_node_id] -= 1 + del self.blocking[unique_id] + + def is_empty(self): + return len(self.pendingNodes) == 0 + +class ExecutionList(TopologicalSort): + """ + ExecutionList implements a topological dissolve of the graph. After a node is staged for execution, + it can still be returned to the graph after having further dependencies added. + """ + def __init__(self, dynprompt, output_cache): + super().__init__(dynprompt) + self.output_cache = output_cache + self.staged_node_id = None + + def is_cached(self, node_id): + return self.output_cache.get(node_id) is not None + + def stage_node_execution(self): + assert self.staged_node_id is None + if self.is_empty(): + return None, None, None + available = self.get_ready_nodes() + if len(available) == 0: + cycled_nodes = self.get_nodes_in_cycle() + # Because cycles composed entirely of static nodes are caught during initial validation, + # we will 'blame' the first node in the cycle that is not a static node. + blamed_node = cycled_nodes[0] + for node_id in cycled_nodes: + display_node_id = self.dynprompt.get_display_node_id(node_id) + if display_node_id != node_id: + blamed_node = display_node_id + break + ex = DependencyCycleError("Dependency cycle detected") + error_details = { + "node_id": blamed_node, + "exception_message": str(ex), + "exception_type": "graph.DependencyCycleError", + "traceback": [], + "current_inputs": [] + } + return None, error_details, ex + + self.staged_node_id = self.ux_friendly_pick_node(available) + return self.staged_node_id, None, None + + def ux_friendly_pick_node(self, node_list): + # If an output node is available, do that first. + # Technically this has no effect on the overall length of execution, but it feels better as a user + # for a PreviewImage to display a result as soon as it can + # Some other heuristics could probably be used here to improve the UX further. + def is_output(node_id): + class_type = self.dynprompt.get_node(node_id)["class_type"] + class_def = nodes.NODE_CLASS_MAPPINGS[class_type] + if hasattr(class_def, 'OUTPUT_NODE') and class_def.OUTPUT_NODE == True: + return True + return False + + for node_id in node_list: + if is_output(node_id): + return node_id + + #This should handle the VAEDecode -> preview case + for node_id in node_list: + for blocked_node_id in self.blocking[node_id]: + if is_output(blocked_node_id): + return node_id + + #This should handle the VAELoader -> VAEDecode -> preview case + for node_id in node_list: + for blocked_node_id in self.blocking[node_id]: + for blocked_node_id1 in self.blocking[blocked_node_id]: + if is_output(blocked_node_id1): + return node_id + + #TODO: this function should be improved + return node_list[0] + + def unstage_node_execution(self): + assert self.staged_node_id is not None + self.staged_node_id = None + + def complete_node_execution(self): + node_id = self.staged_node_id + self.pop_node(node_id) + self.staged_node_id = None + + def get_nodes_in_cycle(self): + # We'll dissolve the graph in reverse topological order to leave only the nodes in the cycle. + # We're skipping some of the performance optimizations from the original TopologicalSort to keep + # the code simple (and because having a cycle in the first place is a catastrophic error) + blocked_by = { node_id: {} for node_id in self.pendingNodes } + for from_node_id in self.blocking: + for to_node_id in self.blocking[from_node_id]: + if True in self.blocking[from_node_id][to_node_id].values(): + blocked_by[to_node_id][from_node_id] = True + to_remove = [node_id for node_id in blocked_by if len(blocked_by[node_id]) == 0] + while len(to_remove) > 0: + for node_id in to_remove: + for to_node_id in blocked_by: + if node_id in blocked_by[to_node_id]: + del blocked_by[to_node_id][node_id] + del blocked_by[node_id] + to_remove = [node_id for node_id in blocked_by if len(blocked_by[node_id]) == 0] + return list(blocked_by.keys()) + +class ExecutionBlocker: + """ + Return this from a node and any users will be blocked with the given error message. + If the message is None, execution will be blocked silently instead. + Generally, you should avoid using this functionality unless absolutely necessary. Whenever it's + possible, a lazy input will be more efficient and have a better user experience. + This functionality is useful in two cases: + 1. You want to conditionally prevent an output node from executing. (Particularly a built-in node + like SaveImage. For your own output nodes, I would recommend just adding a BOOL input and using + lazy evaluation to let it conditionally disable itself.) + 2. You have a node with multiple possible outputs, some of which are invalid and should not be used. + (I would recommend not making nodes like this in the future -- instead, make multiple nodes with + different outputs. Unfortunately, there are several popular existing nodes using this pattern.) + """ + def __init__(self, message): + self.message = message + diff --git a/comfy_execution/graph_utils.py b/comfy_execution/graph_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..8595e942d32160152c3c0163c85ad9bcd2e68d45 --- /dev/null +++ b/comfy_execution/graph_utils.py @@ -0,0 +1,139 @@ +def is_link(obj): + if not isinstance(obj, list): + return False + if len(obj) != 2: + return False + if not isinstance(obj[0], str): + return False + if not isinstance(obj[1], int) and not isinstance(obj[1], float): + return False + return True + +# The GraphBuilder is just a utility class that outputs graphs in the form expected by the ComfyUI back-end +class GraphBuilder: + _default_prefix_root = "" + _default_prefix_call_index = 0 + _default_prefix_graph_index = 0 + + def __init__(self, prefix = None): + if prefix is None: + self.prefix = GraphBuilder.alloc_prefix() + else: + self.prefix = prefix + self.nodes = {} + self.id_gen = 1 + + @classmethod + def set_default_prefix(cls, prefix_root, call_index, graph_index = 0): + cls._default_prefix_root = prefix_root + cls._default_prefix_call_index = call_index + cls._default_prefix_graph_index = graph_index + + @classmethod + def alloc_prefix(cls, root=None, call_index=None, graph_index=None): + if root is None: + root = GraphBuilder._default_prefix_root + if call_index is None: + call_index = GraphBuilder._default_prefix_call_index + if graph_index is None: + graph_index = GraphBuilder._default_prefix_graph_index + result = f"{root}.{call_index}.{graph_index}." + GraphBuilder._default_prefix_graph_index += 1 + return result + + def node(self, class_type, id=None, **kwargs): + if id is None: + id = str(self.id_gen) + self.id_gen += 1 + id = self.prefix + id + if id in self.nodes: + return self.nodes[id] + + node = Node(id, class_type, kwargs) + self.nodes[id] = node + return node + + def lookup_node(self, id): + id = self.prefix + id + return self.nodes.get(id) + + def finalize(self): + output = {} + for node_id, node in self.nodes.items(): + output[node_id] = node.serialize() + return output + + def replace_node_output(self, node_id, index, new_value): + node_id = self.prefix + node_id + to_remove = [] + for node in self.nodes.values(): + for key, value in node.inputs.items(): + if is_link(value) and value[0] == node_id and value[1] == index: + if new_value is None: + to_remove.append((node, key)) + else: + node.inputs[key] = new_value + for node, key in to_remove: + del node.inputs[key] + + def remove_node(self, id): + id = self.prefix + id + del self.nodes[id] + +class Node: + def __init__(self, id, class_type, inputs): + self.id = id + self.class_type = class_type + self.inputs = inputs + self.override_display_id = None + + def out(self, index): + return [self.id, index] + + def set_input(self, key, value): + if value is None: + if key in self.inputs: + del self.inputs[key] + else: + self.inputs[key] = value + + def get_input(self, key): + return self.inputs.get(key) + + def set_override_display_id(self, override_display_id): + self.override_display_id = override_display_id + + def serialize(self): + serialized = { + "class_type": self.class_type, + "inputs": self.inputs + } + if self.override_display_id is not None: + serialized["override_display_id"] = self.override_display_id + return serialized + +def add_graph_prefix(graph, outputs, prefix): + # Change the node IDs and any internal links + new_graph = {} + for node_id, node_info in graph.items(): + # Make sure the added nodes have unique IDs + new_node_id = prefix + node_id + new_node = { "class_type": node_info["class_type"], "inputs": {} } + for input_name, input_value in node_info.get("inputs", {}).items(): + if is_link(input_value): + new_node["inputs"][input_name] = [prefix + input_value[0], input_value[1]] + else: + new_node["inputs"][input_name] = input_value + new_graph[new_node_id] = new_node + + # Change the node IDs in the outputs + new_outputs = [] + for n in range(len(outputs)): + output = outputs[n] + if is_link(output): + new_outputs.append([prefix + output[0], output[1]]) + else: + new_outputs.append(output) + + return new_graph, tuple(new_outputs) + diff --git a/comfy_execution/validation.py b/comfy_execution/validation.py new file mode 100644 index 0000000000000000000000000000000000000000..cec105fc9f1bfbecdc17c37cfec9ecf60f188814 --- /dev/null +++ b/comfy_execution/validation.py @@ -0,0 +1,39 @@ +from __future__ import annotations + + +def validate_node_input( + received_type: str, input_type: str, strict: bool = False +) -> bool: + """ + received_type and input_type are both strings of the form "T1,T2,...". + + If strict is True, the input_type must contain the received_type. + For example, if received_type is "STRING" and input_type is "STRING,INT", + this will return True. But if received_type is "STRING,INT" and input_type is + "INT", this will return False. + + If strict is False, the input_type must have overlap with the received_type. + For example, if received_type is "STRING,BOOLEAN" and input_type is "STRING,INT", + this will return True. + + Supports pre-union type extension behaviour of ``__ne__`` overrides. + """ + # If the types are exactly the same, we can return immediately + # Use pre-union behaviour: inverse of `__ne__` + if not received_type != input_type: + return True + + # Not equal, and not strings + if not isinstance(received_type, str) or not isinstance(input_type, str): + return False + + # Split the type strings into sets for comparison + received_types = set(t.strip() for t in received_type.split(",")) + input_types = set(t.strip() for t in input_type.split(",")) + + if strict: + # In strict mode, all received types must be in the input types + return received_types.issubset(input_types) + else: + # In non-strict mode, there must be at least one type in common + return len(received_types.intersection(input_types)) > 0 diff --git a/comfy_extras/chainner_models/model_loading.py b/comfy_extras/chainner_models/model_loading.py new file mode 100644 index 0000000000000000000000000000000000000000..1bec4476f6171e9f1b2a4a3b967fc63bbf9e9c3c --- /dev/null +++ b/comfy_extras/chainner_models/model_loading.py @@ -0,0 +1,6 @@ +import logging +from spandrel import ModelLoader + +def load_state_dict(state_dict): + logging.warning("comfy_extras.chainner_models is deprecated and has been replaced by the spandrel library.") + return ModelLoader().load_from_state_dict(state_dict).eval() diff --git a/comfy_extras/nodes_advanced_samplers.py b/comfy_extras/nodes_advanced_samplers.py new file mode 100644 index 0000000000000000000000000000000000000000..5fbb096fbf808e0c6d96159bee024873fb1f4c3e --- /dev/null +++ b/comfy_extras/nodes_advanced_samplers.py @@ -0,0 +1,111 @@ +import comfy.samplers +import comfy.utils +import torch +import numpy as np +from tqdm.auto import trange + + +@torch.no_grad() +def sample_lcm_upscale(model, x, sigmas, extra_args=None, callback=None, disable=None, total_upscale=2.0, upscale_method="bislerp", upscale_steps=None): + extra_args = {} if extra_args is None else extra_args + + if upscale_steps is None: + upscale_steps = max(len(sigmas) // 2 + 1, 2) + else: + upscale_steps += 1 + upscale_steps = min(upscale_steps, len(sigmas) + 1) + + upscales = np.linspace(1.0, total_upscale, upscale_steps)[1:] + + orig_shape = x.size() + s_in = x.new_ones([x.shape[0]]) + for i in trange(len(sigmas) - 1, disable=disable): + denoised = model(x, sigmas[i] * s_in, **extra_args) + if callback is not None: + callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised}) + + x = denoised + if i < len(upscales): + x = comfy.utils.common_upscale(x, round(orig_shape[-1] * upscales[i]), round(orig_shape[-2] * upscales[i]), upscale_method, "disabled") + + if sigmas[i + 1] > 0: + x += sigmas[i + 1] * torch.randn_like(x) + return x + + +class SamplerLCMUpscale: + upscale_methods = ["bislerp", "nearest-exact", "bilinear", "area", "bicubic"] + + @classmethod + def INPUT_TYPES(s): + return {"required": + {"scale_ratio": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 20.0, "step": 0.01}), + "scale_steps": ("INT", {"default": -1, "min": -1, "max": 1000, "step": 1}), + "upscale_method": (s.upscale_methods,), + } + } + RETURN_TYPES = ("SAMPLER",) + CATEGORY = "sampling/custom_sampling/samplers" + + FUNCTION = "get_sampler" + + def get_sampler(self, scale_ratio, scale_steps, upscale_method): + if scale_steps < 0: + scale_steps = None + sampler = comfy.samplers.KSAMPLER(sample_lcm_upscale, extra_options={"total_upscale": scale_ratio, "upscale_steps": scale_steps, "upscale_method": upscale_method}) + return (sampler, ) + +from comfy.k_diffusion.sampling import to_d +import comfy.model_patcher + +@torch.no_grad() +def sample_euler_pp(model, x, sigmas, extra_args=None, callback=None, disable=None): + extra_args = {} if extra_args is None else extra_args + + temp = [0] + def post_cfg_function(args): + temp[0] = args["uncond_denoised"] + return args["denoised"] + + model_options = extra_args.get("model_options", {}).copy() + extra_args["model_options"] = comfy.model_patcher.set_model_options_post_cfg_function(model_options, post_cfg_function, disable_cfg1_optimization=True) + + s_in = x.new_ones([x.shape[0]]) + for i in trange(len(sigmas) - 1, disable=disable): + sigma_hat = sigmas[i] + denoised = model(x, sigma_hat * s_in, **extra_args) + d = to_d(x - denoised + temp[0], sigmas[i], denoised) + if callback is not None: + callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigma_hat, 'denoised': denoised}) + dt = sigmas[i + 1] - sigma_hat + x = x + d * dt + return x + + +class SamplerEulerCFGpp: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"version": (["regular", "alternative"],),} + } + RETURN_TYPES = ("SAMPLER",) + # CATEGORY = "sampling/custom_sampling/samplers" + CATEGORY = "_for_testing" + + FUNCTION = "get_sampler" + + def get_sampler(self, version): + if version == "alternative": + sampler = comfy.samplers.KSAMPLER(sample_euler_pp) + else: + sampler = comfy.samplers.ksampler("euler_cfg_pp") + return (sampler, ) + +NODE_CLASS_MAPPINGS = { + "SamplerLCMUpscale": SamplerLCMUpscale, + "SamplerEulerCFGpp": SamplerEulerCFGpp, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "SamplerEulerCFGpp": "SamplerEulerCFG++", +} diff --git a/comfy_extras/nodes_align_your_steps.py b/comfy_extras/nodes_align_your_steps.py new file mode 100644 index 0000000000000000000000000000000000000000..8d856d0e8592414df823af27d53d421af7753f27 --- /dev/null +++ b/comfy_extras/nodes_align_your_steps.py @@ -0,0 +1,53 @@ +#from: https://research.nvidia.com/labs/toronto-ai/AlignYourSteps/howto.html +import numpy as np +import torch + +def loglinear_interp(t_steps, num_steps): + """ + Performs log-linear interpolation of a given array of decreasing numbers. + """ + xs = np.linspace(0, 1, len(t_steps)) + ys = np.log(t_steps[::-1]) + + new_xs = np.linspace(0, 1, num_steps) + new_ys = np.interp(new_xs, xs, ys) + + interped_ys = np.exp(new_ys)[::-1].copy() + return interped_ys + +NOISE_LEVELS = {"SD1": [14.6146412293, 6.4745760956, 3.8636745985, 2.6946151520, 1.8841921177, 1.3943805092, 0.9642583904, 0.6523686016, 0.3977456272, 0.1515232662, 0.0291671582], + "SDXL":[14.6146412293, 6.3184485287, 3.7681790315, 2.1811480769, 1.3405244945, 0.8620721141, 0.5550693289, 0.3798540708, 0.2332364134, 0.1114188177, 0.0291671582], + "SVD": [700.00, 54.5, 15.886, 7.977, 4.248, 1.789, 0.981, 0.403, 0.173, 0.034, 0.002]} + +class AlignYourStepsScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model_type": (["SD1", "SDXL", "SVD"], ), + "steps": ("INT", {"default": 10, "min": 1, "max": 10000}), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, model_type, steps, denoise): + total_steps = steps + if denoise < 1.0: + if denoise <= 0.0: + return (torch.FloatTensor([]),) + total_steps = round(steps * denoise) + + sigmas = NOISE_LEVELS[model_type][:] + if (steps + 1) != len(sigmas): + sigmas = loglinear_interp(sigmas, steps + 1) + + sigmas = sigmas[-(total_steps + 1):] + sigmas[-1] = 0 + return (torch.FloatTensor(sigmas), ) + +NODE_CLASS_MAPPINGS = { + "AlignYourStepsScheduler": AlignYourStepsScheduler, +} diff --git a/comfy_extras/nodes_attention_multiply.py b/comfy_extras/nodes_attention_multiply.py new file mode 100644 index 0000000000000000000000000000000000000000..4747eb39568afe9e19d34fd583531fcab1acba69 --- /dev/null +++ b/comfy_extras/nodes_attention_multiply.py @@ -0,0 +1,120 @@ + +def attention_multiply(attn, model, q, k, v, out): + m = model.clone() + sd = model.model_state_dict() + + for key in sd: + if key.endswith("{}.to_q.bias".format(attn)) or key.endswith("{}.to_q.weight".format(attn)): + m.add_patches({key: (None,)}, 0.0, q) + if key.endswith("{}.to_k.bias".format(attn)) or key.endswith("{}.to_k.weight".format(attn)): + m.add_patches({key: (None,)}, 0.0, k) + if key.endswith("{}.to_v.bias".format(attn)) or key.endswith("{}.to_v.weight".format(attn)): + m.add_patches({key: (None,)}, 0.0, v) + if key.endswith("{}.to_out.0.bias".format(attn)) or key.endswith("{}.to_out.0.weight".format(attn)): + m.add_patches({key: (None,)}, 0.0, out) + + return m + + +class UNetSelfAttentionMultiply: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "q": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "k": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "v": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "out": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "_for_testing/attention_experiments" + + def patch(self, model, q, k, v, out): + m = attention_multiply("attn1", model, q, k, v, out) + return (m, ) + +class UNetCrossAttentionMultiply: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "q": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "k": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "v": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "out": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "_for_testing/attention_experiments" + + def patch(self, model, q, k, v, out): + m = attention_multiply("attn2", model, q, k, v, out) + return (m, ) + +class CLIPAttentionMultiply: + @classmethod + def INPUT_TYPES(s): + return {"required": { "clip": ("CLIP",), + "q": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "k": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "v": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "out": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + }} + RETURN_TYPES = ("CLIP",) + FUNCTION = "patch" + + CATEGORY = "_for_testing/attention_experiments" + + def patch(self, clip, q, k, v, out): + m = clip.clone() + sd = m.patcher.model_state_dict() + + for key in sd: + if key.endswith("self_attn.q_proj.weight") or key.endswith("self_attn.q_proj.bias"): + m.add_patches({key: (None,)}, 0.0, q) + if key.endswith("self_attn.k_proj.weight") or key.endswith("self_attn.k_proj.bias"): + m.add_patches({key: (None,)}, 0.0, k) + if key.endswith("self_attn.v_proj.weight") or key.endswith("self_attn.v_proj.bias"): + m.add_patches({key: (None,)}, 0.0, v) + if key.endswith("self_attn.out_proj.weight") or key.endswith("self_attn.out_proj.bias"): + m.add_patches({key: (None,)}, 0.0, out) + return (m, ) + +class UNetTemporalAttentionMultiply: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "self_structural": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "self_temporal": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "cross_structural": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "cross_temporal": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "_for_testing/attention_experiments" + + def patch(self, model, self_structural, self_temporal, cross_structural, cross_temporal): + m = model.clone() + sd = model.model_state_dict() + + for k in sd: + if (k.endswith("attn1.to_out.0.bias") or k.endswith("attn1.to_out.0.weight")): + if '.time_stack.' in k: + m.add_patches({k: (None,)}, 0.0, self_temporal) + else: + m.add_patches({k: (None,)}, 0.0, self_structural) + elif (k.endswith("attn2.to_out.0.bias") or k.endswith("attn2.to_out.0.weight")): + if '.time_stack.' in k: + m.add_patches({k: (None,)}, 0.0, cross_temporal) + else: + m.add_patches({k: (None,)}, 0.0, cross_structural) + return (m, ) + +NODE_CLASS_MAPPINGS = { + "UNetSelfAttentionMultiply": UNetSelfAttentionMultiply, + "UNetCrossAttentionMultiply": UNetCrossAttentionMultiply, + "CLIPAttentionMultiply": CLIPAttentionMultiply, + "UNetTemporalAttentionMultiply": UNetTemporalAttentionMultiply, +} diff --git a/comfy_extras/nodes_audio.py b/comfy_extras/nodes_audio.py new file mode 100644 index 0000000000000000000000000000000000000000..3cb918e09d3d53885447cfda1d160ec5a0fceccf --- /dev/null +++ b/comfy_extras/nodes_audio.py @@ -0,0 +1,251 @@ +import torchaudio +import torch +import comfy.model_management +import folder_paths +import os +import io +import json +import struct +import random +import hashlib +import node_helpers +from comfy.cli_args import args + +class EmptyLatentAudio: + def __init__(self): + self.device = comfy.model_management.intermediate_device() + + @classmethod + def INPUT_TYPES(s): + return {"required": {"seconds": ("FLOAT", {"default": 47.6, "min": 1.0, "max": 1000.0, "step": 0.1}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096, "tooltip": "The number of latent images in the batch."}), + }} + RETURN_TYPES = ("LATENT",) + FUNCTION = "generate" + + CATEGORY = "latent/audio" + + def generate(self, seconds, batch_size): + length = round((seconds * 44100 / 2048) / 2) * 2 + latent = torch.zeros([batch_size, 64, length], device=self.device) + return ({"samples":latent, "type": "audio"}, ) + +class ConditioningStableAudio: + @classmethod + def INPUT_TYPES(s): + return {"required": {"positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "seconds_start": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1000.0, "step": 0.1}), + "seconds_total": ("FLOAT", {"default": 47.0, "min": 0.0, "max": 1000.0, "step": 0.1}), + }} + + RETURN_TYPES = ("CONDITIONING","CONDITIONING") + RETURN_NAMES = ("positive", "negative") + + FUNCTION = "append" + + CATEGORY = "conditioning" + + def append(self, positive, negative, seconds_start, seconds_total): + positive = node_helpers.conditioning_set_values(positive, {"seconds_start": seconds_start, "seconds_total": seconds_total}) + negative = node_helpers.conditioning_set_values(negative, {"seconds_start": seconds_start, "seconds_total": seconds_total}) + return (positive, negative) + +class VAEEncodeAudio: + @classmethod + def INPUT_TYPES(s): + return {"required": { "audio": ("AUDIO", ), "vae": ("VAE", )}} + RETURN_TYPES = ("LATENT",) + FUNCTION = "encode" + + CATEGORY = "latent/audio" + + def encode(self, vae, audio): + sample_rate = audio["sample_rate"] + if 44100 != sample_rate: + waveform = torchaudio.functional.resample(audio["waveform"], sample_rate, 44100) + else: + waveform = audio["waveform"] + + t = vae.encode(waveform.movedim(1, -1)) + return ({"samples":t}, ) + +class VAEDecodeAudio: + @classmethod + def INPUT_TYPES(s): + return {"required": { "samples": ("LATENT", ), "vae": ("VAE", )}} + RETURN_TYPES = ("AUDIO",) + FUNCTION = "decode" + + CATEGORY = "latent/audio" + + def decode(self, vae, samples): + audio = vae.decode(samples["samples"]).movedim(-1, 1) + std = torch.std(audio, dim=[1,2], keepdim=True) * 5.0 + std[std < 1.0] = 1.0 + audio /= std + return ({"waveform": audio, "sample_rate": 44100}, ) + + +def create_vorbis_comment_block(comment_dict, last_block): + vendor_string = b'ComfyUI' + vendor_length = len(vendor_string) + + comments = [] + for key, value in comment_dict.items(): + comment = f"{key}={value}".encode('utf-8') + comments.append(struct.pack('I', len(comment_data))[1:] + comment_data + + return comment_block + +def insert_or_replace_vorbis_comment(flac_io, comment_dict): + if len(comment_dict) == 0: + return flac_io + + flac_io.seek(4) + + blocks = [] + last_block = False + + while not last_block: + header = flac_io.read(4) + last_block = (header[0] & 0x80) != 0 + block_type = header[0] & 0x7F + block_length = struct.unpack('>I', b'\x00' + header[1:])[0] + block_data = flac_io.read(block_length) + + if block_type == 4 or block_type == 1: + pass + else: + header = bytes([(header[0] & (~0x80))]) + header[1:] + blocks.append(header + block_data) + + blocks.append(create_vorbis_comment_block(comment_dict, last_block=True)) + + new_flac_io = io.BytesIO() + new_flac_io.write(b'fLaC') + for block in blocks: + new_flac_io.write(block) + + new_flac_io.write(flac_io.read()) + return new_flac_io + + +class SaveAudio: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + self.type = "output" + self.prefix_append = "" + + @classmethod + def INPUT_TYPES(s): + return {"required": { "audio": ("AUDIO", ), + "filename_prefix": ("STRING", {"default": "audio/ComfyUI"})}, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, + } + + RETURN_TYPES = () + FUNCTION = "save_audio" + + OUTPUT_NODE = True + + CATEGORY = "audio" + + def save_audio(self, audio, filename_prefix="ComfyUI", prompt=None, extra_pnginfo=None): + filename_prefix += self.prefix_append + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir) + results = list() + + metadata = {} + if not args.disable_metadata: + if prompt is not None: + metadata["prompt"] = json.dumps(prompt) + if extra_pnginfo is not None: + for x in extra_pnginfo: + metadata[x] = json.dumps(extra_pnginfo[x]) + + for (batch_number, waveform) in enumerate(audio["waveform"].cpu()): + filename_with_batch_num = filename.replace("%batch_num%", str(batch_number)) + file = f"{filename_with_batch_num}_{counter:05}_.flac" + + buff = io.BytesIO() + torchaudio.save(buff, waveform, audio["sample_rate"], format="FLAC") + + buff = insert_or_replace_vorbis_comment(buff, metadata) + + with open(os.path.join(full_output_folder, file), 'wb') as f: + f.write(buff.getbuffer()) + + results.append({ + "filename": file, + "subfolder": subfolder, + "type": self.type + }) + counter += 1 + + return { "ui": { "audio": results } } + +class PreviewAudio(SaveAudio): + def __init__(self): + self.output_dir = folder_paths.get_temp_directory() + self.type = "temp" + self.prefix_append = "_temp_" + ''.join(random.choice("abcdefghijklmnopqrstupvxyz") for x in range(5)) + + @classmethod + def INPUT_TYPES(s): + return {"required": + {"audio": ("AUDIO", ), }, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, + } + +class LoadAudio: + @classmethod + def INPUT_TYPES(s): + input_dir = folder_paths.get_input_directory() + files = folder_paths.filter_files_content_types(os.listdir(input_dir), ["audio", "video"]) + return {"required": {"audio": (sorted(files), {"audio_upload": True})}} + + CATEGORY = "audio" + + RETURN_TYPES = ("AUDIO", ) + FUNCTION = "load" + + def load(self, audio): + audio_path = folder_paths.get_annotated_filepath(audio) + waveform, sample_rate = torchaudio.load(audio_path) + audio = {"waveform": waveform.unsqueeze(0), "sample_rate": sample_rate} + return (audio, ) + + @classmethod + def IS_CHANGED(s, audio): + image_path = folder_paths.get_annotated_filepath(audio) + m = hashlib.sha256() + with open(image_path, 'rb') as f: + m.update(f.read()) + return m.digest().hex() + + @classmethod + def VALIDATE_INPUTS(s, audio): + if not folder_paths.exists_annotated_filepath(audio): + return "Invalid audio file: {}".format(audio) + return True + +NODE_CLASS_MAPPINGS = { + "EmptyLatentAudio": EmptyLatentAudio, + "VAEEncodeAudio": VAEEncodeAudio, + "VAEDecodeAudio": VAEDecodeAudio, + "SaveAudio": SaveAudio, + "LoadAudio": LoadAudio, + "PreviewAudio": PreviewAudio, + "ConditioningStableAudio": ConditioningStableAudio, +} diff --git a/comfy_extras/nodes_canny.py b/comfy_extras/nodes_canny.py new file mode 100644 index 0000000000000000000000000000000000000000..d85e6b85691dcdcc55e31705039934846d466fc1 --- /dev/null +++ b/comfy_extras/nodes_canny.py @@ -0,0 +1,25 @@ +from kornia.filters import canny +import comfy.model_management + + +class Canny: + @classmethod + def INPUT_TYPES(s): + return {"required": {"image": ("IMAGE",), + "low_threshold": ("FLOAT", {"default": 0.4, "min": 0.01, "max": 0.99, "step": 0.01}), + "high_threshold": ("FLOAT", {"default": 0.8, "min": 0.01, "max": 0.99, "step": 0.01}) + }} + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "detect_edge" + + CATEGORY = "image/preprocessors" + + def detect_edge(self, image, low_threshold, high_threshold): + output = canny(image.to(comfy.model_management.get_torch_device()).movedim(-1, 1), low_threshold, high_threshold) + img_out = output[1].to(comfy.model_management.intermediate_device()).repeat(1, 3, 1, 1).movedim(1, -1) + return (img_out,) + +NODE_CLASS_MAPPINGS = { + "Canny": Canny, +} diff --git a/comfy_extras/nodes_clip_sdxl.py b/comfy_extras/nodes_clip_sdxl.py new file mode 100644 index 0000000000000000000000000000000000000000..14269caf352edee45d9f1ca49db3effd5b60b7fb --- /dev/null +++ b/comfy_extras/nodes_clip_sdxl.py @@ -0,0 +1,54 @@ +from nodes import MAX_RESOLUTION + +class CLIPTextEncodeSDXLRefiner: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "ascore": ("FLOAT", {"default": 6.0, "min": 0.0, "max": 1000.0, "step": 0.01}), + "width": ("INT", {"default": 1024.0, "min": 0, "max": MAX_RESOLUTION}), + "height": ("INT", {"default": 1024.0, "min": 0, "max": MAX_RESOLUTION}), + "text": ("STRING", {"multiline": True, "dynamicPrompts": True}), "clip": ("CLIP", ), + }} + RETURN_TYPES = ("CONDITIONING",) + FUNCTION = "encode" + + CATEGORY = "advanced/conditioning" + + def encode(self, clip, ascore, width, height, text): + tokens = clip.tokenize(text) + return (clip.encode_from_tokens_scheduled(tokens, add_dict={"aesthetic_score": ascore, "width": width, "height": height}), ) + +class CLIPTextEncodeSDXL: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "clip": ("CLIP", ), + "width": ("INT", {"default": 1024.0, "min": 0, "max": MAX_RESOLUTION}), + "height": ("INT", {"default": 1024.0, "min": 0, "max": MAX_RESOLUTION}), + "crop_w": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION}), + "crop_h": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION}), + "target_width": ("INT", {"default": 1024.0, "min": 0, "max": MAX_RESOLUTION}), + "target_height": ("INT", {"default": 1024.0, "min": 0, "max": MAX_RESOLUTION}), + "text_g": ("STRING", {"multiline": True, "dynamicPrompts": True}), + "text_l": ("STRING", {"multiline": True, "dynamicPrompts": True}), + }} + RETURN_TYPES = ("CONDITIONING",) + FUNCTION = "encode" + + CATEGORY = "advanced/conditioning" + + def encode(self, clip, width, height, crop_w, crop_h, target_width, target_height, text_g, text_l): + tokens = clip.tokenize(text_g) + tokens["l"] = clip.tokenize(text_l)["l"] + if len(tokens["l"]) != len(tokens["g"]): + empty = clip.tokenize("") + while len(tokens["l"]) < len(tokens["g"]): + tokens["l"] += empty["l"] + while len(tokens["l"]) > len(tokens["g"]): + tokens["g"] += empty["g"] + return (clip.encode_from_tokens_scheduled(tokens, add_dict={"width": width, "height": height, "crop_w": crop_w, "crop_h": crop_h, "target_width": target_width, "target_height": target_height}), ) + +NODE_CLASS_MAPPINGS = { + "CLIPTextEncodeSDXLRefiner": CLIPTextEncodeSDXLRefiner, + "CLIPTextEncodeSDXL": CLIPTextEncodeSDXL, +} diff --git a/comfy_extras/nodes_compositing.py b/comfy_extras/nodes_compositing.py new file mode 100644 index 0000000000000000000000000000000000000000..2f994fa11d370d31dc5412da90d0582fe6bd6159 --- /dev/null +++ b/comfy_extras/nodes_compositing.py @@ -0,0 +1,214 @@ +import torch +import comfy.utils +from enum import Enum + +def resize_mask(mask, shape): + return torch.nn.functional.interpolate(mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])), size=(shape[0], shape[1]), mode="bilinear").squeeze(1) + +class PorterDuffMode(Enum): + ADD = 0 + CLEAR = 1 + DARKEN = 2 + DST = 3 + DST_ATOP = 4 + DST_IN = 5 + DST_OUT = 6 + DST_OVER = 7 + LIGHTEN = 8 + MULTIPLY = 9 + OVERLAY = 10 + SCREEN = 11 + SRC = 12 + SRC_ATOP = 13 + SRC_IN = 14 + SRC_OUT = 15 + SRC_OVER = 16 + XOR = 17 + + +def porter_duff_composite(src_image: torch.Tensor, src_alpha: torch.Tensor, dst_image: torch.Tensor, dst_alpha: torch.Tensor, mode: PorterDuffMode): + # convert mask to alpha + src_alpha = 1 - src_alpha + dst_alpha = 1 - dst_alpha + # premultiply alpha + src_image = src_image * src_alpha + dst_image = dst_image * dst_alpha + + # composite ops below assume alpha-premultiplied images + if mode == PorterDuffMode.ADD: + out_alpha = torch.clamp(src_alpha + dst_alpha, 0, 1) + out_image = torch.clamp(src_image + dst_image, 0, 1) + elif mode == PorterDuffMode.CLEAR: + out_alpha = torch.zeros_like(dst_alpha) + out_image = torch.zeros_like(dst_image) + elif mode == PorterDuffMode.DARKEN: + out_alpha = src_alpha + dst_alpha - src_alpha * dst_alpha + out_image = (1 - dst_alpha) * src_image + (1 - src_alpha) * dst_image + torch.min(src_image, dst_image) + elif mode == PorterDuffMode.DST: + out_alpha = dst_alpha + out_image = dst_image + elif mode == PorterDuffMode.DST_ATOP: + out_alpha = src_alpha + out_image = src_alpha * dst_image + (1 - dst_alpha) * src_image + elif mode == PorterDuffMode.DST_IN: + out_alpha = src_alpha * dst_alpha + out_image = dst_image * src_alpha + elif mode == PorterDuffMode.DST_OUT: + out_alpha = (1 - src_alpha) * dst_alpha + out_image = (1 - src_alpha) * dst_image + elif mode == PorterDuffMode.DST_OVER: + out_alpha = dst_alpha + (1 - dst_alpha) * src_alpha + out_image = dst_image + (1 - dst_alpha) * src_image + elif mode == PorterDuffMode.LIGHTEN: + out_alpha = src_alpha + dst_alpha - src_alpha * dst_alpha + out_image = (1 - dst_alpha) * src_image + (1 - src_alpha) * dst_image + torch.max(src_image, dst_image) + elif mode == PorterDuffMode.MULTIPLY: + out_alpha = src_alpha * dst_alpha + out_image = src_image * dst_image + elif mode == PorterDuffMode.OVERLAY: + out_alpha = src_alpha + dst_alpha - src_alpha * dst_alpha + out_image = torch.where(2 * dst_image < dst_alpha, 2 * src_image * dst_image, + src_alpha * dst_alpha - 2 * (dst_alpha - src_image) * (src_alpha - dst_image)) + elif mode == PorterDuffMode.SCREEN: + out_alpha = src_alpha + dst_alpha - src_alpha * dst_alpha + out_image = src_image + dst_image - src_image * dst_image + elif mode == PorterDuffMode.SRC: + out_alpha = src_alpha + out_image = src_image + elif mode == PorterDuffMode.SRC_ATOP: + out_alpha = dst_alpha + out_image = dst_alpha * src_image + (1 - src_alpha) * dst_image + elif mode == PorterDuffMode.SRC_IN: + out_alpha = src_alpha * dst_alpha + out_image = src_image * dst_alpha + elif mode == PorterDuffMode.SRC_OUT: + out_alpha = (1 - dst_alpha) * src_alpha + out_image = (1 - dst_alpha) * src_image + elif mode == PorterDuffMode.SRC_OVER: + out_alpha = src_alpha + (1 - src_alpha) * dst_alpha + out_image = src_image + (1 - src_alpha) * dst_image + elif mode == PorterDuffMode.XOR: + out_alpha = (1 - dst_alpha) * src_alpha + (1 - src_alpha) * dst_alpha + out_image = (1 - dst_alpha) * src_image + (1 - src_alpha) * dst_image + else: + return None, None + + # back to non-premultiplied alpha + out_image = torch.where(out_alpha > 1e-5, out_image / out_alpha, torch.zeros_like(out_image)) + out_image = torch.clamp(out_image, 0, 1) + # convert alpha to mask + out_alpha = 1 - out_alpha + return out_image, out_alpha + + +class PorterDuffImageComposite: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "source": ("IMAGE",), + "source_alpha": ("MASK",), + "destination": ("IMAGE",), + "destination_alpha": ("MASK",), + "mode": ([mode.name for mode in PorterDuffMode], {"default": PorterDuffMode.DST.name}), + }, + } + + RETURN_TYPES = ("IMAGE", "MASK") + FUNCTION = "composite" + CATEGORY = "mask/compositing" + + def composite(self, source: torch.Tensor, source_alpha: torch.Tensor, destination: torch.Tensor, destination_alpha: torch.Tensor, mode): + batch_size = min(len(source), len(source_alpha), len(destination), len(destination_alpha)) + out_images = [] + out_alphas = [] + + for i in range(batch_size): + src_image = source[i] + dst_image = destination[i] + + assert src_image.shape[2] == dst_image.shape[2] # inputs need to have same number of channels + + src_alpha = source_alpha[i].unsqueeze(2) + dst_alpha = destination_alpha[i].unsqueeze(2) + + if dst_alpha.shape[:2] != dst_image.shape[:2]: + upscale_input = dst_alpha.unsqueeze(0).permute(0, 3, 1, 2) + upscale_output = comfy.utils.common_upscale(upscale_input, dst_image.shape[1], dst_image.shape[0], upscale_method='bicubic', crop='center') + dst_alpha = upscale_output.permute(0, 2, 3, 1).squeeze(0) + if src_image.shape != dst_image.shape: + upscale_input = src_image.unsqueeze(0).permute(0, 3, 1, 2) + upscale_output = comfy.utils.common_upscale(upscale_input, dst_image.shape[1], dst_image.shape[0], upscale_method='bicubic', crop='center') + src_image = upscale_output.permute(0, 2, 3, 1).squeeze(0) + if src_alpha.shape != dst_alpha.shape: + upscale_input = src_alpha.unsqueeze(0).permute(0, 3, 1, 2) + upscale_output = comfy.utils.common_upscale(upscale_input, dst_alpha.shape[1], dst_alpha.shape[0], upscale_method='bicubic', crop='center') + src_alpha = upscale_output.permute(0, 2, 3, 1).squeeze(0) + + out_image, out_alpha = porter_duff_composite(src_image, src_alpha, dst_image, dst_alpha, PorterDuffMode[mode]) + + out_images.append(out_image) + out_alphas.append(out_alpha.squeeze(2)) + + result = (torch.stack(out_images), torch.stack(out_alphas)) + return result + + +class SplitImageWithAlpha: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + } + } + + CATEGORY = "mask/compositing" + RETURN_TYPES = ("IMAGE", "MASK") + FUNCTION = "split_image_with_alpha" + + def split_image_with_alpha(self, image: torch.Tensor): + out_images = [i[:,:,:3] for i in image] + out_alphas = [i[:,:,3] if i.shape[2] > 3 else torch.ones_like(i[:,:,0]) for i in image] + result = (torch.stack(out_images), 1.0 - torch.stack(out_alphas)) + return result + + +class JoinImageWithAlpha: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "alpha": ("MASK",), + } + } + + CATEGORY = "mask/compositing" + RETURN_TYPES = ("IMAGE",) + FUNCTION = "join_image_with_alpha" + + def join_image_with_alpha(self, image: torch.Tensor, alpha: torch.Tensor): + batch_size = min(len(image), len(alpha)) + out_images = [] + + alpha = 1.0 - resize_mask(alpha, image.shape[1:]) + for i in range(batch_size): + out_images.append(torch.cat((image[i][:,:,:3], alpha[i].unsqueeze(2)), dim=2)) + + result = (torch.stack(out_images),) + return result + + +NODE_CLASS_MAPPINGS = { + "PorterDuffImageComposite": PorterDuffImageComposite, + "SplitImageWithAlpha": SplitImageWithAlpha, + "JoinImageWithAlpha": JoinImageWithAlpha, +} + + +NODE_DISPLAY_NAME_MAPPINGS = { + "PorterDuffImageComposite": "Porter-Duff Image Composite", + "SplitImageWithAlpha": "Split Image with Alpha", + "JoinImageWithAlpha": "Join Image with Alpha", +} diff --git a/comfy_extras/nodes_cond.py b/comfy_extras/nodes_cond.py new file mode 100644 index 0000000000000000000000000000000000000000..4c3a1d5bf63e732c1d738b49e47da8ff7714f8a1 --- /dev/null +++ b/comfy_extras/nodes_cond.py @@ -0,0 +1,25 @@ + + +class CLIPTextEncodeControlnet: + @classmethod + def INPUT_TYPES(s): + return {"required": {"clip": ("CLIP", ), "conditioning": ("CONDITIONING", ), "text": ("STRING", {"multiline": True, "dynamicPrompts": True})}} + RETURN_TYPES = ("CONDITIONING",) + FUNCTION = "encode" + + CATEGORY = "_for_testing/conditioning" + + def encode(self, clip, conditioning, text): + tokens = clip.tokenize(text) + cond, pooled = clip.encode_from_tokens(tokens, return_pooled=True) + c = [] + for t in conditioning: + n = [t[0], t[1].copy()] + n[1]['cross_attn_controlnet'] = cond + n[1]['pooled_output_controlnet'] = pooled + c.append(n) + return (c, ) + +NODE_CLASS_MAPPINGS = { + "CLIPTextEncodeControlnet": CLIPTextEncodeControlnet +} diff --git a/comfy_extras/nodes_controlnet.py b/comfy_extras/nodes_controlnet.py new file mode 100644 index 0000000000000000000000000000000000000000..2d20e1fed7c26c8115f4b9878b0b54911e7a2e7f --- /dev/null +++ b/comfy_extras/nodes_controlnet.py @@ -0,0 +1,60 @@ +from comfy.cldm.control_types import UNION_CONTROLNET_TYPES +import nodes +import comfy.utils + +class SetUnionControlNetType: + @classmethod + def INPUT_TYPES(s): + return {"required": {"control_net": ("CONTROL_NET", ), + "type": (["auto"] + list(UNION_CONTROLNET_TYPES.keys()),) + }} + + CATEGORY = "conditioning/controlnet" + RETURN_TYPES = ("CONTROL_NET",) + + FUNCTION = "set_controlnet_type" + + def set_controlnet_type(self, control_net, type): + control_net = control_net.copy() + type_number = UNION_CONTROLNET_TYPES.get(type, -1) + if type_number >= 0: + control_net.set_extra_arg("control_type", [type_number]) + else: + control_net.set_extra_arg("control_type", []) + + return (control_net,) + +class ControlNetInpaintingAliMamaApply(nodes.ControlNetApplyAdvanced): + @classmethod + def INPUT_TYPES(s): + return {"required": {"positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "control_net": ("CONTROL_NET", ), + "vae": ("VAE", ), + "image": ("IMAGE", ), + "mask": ("MASK", ), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}) + }} + + FUNCTION = "apply_inpaint_controlnet" + + CATEGORY = "conditioning/controlnet" + + def apply_inpaint_controlnet(self, positive, negative, control_net, vae, image, mask, strength, start_percent, end_percent): + extra_concat = [] + if control_net.concat_mask: + mask = 1.0 - mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])) + mask_apply = comfy.utils.common_upscale(mask, image.shape[2], image.shape[1], "bilinear", "center").round() + image = image * mask_apply.movedim(1, -1).repeat(1, 1, 1, image.shape[3]) + extra_concat = [mask] + + return self.apply_controlnet(positive, negative, control_net, image, strength, start_percent, end_percent, vae=vae, extra_concat=extra_concat) + + + +NODE_CLASS_MAPPINGS = { + "SetUnionControlNetType": SetUnionControlNetType, + "ControlNetInpaintingAliMamaApply": ControlNetInpaintingAliMamaApply, +} diff --git a/comfy_extras/nodes_cosmos.py b/comfy_extras/nodes_cosmos.py new file mode 100644 index 0000000000000000000000000000000000000000..bd35ddb061cadac78ffd1796191c3f65168482d2 --- /dev/null +++ b/comfy_extras/nodes_cosmos.py @@ -0,0 +1,82 @@ +import nodes +import torch +import comfy.model_management +import comfy.utils + + +class EmptyCosmosLatentVideo: + @classmethod + def INPUT_TYPES(s): + return {"required": { "width": ("INT", {"default": 1280, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "height": ("INT", {"default": 704, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "length": ("INT", {"default": 121, "min": 1, "max": nodes.MAX_RESOLUTION, "step": 8}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096})}} + RETURN_TYPES = ("LATENT",) + FUNCTION = "generate" + + CATEGORY = "latent/video" + + def generate(self, width, height, length, batch_size=1): + latent = torch.zeros([batch_size, 16, ((length - 1) // 8) + 1, height // 8, width // 8], device=comfy.model_management.intermediate_device()) + return ({"samples": latent}, ) + + +def vae_encode_with_padding(vae, image, width, height, length, padding=0): + pixels = comfy.utils.common_upscale(image[..., :3].movedim(-1, 1), width, height, "bilinear", "center").movedim(1, -1) + pixel_len = min(pixels.shape[0], length) + padded_length = min(length, (((pixel_len - 1) // 8) + 1 + padding) * 8 - 7) + padded_pixels = torch.ones((padded_length, height, width, 3)) * 0.5 + padded_pixels[:pixel_len] = pixels[:pixel_len] + latent_len = ((pixel_len - 1) // 8) + 1 + latent_temp = vae.encode(padded_pixels) + return latent_temp[:, :, :latent_len] + + +class CosmosImageToVideoLatent: + @classmethod + def INPUT_TYPES(s): + return {"required": {"vae": ("VAE", ), + "width": ("INT", {"default": 1280, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "height": ("INT", {"default": 704, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "length": ("INT", {"default": 121, "min": 1, "max": nodes.MAX_RESOLUTION, "step": 8}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096}), + }, + "optional": {"start_image": ("IMAGE", ), + "end_image": ("IMAGE", ), + }} + + + RETURN_TYPES = ("LATENT",) + FUNCTION = "encode" + + CATEGORY = "conditioning/inpaint" + + def encode(self, vae, width, height, length, batch_size, start_image=None, end_image=None): + latent = torch.zeros([1, 16, ((length - 1) // 8) + 1, height // 8, width // 8], device=comfy.model_management.intermediate_device()) + if start_image is None and end_image is None: + out_latent = {} + out_latent["samples"] = latent + return (out_latent,) + + mask = torch.ones([latent.shape[0], 1, ((length - 1) // 8) + 1, latent.shape[-2], latent.shape[-1]], device=comfy.model_management.intermediate_device()) + + if start_image is not None: + latent_temp = vae_encode_with_padding(vae, start_image, width, height, length, padding=1) + latent[:, :, :latent_temp.shape[-3]] = latent_temp + mask[:, :, :latent_temp.shape[-3]] *= 0.0 + + if end_image is not None: + latent_temp = vae_encode_with_padding(vae, end_image, width, height, length, padding=0) + latent[:, :, -latent_temp.shape[-3]:] = latent_temp + mask[:, :, -latent_temp.shape[-3]:] *= 0.0 + + out_latent = {} + out_latent["samples"] = latent.repeat((batch_size, ) + (1,) * (latent.ndim - 1)) + out_latent["noise_mask"] = mask.repeat((batch_size, ) + (1,) * (mask.ndim - 1)) + return (out_latent,) + + +NODE_CLASS_MAPPINGS = { + "EmptyCosmosLatentVideo": EmptyCosmosLatentVideo, + "CosmosImageToVideoLatent": CosmosImageToVideoLatent, +} diff --git a/comfy_extras/nodes_custom_sampler.py b/comfy_extras/nodes_custom_sampler.py new file mode 100644 index 0000000000000000000000000000000000000000..576fc3b2cbe92b6630c1c3a4b45b38f7d373f261 --- /dev/null +++ b/comfy_extras/nodes_custom_sampler.py @@ -0,0 +1,744 @@ +import comfy.samplers +import comfy.sample +from comfy.k_diffusion import sampling as k_diffusion_sampling +import latent_preview +import torch +import comfy.utils +import node_helpers + + +class BasicScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model": ("MODEL",), + "scheduler": (comfy.samplers.SCHEDULER_NAMES, ), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, model, scheduler, steps, denoise): + total_steps = steps + if denoise < 1.0: + if denoise <= 0.0: + return (torch.FloatTensor([]),) + total_steps = int(steps/denoise) + + sigmas = comfy.samplers.calculate_sigmas(model.get_model_object("model_sampling"), scheduler, total_steps).cpu() + sigmas = sigmas[-(steps + 1):] + return (sigmas, ) + + +class KarrasScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "sigma_max": ("FLOAT", {"default": 14.614642, "min": 0.0, "max": 5000.0, "step":0.01, "round": False}), + "sigma_min": ("FLOAT", {"default": 0.0291675, "min": 0.0, "max": 5000.0, "step":0.01, "round": False}), + "rho": ("FLOAT", {"default": 7.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, steps, sigma_max, sigma_min, rho): + sigmas = k_diffusion_sampling.get_sigmas_karras(n=steps, sigma_min=sigma_min, sigma_max=sigma_max, rho=rho) + return (sigmas, ) + +class ExponentialScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "sigma_max": ("FLOAT", {"default": 14.614642, "min": 0.0, "max": 5000.0, "step":0.01, "round": False}), + "sigma_min": ("FLOAT", {"default": 0.0291675, "min": 0.0, "max": 5000.0, "step":0.01, "round": False}), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, steps, sigma_max, sigma_min): + sigmas = k_diffusion_sampling.get_sigmas_exponential(n=steps, sigma_min=sigma_min, sigma_max=sigma_max) + return (sigmas, ) + +class PolyexponentialScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "sigma_max": ("FLOAT", {"default": 14.614642, "min": 0.0, "max": 5000.0, "step":0.01, "round": False}), + "sigma_min": ("FLOAT", {"default": 0.0291675, "min": 0.0, "max": 5000.0, "step":0.01, "round": False}), + "rho": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, steps, sigma_max, sigma_min, rho): + sigmas = k_diffusion_sampling.get_sigmas_polyexponential(n=steps, sigma_min=sigma_min, sigma_max=sigma_max, rho=rho) + return (sigmas, ) + +class LaplaceScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "sigma_max": ("FLOAT", {"default": 14.614642, "min": 0.0, "max": 5000.0, "step":0.01, "round": False}), + "sigma_min": ("FLOAT", {"default": 0.0291675, "min": 0.0, "max": 5000.0, "step":0.01, "round": False}), + "mu": ("FLOAT", {"default": 0.0, "min": -10.0, "max": 10.0, "step":0.1, "round": False}), + "beta": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 10.0, "step":0.1, "round": False}), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, steps, sigma_max, sigma_min, mu, beta): + sigmas = k_diffusion_sampling.get_sigmas_laplace(n=steps, sigma_min=sigma_min, sigma_max=sigma_max, mu=mu, beta=beta) + return (sigmas, ) + + +class SDTurboScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model": ("MODEL",), + "steps": ("INT", {"default": 1, "min": 1, "max": 10}), + "denoise": ("FLOAT", {"default": 1.0, "min": 0, "max": 1.0, "step": 0.01}), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, model, steps, denoise): + start_step = 10 - int(10 * denoise) + timesteps = torch.flip(torch.arange(1, 11) * 100 - 1, (0,))[start_step:start_step + steps] + sigmas = model.get_model_object("model_sampling").sigma(timesteps) + sigmas = torch.cat([sigmas, sigmas.new_zeros([1])]) + return (sigmas, ) + +class BetaSamplingScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model": ("MODEL",), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "alpha": ("FLOAT", {"default": 0.6, "min": 0.0, "max": 50.0, "step":0.01, "round": False}), + "beta": ("FLOAT", {"default": 0.6, "min": 0.0, "max": 50.0, "step":0.01, "round": False}), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, model, steps, alpha, beta): + sigmas = comfy.samplers.beta_scheduler(model.get_model_object("model_sampling"), steps, alpha=alpha, beta=beta) + return (sigmas, ) + +class VPScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "beta_d": ("FLOAT", {"default": 19.9, "min": 0.0, "max": 5000.0, "step":0.01, "round": False}), #TODO: fix default values + "beta_min": ("FLOAT", {"default": 0.1, "min": 0.0, "max": 5000.0, "step":0.01, "round": False}), + "eps_s": ("FLOAT", {"default": 0.001, "min": 0.0, "max": 1.0, "step":0.0001, "round": False}), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, steps, beta_d, beta_min, eps_s): + sigmas = k_diffusion_sampling.get_sigmas_vp(n=steps, beta_d=beta_d, beta_min=beta_min, eps_s=eps_s) + return (sigmas, ) + +class SplitSigmas: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"sigmas": ("SIGMAS", ), + "step": ("INT", {"default": 0, "min": 0, "max": 10000}), + } + } + RETURN_TYPES = ("SIGMAS","SIGMAS") + RETURN_NAMES = ("high_sigmas", "low_sigmas") + CATEGORY = "sampling/custom_sampling/sigmas" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, sigmas, step): + sigmas1 = sigmas[:step + 1] + sigmas2 = sigmas[step:] + return (sigmas1, sigmas2) + +class SplitSigmasDenoise: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"sigmas": ("SIGMAS", ), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + } + } + RETURN_TYPES = ("SIGMAS","SIGMAS") + RETURN_NAMES = ("high_sigmas", "low_sigmas") + CATEGORY = "sampling/custom_sampling/sigmas" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, sigmas, denoise): + steps = max(sigmas.shape[-1] - 1, 0) + total_steps = round(steps * denoise) + sigmas1 = sigmas[:-(total_steps)] + sigmas2 = sigmas[-(total_steps + 1):] + return (sigmas1, sigmas2) + +class FlipSigmas: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"sigmas": ("SIGMAS", ), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/sigmas" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, sigmas): + if len(sigmas) == 0: + return (sigmas,) + + sigmas = sigmas.flip(0) + if sigmas[0] == 0: + sigmas[0] = 0.0001 + return (sigmas,) + +class SetFirstSigma: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"sigmas": ("SIGMAS", ), + "sigma": ("FLOAT", {"default": 136.0, "min": 0.0, "max": 20000.0, "step": 0.001, "round": False}), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/sigmas" + + FUNCTION = "set_first_sigma" + + def set_first_sigma(self, sigmas, sigma): + sigmas = sigmas.clone() + sigmas[0] = sigma + return (sigmas, ) + +class KSamplerSelect: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"sampler_name": (comfy.samplers.SAMPLER_NAMES, ), + } + } + RETURN_TYPES = ("SAMPLER",) + CATEGORY = "sampling/custom_sampling/samplers" + + FUNCTION = "get_sampler" + + def get_sampler(self, sampler_name): + sampler = comfy.samplers.sampler_object(sampler_name) + return (sampler, ) + +class SamplerDPMPP_3M_SDE: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"eta": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "s_noise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "noise_device": (['gpu', 'cpu'], ), + } + } + RETURN_TYPES = ("SAMPLER",) + CATEGORY = "sampling/custom_sampling/samplers" + + FUNCTION = "get_sampler" + + def get_sampler(self, eta, s_noise, noise_device): + if noise_device == 'cpu': + sampler_name = "dpmpp_3m_sde" + else: + sampler_name = "dpmpp_3m_sde_gpu" + sampler = comfy.samplers.ksampler(sampler_name, {"eta": eta, "s_noise": s_noise}) + return (sampler, ) + +class SamplerDPMPP_2M_SDE: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"solver_type": (['midpoint', 'heun'], ), + "eta": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "s_noise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "noise_device": (['gpu', 'cpu'], ), + } + } + RETURN_TYPES = ("SAMPLER",) + CATEGORY = "sampling/custom_sampling/samplers" + + FUNCTION = "get_sampler" + + def get_sampler(self, solver_type, eta, s_noise, noise_device): + if noise_device == 'cpu': + sampler_name = "dpmpp_2m_sde" + else: + sampler_name = "dpmpp_2m_sde_gpu" + sampler = comfy.samplers.ksampler(sampler_name, {"eta": eta, "s_noise": s_noise, "solver_type": solver_type}) + return (sampler, ) + + +class SamplerDPMPP_SDE: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"eta": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "s_noise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "r": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "noise_device": (['gpu', 'cpu'], ), + } + } + RETURN_TYPES = ("SAMPLER",) + CATEGORY = "sampling/custom_sampling/samplers" + + FUNCTION = "get_sampler" + + def get_sampler(self, eta, s_noise, r, noise_device): + if noise_device == 'cpu': + sampler_name = "dpmpp_sde" + else: + sampler_name = "dpmpp_sde_gpu" + sampler = comfy.samplers.ksampler(sampler_name, {"eta": eta, "s_noise": s_noise, "r": r}) + return (sampler, ) + +class SamplerDPMPP_2S_Ancestral: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"eta": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "s_noise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + } + } + RETURN_TYPES = ("SAMPLER",) + CATEGORY = "sampling/custom_sampling/samplers" + + FUNCTION = "get_sampler" + + def get_sampler(self, eta, s_noise): + sampler = comfy.samplers.ksampler("dpmpp_2s_ancestral", {"eta": eta, "s_noise": s_noise}) + return (sampler, ) + +class SamplerEulerAncestral: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"eta": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "s_noise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + } + } + RETURN_TYPES = ("SAMPLER",) + CATEGORY = "sampling/custom_sampling/samplers" + + FUNCTION = "get_sampler" + + def get_sampler(self, eta, s_noise): + sampler = comfy.samplers.ksampler("euler_ancestral", {"eta": eta, "s_noise": s_noise}) + return (sampler, ) + +class SamplerEulerAncestralCFGPP: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "eta": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step":0.01, "round": False}), + "s_noise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step":0.01, "round": False}), + }} + RETURN_TYPES = ("SAMPLER",) + CATEGORY = "sampling/custom_sampling/samplers" + + FUNCTION = "get_sampler" + + def get_sampler(self, eta, s_noise): + sampler = comfy.samplers.ksampler( + "euler_ancestral_cfg_pp", + {"eta": eta, "s_noise": s_noise}) + return (sampler, ) + +class SamplerLMS: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"order": ("INT", {"default": 4, "min": 1, "max": 100}), + } + } + RETURN_TYPES = ("SAMPLER",) + CATEGORY = "sampling/custom_sampling/samplers" + + FUNCTION = "get_sampler" + + def get_sampler(self, order): + sampler = comfy.samplers.ksampler("lms", {"order": order}) + return (sampler, ) + +class SamplerDPMAdaptative: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"order": ("INT", {"default": 3, "min": 2, "max": 3}), + "rtol": ("FLOAT", {"default": 0.05, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "atol": ("FLOAT", {"default": 0.0078, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "h_init": ("FLOAT", {"default": 0.05, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "pcoeff": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "icoeff": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "dcoeff": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "accept_safety": ("FLOAT", {"default": 0.81, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "eta": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + "s_noise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.01, "round": False}), + } + } + RETURN_TYPES = ("SAMPLER",) + CATEGORY = "sampling/custom_sampling/samplers" + + FUNCTION = "get_sampler" + + def get_sampler(self, order, rtol, atol, h_init, pcoeff, icoeff, dcoeff, accept_safety, eta, s_noise): + sampler = comfy.samplers.ksampler("dpm_adaptive", {"order": order, "rtol": rtol, "atol": atol, "h_init": h_init, "pcoeff": pcoeff, + "icoeff": icoeff, "dcoeff": dcoeff, "accept_safety": accept_safety, "eta": eta, + "s_noise":s_noise }) + return (sampler, ) + +class Noise_EmptyNoise: + def __init__(self): + self.seed = 0 + + def generate_noise(self, input_latent): + latent_image = input_latent["samples"] + return torch.zeros(latent_image.shape, dtype=latent_image.dtype, layout=latent_image.layout, device="cpu") + + +class Noise_RandomNoise: + def __init__(self, seed): + self.seed = seed + + def generate_noise(self, input_latent): + latent_image = input_latent["samples"] + batch_inds = input_latent["batch_index"] if "batch_index" in input_latent else None + return comfy.sample.prepare_noise(latent_image, self.seed, batch_inds) + +class SamplerCustom: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model": ("MODEL",), + "add_noise": ("BOOLEAN", {"default": True}), + "noise_seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step":0.1, "round": 0.01}), + "positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "sampler": ("SAMPLER", ), + "sigmas": ("SIGMAS", ), + "latent_image": ("LATENT", ), + } + } + + RETURN_TYPES = ("LATENT","LATENT") + RETURN_NAMES = ("output", "denoised_output") + + FUNCTION = "sample" + + CATEGORY = "sampling/custom_sampling" + + def sample(self, model, add_noise, noise_seed, cfg, positive, negative, sampler, sigmas, latent_image): + latent = latent_image + latent_image = latent["samples"] + latent = latent.copy() + latent_image = comfy.sample.fix_empty_latent_channels(model, latent_image) + latent["samples"] = latent_image + + if not add_noise: + noise = Noise_EmptyNoise().generate_noise(latent) + else: + noise = Noise_RandomNoise(noise_seed).generate_noise(latent) + + noise_mask = None + if "noise_mask" in latent: + noise_mask = latent["noise_mask"] + + x0_output = {} + callback = latent_preview.prepare_callback(model, sigmas.shape[-1] - 1, x0_output) + + disable_pbar = not comfy.utils.PROGRESS_BAR_ENABLED + samples = comfy.sample.sample_custom(model, noise, cfg, sampler, sigmas, positive, negative, latent_image, noise_mask=noise_mask, callback=callback, disable_pbar=disable_pbar, seed=noise_seed) + + out = latent.copy() + out["samples"] = samples + if "x0" in x0_output: + out_denoised = latent.copy() + out_denoised["samples"] = model.model.process_latent_out(x0_output["x0"].cpu()) + else: + out_denoised = out + return (out, out_denoised) + +class Guider_Basic(comfy.samplers.CFGGuider): + def set_conds(self, positive): + self.inner_set_conds({"positive": positive}) + +class BasicGuider: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model": ("MODEL",), + "conditioning": ("CONDITIONING", ), + } + } + + RETURN_TYPES = ("GUIDER",) + + FUNCTION = "get_guider" + CATEGORY = "sampling/custom_sampling/guiders" + + def get_guider(self, model, conditioning): + guider = Guider_Basic(model) + guider.set_conds(conditioning) + return (guider,) + +class CFGGuider: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model": ("MODEL",), + "positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step":0.1, "round": 0.01}), + } + } + + RETURN_TYPES = ("GUIDER",) + + FUNCTION = "get_guider" + CATEGORY = "sampling/custom_sampling/guiders" + + def get_guider(self, model, positive, negative, cfg): + guider = comfy.samplers.CFGGuider(model) + guider.set_conds(positive, negative) + guider.set_cfg(cfg) + return (guider,) + +class Guider_DualCFG(comfy.samplers.CFGGuider): + def set_cfg(self, cfg1, cfg2): + self.cfg1 = cfg1 + self.cfg2 = cfg2 + + def set_conds(self, positive, middle, negative): + middle = node_helpers.conditioning_set_values(middle, {"prompt_type": "negative"}) + self.inner_set_conds({"positive": positive, "middle": middle, "negative": negative}) + + def predict_noise(self, x, timestep, model_options={}, seed=None): + negative_cond = self.conds.get("negative", None) + middle_cond = self.conds.get("middle", None) + + out = comfy.samplers.calc_cond_batch(self.inner_model, [negative_cond, middle_cond, self.conds.get("positive", None)], x, timestep, model_options) + return comfy.samplers.cfg_function(self.inner_model, out[1], out[0], self.cfg2, x, timestep, model_options=model_options, cond=middle_cond, uncond=negative_cond) + (out[2] - out[1]) * self.cfg1 + +class DualCFGGuider: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model": ("MODEL",), + "cond1": ("CONDITIONING", ), + "cond2": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "cfg_conds": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step":0.1, "round": 0.01}), + "cfg_cond2_negative": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step":0.1, "round": 0.01}), + } + } + + RETURN_TYPES = ("GUIDER",) + + FUNCTION = "get_guider" + CATEGORY = "sampling/custom_sampling/guiders" + + def get_guider(self, model, cond1, cond2, negative, cfg_conds, cfg_cond2_negative): + guider = Guider_DualCFG(model) + guider.set_conds(cond1, cond2, negative) + guider.set_cfg(cfg_conds, cfg_cond2_negative) + return (guider,) + +class DisableNoise: + @classmethod + def INPUT_TYPES(s): + return {"required":{ + } + } + + RETURN_TYPES = ("NOISE",) + FUNCTION = "get_noise" + CATEGORY = "sampling/custom_sampling/noise" + + def get_noise(self): + return (Noise_EmptyNoise(),) + + +class RandomNoise(DisableNoise): + @classmethod + def INPUT_TYPES(s): + return {"required":{ + "noise_seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + } + } + + def get_noise(self, noise_seed): + return (Noise_RandomNoise(noise_seed),) + + +class SamplerCustomAdvanced: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"noise": ("NOISE", ), + "guider": ("GUIDER", ), + "sampler": ("SAMPLER", ), + "sigmas": ("SIGMAS", ), + "latent_image": ("LATENT", ), + } + } + + RETURN_TYPES = ("LATENT","LATENT") + RETURN_NAMES = ("output", "denoised_output") + + FUNCTION = "sample" + + CATEGORY = "sampling/custom_sampling" + + def sample(self, noise, guider, sampler, sigmas, latent_image): + latent = latent_image + latent_image = latent["samples"] + latent = latent.copy() + latent_image = comfy.sample.fix_empty_latent_channels(guider.model_patcher, latent_image) + latent["samples"] = latent_image + + noise_mask = None + if "noise_mask" in latent: + noise_mask = latent["noise_mask"] + + x0_output = {} + callback = latent_preview.prepare_callback(guider.model_patcher, sigmas.shape[-1] - 1, x0_output) + + disable_pbar = not comfy.utils.PROGRESS_BAR_ENABLED + samples = guider.sample(noise.generate_noise(latent), latent_image, sampler, sigmas, denoise_mask=noise_mask, callback=callback, disable_pbar=disable_pbar, seed=noise.seed) + samples = samples.to(comfy.model_management.intermediate_device()) + + out = latent.copy() + out["samples"] = samples + if "x0" in x0_output: + out_denoised = latent.copy() + out_denoised["samples"] = guider.model_patcher.model.process_latent_out(x0_output["x0"].cpu()) + else: + out_denoised = out + return (out, out_denoised) + +class AddNoise: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model": ("MODEL",), + "noise": ("NOISE", ), + "sigmas": ("SIGMAS", ), + "latent_image": ("LATENT", ), + } + } + + RETURN_TYPES = ("LATENT",) + + FUNCTION = "add_noise" + + CATEGORY = "_for_testing/custom_sampling/noise" + + def add_noise(self, model, noise, sigmas, latent_image): + if len(sigmas) == 0: + return latent_image + + latent = latent_image + latent_image = latent["samples"] + + noisy = noise.generate_noise(latent) + + model_sampling = model.get_model_object("model_sampling") + process_latent_out = model.get_model_object("process_latent_out") + process_latent_in = model.get_model_object("process_latent_in") + + if len(sigmas) > 1: + scale = torch.abs(sigmas[0] - sigmas[-1]) + else: + scale = sigmas[0] + + if torch.count_nonzero(latent_image) > 0: #Don't shift the empty latent image. + latent_image = process_latent_in(latent_image) + noisy = model_sampling.noise_scaling(scale, noisy, latent_image) + noisy = process_latent_out(noisy) + noisy = torch.nan_to_num(noisy, nan=0.0, posinf=0.0, neginf=0.0) + + out = latent.copy() + out["samples"] = noisy + return (out,) + + +NODE_CLASS_MAPPINGS = { + "SamplerCustom": SamplerCustom, + "BasicScheduler": BasicScheduler, + "KarrasScheduler": KarrasScheduler, + "ExponentialScheduler": ExponentialScheduler, + "PolyexponentialScheduler": PolyexponentialScheduler, + "LaplaceScheduler": LaplaceScheduler, + "VPScheduler": VPScheduler, + "BetaSamplingScheduler": BetaSamplingScheduler, + "SDTurboScheduler": SDTurboScheduler, + "KSamplerSelect": KSamplerSelect, + "SamplerEulerAncestral": SamplerEulerAncestral, + "SamplerEulerAncestralCFGPP": SamplerEulerAncestralCFGPP, + "SamplerLMS": SamplerLMS, + "SamplerDPMPP_3M_SDE": SamplerDPMPP_3M_SDE, + "SamplerDPMPP_2M_SDE": SamplerDPMPP_2M_SDE, + "SamplerDPMPP_SDE": SamplerDPMPP_SDE, + "SamplerDPMPP_2S_Ancestral": SamplerDPMPP_2S_Ancestral, + "SamplerDPMAdaptative": SamplerDPMAdaptative, + "SplitSigmas": SplitSigmas, + "SplitSigmasDenoise": SplitSigmasDenoise, + "FlipSigmas": FlipSigmas, + "SetFirstSigma": SetFirstSigma, + + "CFGGuider": CFGGuider, + "DualCFGGuider": DualCFGGuider, + "BasicGuider": BasicGuider, + "RandomNoise": RandomNoise, + "DisableNoise": DisableNoise, + "AddNoise": AddNoise, + "SamplerCustomAdvanced": SamplerCustomAdvanced, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "SamplerEulerAncestralCFGPP": "SamplerEulerAncestralCFG++", +} diff --git a/comfy_extras/nodes_differential_diffusion.py b/comfy_extras/nodes_differential_diffusion.py new file mode 100644 index 0000000000000000000000000000000000000000..98dbbf102dac861cfb65ed19ad1af499abf7465d --- /dev/null +++ b/comfy_extras/nodes_differential_diffusion.py @@ -0,0 +1,42 @@ +# code adapted from https://github.com/exx8/differential-diffusion + +import torch + +class DifferentialDiffusion(): + @classmethod + def INPUT_TYPES(s): + return {"required": {"model": ("MODEL", ), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "apply" + CATEGORY = "_for_testing" + INIT = False + + def apply(self, model): + model = model.clone() + model.set_model_denoise_mask_function(self.forward) + return (model,) + + def forward(self, sigma: torch.Tensor, denoise_mask: torch.Tensor, extra_options: dict): + model = extra_options["model"] + step_sigmas = extra_options["sigmas"] + sigma_to = model.inner_model.model_sampling.sigma_min + if step_sigmas[-1] > sigma_to: + sigma_to = step_sigmas[-1] + sigma_from = step_sigmas[0] + + ts_from = model.inner_model.model_sampling.timestep(sigma_from) + ts_to = model.inner_model.model_sampling.timestep(sigma_to) + current_ts = model.inner_model.model_sampling.timestep(sigma[0]) + + threshold = (current_ts - ts_to) / (ts_from - ts_to) + + return (denoise_mask >= threshold).to(denoise_mask.dtype) + + +NODE_CLASS_MAPPINGS = { + "DifferentialDiffusion": DifferentialDiffusion, +} +NODE_DISPLAY_NAME_MAPPINGS = { + "DifferentialDiffusion": "Differential Diffusion", +} diff --git a/comfy_extras/nodes_flux.py b/comfy_extras/nodes_flux.py new file mode 100644 index 0000000000000000000000000000000000000000..ad6c15f37484b478cf47e8c4850ad558b35fc292 --- /dev/null +++ b/comfy_extras/nodes_flux.py @@ -0,0 +1,63 @@ +import node_helpers + +class CLIPTextEncodeFlux: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "clip": ("CLIP", ), + "clip_l": ("STRING", {"multiline": True, "dynamicPrompts": True}), + "t5xxl": ("STRING", {"multiline": True, "dynamicPrompts": True}), + "guidance": ("FLOAT", {"default": 3.5, "min": 0.0, "max": 100.0, "step": 0.1}), + }} + RETURN_TYPES = ("CONDITIONING",) + FUNCTION = "encode" + + CATEGORY = "advanced/conditioning/flux" + + def encode(self, clip, clip_l, t5xxl, guidance): + tokens = clip.tokenize(clip_l) + tokens["t5xxl"] = clip.tokenize(t5xxl)["t5xxl"] + + return (clip.encode_from_tokens_scheduled(tokens, add_dict={"guidance": guidance}), ) + +class FluxGuidance: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "conditioning": ("CONDITIONING", ), + "guidance": ("FLOAT", {"default": 3.5, "min": 0.0, "max": 100.0, "step": 0.1}), + }} + + RETURN_TYPES = ("CONDITIONING",) + FUNCTION = "append" + + CATEGORY = "advanced/conditioning/flux" + + def append(self, conditioning, guidance): + c = node_helpers.conditioning_set_values(conditioning, {"guidance": guidance}) + return (c, ) + + +class FluxDisableGuidance: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "conditioning": ("CONDITIONING", ), + }} + + RETURN_TYPES = ("CONDITIONING",) + FUNCTION = "append" + + CATEGORY = "advanced/conditioning/flux" + DESCRIPTION = "This node completely disables the guidance embed on Flux and Flux like models" + + def append(self, conditioning): + c = node_helpers.conditioning_set_values(conditioning, {"guidance": None}) + return (c, ) + + +NODE_CLASS_MAPPINGS = { + "CLIPTextEncodeFlux": CLIPTextEncodeFlux, + "FluxGuidance": FluxGuidance, + "FluxDisableGuidance": FluxDisableGuidance, +} diff --git a/comfy_extras/nodes_freelunch.py b/comfy_extras/nodes_freelunch.py new file mode 100644 index 0000000000000000000000000000000000000000..e3ac58447b29f604debb5bfc0aed3a5f100a4ae9 --- /dev/null +++ b/comfy_extras/nodes_freelunch.py @@ -0,0 +1,113 @@ +#code originally taken from: https://github.com/ChenyangSi/FreeU (under MIT License) + +import torch +import logging + +def Fourier_filter(x, threshold, scale): + # FFT + x_freq = torch.fft.fftn(x.float(), dim=(-2, -1)) + x_freq = torch.fft.fftshift(x_freq, dim=(-2, -1)) + + B, C, H, W = x_freq.shape + mask = torch.ones((B, C, H, W), device=x.device) + + crow, ccol = H // 2, W //2 + mask[..., crow - threshold:crow + threshold, ccol - threshold:ccol + threshold] = scale + x_freq = x_freq * mask + + # IFFT + x_freq = torch.fft.ifftshift(x_freq, dim=(-2, -1)) + x_filtered = torch.fft.ifftn(x_freq, dim=(-2, -1)).real + + return x_filtered.to(x.dtype) + + +class FreeU: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "b1": ("FLOAT", {"default": 1.1, "min": 0.0, "max": 10.0, "step": 0.01}), + "b2": ("FLOAT", {"default": 1.2, "min": 0.0, "max": 10.0, "step": 0.01}), + "s1": ("FLOAT", {"default": 0.9, "min": 0.0, "max": 10.0, "step": 0.01}), + "s2": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 10.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "model_patches/unet" + + def patch(self, model, b1, b2, s1, s2): + model_channels = model.model.model_config.unet_config["model_channels"] + scale_dict = {model_channels * 4: (b1, s1), model_channels * 2: (b2, s2)} + on_cpu_devices = {} + + def output_block_patch(h, hsp, transformer_options): + scale = scale_dict.get(int(h.shape[1]), None) + if scale is not None: + h[:,:h.shape[1] // 2] = h[:,:h.shape[1] // 2] * scale[0] + if hsp.device not in on_cpu_devices: + try: + hsp = Fourier_filter(hsp, threshold=1, scale=scale[1]) + except: + logging.warning("Device {} does not support the torch.fft functions used in the FreeU node, switching to CPU.".format(hsp.device)) + on_cpu_devices[hsp.device] = True + hsp = Fourier_filter(hsp.cpu(), threshold=1, scale=scale[1]).to(hsp.device) + else: + hsp = Fourier_filter(hsp.cpu(), threshold=1, scale=scale[1]).to(hsp.device) + + return h, hsp + + m = model.clone() + m.set_model_output_block_patch(output_block_patch) + return (m, ) + +class FreeU_V2: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "b1": ("FLOAT", {"default": 1.3, "min": 0.0, "max": 10.0, "step": 0.01}), + "b2": ("FLOAT", {"default": 1.4, "min": 0.0, "max": 10.0, "step": 0.01}), + "s1": ("FLOAT", {"default": 0.9, "min": 0.0, "max": 10.0, "step": 0.01}), + "s2": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 10.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "model_patches/unet" + + def patch(self, model, b1, b2, s1, s2): + model_channels = model.model.model_config.unet_config["model_channels"] + scale_dict = {model_channels * 4: (b1, s1), model_channels * 2: (b2, s2)} + on_cpu_devices = {} + + def output_block_patch(h, hsp, transformer_options): + scale = scale_dict.get(int(h.shape[1]), None) + if scale is not None: + hidden_mean = h.mean(1).unsqueeze(1) + B = hidden_mean.shape[0] + hidden_max, _ = torch.max(hidden_mean.view(B, -1), dim=-1, keepdim=True) + hidden_min, _ = torch.min(hidden_mean.view(B, -1), dim=-1, keepdim=True) + hidden_mean = (hidden_mean - hidden_min.unsqueeze(2).unsqueeze(3)) / (hidden_max - hidden_min).unsqueeze(2).unsqueeze(3) + + h[:,:h.shape[1] // 2] = h[:,:h.shape[1] // 2] * ((scale[0] - 1 ) * hidden_mean + 1) + + if hsp.device not in on_cpu_devices: + try: + hsp = Fourier_filter(hsp, threshold=1, scale=scale[1]) + except: + logging.warning("Device {} does not support the torch.fft functions used in the FreeU node, switching to CPU.".format(hsp.device)) + on_cpu_devices[hsp.device] = True + hsp = Fourier_filter(hsp.cpu(), threshold=1, scale=scale[1]).to(hsp.device) + else: + hsp = Fourier_filter(hsp.cpu(), threshold=1, scale=scale[1]).to(hsp.device) + + return h, hsp + + m = model.clone() + m.set_model_output_block_patch(output_block_patch) + return (m, ) + +NODE_CLASS_MAPPINGS = { + "FreeU": FreeU, + "FreeU_V2": FreeU_V2, +} diff --git a/comfy_extras/nodes_gits.py b/comfy_extras/nodes_gits.py new file mode 100644 index 0000000000000000000000000000000000000000..47b1dd049702cc481550dd04d2c4edebfdcf7a0e --- /dev/null +++ b/comfy_extras/nodes_gits.py @@ -0,0 +1,369 @@ +# from https://github.com/zju-pi/diff-sampler/tree/main/gits-main +import numpy as np +import torch + +def loglinear_interp(t_steps, num_steps): + """ + Performs log-linear interpolation of a given array of decreasing numbers. + """ + xs = np.linspace(0, 1, len(t_steps)) + ys = np.log(t_steps[::-1]) + + new_xs = np.linspace(0, 1, num_steps) + new_ys = np.interp(new_xs, xs, ys) + + interped_ys = np.exp(new_ys)[::-1].copy() + return interped_ys + +NOISE_LEVELS = { + 0.80: [ + [14.61464119, 7.49001646, 0.02916753], + [14.61464119, 11.54541874, 6.77309084, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 3.07277966, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 2.05039096, 0.02916753], + [14.61464119, 12.2308979, 8.75849152, 7.49001646, 5.85520077, 2.05039096, 0.02916753], + [14.61464119, 12.2308979, 8.75849152, 7.49001646, 5.85520077, 3.07277966, 1.56271636, 0.02916753], + [14.61464119, 12.96784878, 11.54541874, 8.75849152, 7.49001646, 5.85520077, 3.07277966, 1.56271636, 0.02916753], + [14.61464119, 13.76078796, 12.2308979, 10.90732002, 8.75849152, 7.49001646, 5.85520077, 3.07277966, 1.56271636, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 10.90732002, 8.75849152, 7.49001646, 5.85520077, 3.07277966, 1.56271636, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 10.90732002, 9.24142551, 8.30717278, 7.49001646, 5.85520077, 3.07277966, 1.56271636, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 10.90732002, 9.24142551, 8.30717278, 7.49001646, 6.14220476, 4.86714602, 3.07277966, 1.56271636, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.31284904, 9.24142551, 8.30717278, 7.49001646, 6.14220476, 4.86714602, 3.07277966, 1.56271636, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.90732002, 10.31284904, 9.24142551, 8.30717278, 7.49001646, 6.14220476, 4.86714602, 3.07277966, 1.56271636, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.90732002, 10.31284904, 9.24142551, 8.75849152, 8.30717278, 7.49001646, 6.14220476, 4.86714602, 3.07277966, 1.56271636, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.90732002, 10.31284904, 9.24142551, 8.75849152, 8.30717278, 7.49001646, 6.14220476, 4.86714602, 3.1956799, 1.98035145, 0.86115354, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.90732002, 10.31284904, 9.75859547, 9.24142551, 8.75849152, 8.30717278, 7.49001646, 6.14220476, 4.86714602, 3.1956799, 1.98035145, 0.86115354, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.90732002, 10.31284904, 9.75859547, 9.24142551, 8.75849152, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 4.65472794, 3.07277966, 1.84880662, 0.83188516, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.90732002, 10.31284904, 9.75859547, 9.24142551, 8.75849152, 8.30717278, 7.88507891, 7.49001646, 6.77309084, 5.85520077, 4.65472794, 3.07277966, 1.84880662, 0.83188516, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.90732002, 10.31284904, 9.75859547, 9.24142551, 8.75849152, 8.30717278, 7.88507891, 7.49001646, 6.77309084, 5.85520077, 4.86714602, 3.75677586, 2.84484982, 1.78698075, 0.803307, 0.02916753], + ], + 0.85: [ + [14.61464119, 7.49001646, 0.02916753], + [14.61464119, 7.49001646, 1.84880662, 0.02916753], + [14.61464119, 11.54541874, 6.77309084, 1.56271636, 0.02916753], + [14.61464119, 11.54541874, 7.11996698, 3.07277966, 1.24153244, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.09240818, 2.84484982, 0.95350921, 0.02916753], + [14.61464119, 12.2308979, 8.75849152, 7.49001646, 5.09240818, 2.84484982, 0.95350921, 0.02916753], + [14.61464119, 12.2308979, 8.75849152, 7.49001646, 5.58536053, 3.1956799, 1.84880662, 0.803307, 0.02916753], + [14.61464119, 12.96784878, 11.54541874, 8.75849152, 7.49001646, 5.58536053, 3.1956799, 1.84880662, 0.803307, 0.02916753], + [14.61464119, 12.96784878, 11.54541874, 8.75849152, 7.49001646, 6.14220476, 4.65472794, 3.07277966, 1.84880662, 0.803307, 0.02916753], + [14.61464119, 13.76078796, 12.2308979, 10.90732002, 8.75849152, 7.49001646, 6.14220476, 4.65472794, 3.07277966, 1.84880662, 0.803307, 0.02916753], + [14.61464119, 13.76078796, 12.2308979, 10.90732002, 9.24142551, 8.30717278, 7.49001646, 6.14220476, 4.65472794, 3.07277966, 1.84880662, 0.803307, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 10.90732002, 9.24142551, 8.30717278, 7.49001646, 6.14220476, 4.65472794, 3.07277966, 1.84880662, 0.803307, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.31284904, 9.24142551, 8.30717278, 7.49001646, 6.14220476, 4.65472794, 3.07277966, 1.84880662, 0.803307, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.31284904, 9.24142551, 8.30717278, 7.49001646, 6.14220476, 4.86714602, 3.60512662, 2.6383388, 1.56271636, 0.72133851, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.31284904, 9.24142551, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 4.65472794, 3.46139455, 2.45070267, 1.56271636, 0.72133851, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.31284904, 9.24142551, 8.75849152, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 4.65472794, 3.46139455, 2.45070267, 1.56271636, 0.72133851, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.90732002, 10.31284904, 9.24142551, 8.75849152, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 4.65472794, 3.46139455, 2.45070267, 1.56271636, 0.72133851, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.90732002, 10.31284904, 9.75859547, 9.24142551, 8.75849152, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 4.65472794, 3.46139455, 2.45070267, 1.56271636, 0.72133851, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.90732002, 10.31284904, 9.75859547, 9.24142551, 8.75849152, 8.30717278, 7.88507891, 7.49001646, 6.77309084, 5.85520077, 4.65472794, 3.46139455, 2.45070267, 1.56271636, 0.72133851, 0.02916753], + ], + 0.90: [ + [14.61464119, 6.77309084, 0.02916753], + [14.61464119, 7.49001646, 1.56271636, 0.02916753], + [14.61464119, 7.49001646, 3.07277966, 0.95350921, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 2.54230714, 0.89115214, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 4.86714602, 2.54230714, 0.89115214, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.09240818, 3.07277966, 1.61558151, 0.69515091, 0.02916753], + [14.61464119, 12.2308979, 8.75849152, 7.11996698, 4.86714602, 3.07277966, 1.61558151, 0.69515091, 0.02916753], + [14.61464119, 12.2308979, 8.75849152, 7.49001646, 5.85520077, 4.45427561, 2.95596409, 1.61558151, 0.69515091, 0.02916753], + [14.61464119, 12.2308979, 8.75849152, 7.49001646, 5.85520077, 4.45427561, 3.1956799, 2.19988537, 1.24153244, 0.57119018, 0.02916753], + [14.61464119, 12.96784878, 10.90732002, 8.75849152, 7.49001646, 5.85520077, 4.45427561, 3.1956799, 2.19988537, 1.24153244, 0.57119018, 0.02916753], + [14.61464119, 12.96784878, 11.54541874, 9.24142551, 8.30717278, 7.49001646, 5.85520077, 4.45427561, 3.1956799, 2.19988537, 1.24153244, 0.57119018, 0.02916753], + [14.61464119, 12.96784878, 11.54541874, 9.24142551, 8.30717278, 7.49001646, 6.14220476, 4.86714602, 3.75677586, 2.84484982, 1.84880662, 1.08895338, 0.52423614, 0.02916753], + [14.61464119, 13.76078796, 12.2308979, 10.90732002, 9.24142551, 8.30717278, 7.49001646, 6.14220476, 4.86714602, 3.75677586, 2.84484982, 1.84880662, 1.08895338, 0.52423614, 0.02916753], + [14.61464119, 13.76078796, 12.2308979, 10.90732002, 9.24142551, 8.30717278, 7.49001646, 6.44769001, 5.58536053, 4.45427561, 3.32507086, 2.45070267, 1.61558151, 0.95350921, 0.45573691, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 10.90732002, 9.24142551, 8.30717278, 7.49001646, 6.44769001, 5.58536053, 4.45427561, 3.32507086, 2.45070267, 1.61558151, 0.95350921, 0.45573691, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 10.90732002, 9.24142551, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 4.86714602, 3.91689563, 3.07277966, 2.27973175, 1.56271636, 0.95350921, 0.45573691, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.31284904, 9.24142551, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 4.86714602, 3.91689563, 3.07277966, 2.27973175, 1.56271636, 0.95350921, 0.45573691, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.31284904, 9.24142551, 8.75849152, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 4.86714602, 3.91689563, 3.07277966, 2.27973175, 1.56271636, 0.95350921, 0.45573691, 0.02916753], + [14.61464119, 13.76078796, 12.96784878, 12.2308979, 11.54541874, 10.31284904, 9.24142551, 8.75849152, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 5.09240818, 4.45427561, 3.60512662, 2.95596409, 2.19988537, 1.51179266, 0.89115214, 0.43325692, 0.02916753], + ], + 0.95: [ + [14.61464119, 6.77309084, 0.02916753], + [14.61464119, 6.77309084, 1.56271636, 0.02916753], + [14.61464119, 7.49001646, 2.84484982, 0.89115214, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 2.36326075, 0.803307, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 2.95596409, 1.56271636, 0.64427125, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 4.86714602, 2.95596409, 1.56271636, 0.64427125, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 4.86714602, 3.07277966, 1.91321158, 1.08895338, 0.50118381, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 4.45427561, 3.07277966, 1.91321158, 1.08895338, 0.50118381, 0.02916753], + [14.61464119, 12.2308979, 8.75849152, 7.49001646, 5.85520077, 4.45427561, 3.07277966, 1.91321158, 1.08895338, 0.50118381, 0.02916753], + [14.61464119, 12.2308979, 8.75849152, 7.49001646, 5.85520077, 4.45427561, 3.1956799, 2.19988537, 1.41535246, 0.803307, 0.38853383, 0.02916753], + [14.61464119, 12.2308979, 8.75849152, 7.49001646, 5.85520077, 4.65472794, 3.46139455, 2.6383388, 1.84880662, 1.24153244, 0.72133851, 0.34370604, 0.02916753], + [14.61464119, 12.96784878, 10.90732002, 8.75849152, 7.49001646, 5.85520077, 4.65472794, 3.46139455, 2.6383388, 1.84880662, 1.24153244, 0.72133851, 0.34370604, 0.02916753], + [14.61464119, 12.96784878, 10.90732002, 8.75849152, 7.49001646, 6.14220476, 4.86714602, 3.75677586, 2.95596409, 2.19988537, 1.56271636, 1.05362725, 0.64427125, 0.32104823, 0.02916753], + [14.61464119, 12.96784878, 10.90732002, 8.75849152, 7.49001646, 6.44769001, 5.58536053, 4.65472794, 3.60512662, 2.95596409, 2.19988537, 1.56271636, 1.05362725, 0.64427125, 0.32104823, 0.02916753], + [14.61464119, 12.96784878, 11.54541874, 9.24142551, 8.30717278, 7.49001646, 6.44769001, 5.58536053, 4.65472794, 3.60512662, 2.95596409, 2.19988537, 1.56271636, 1.05362725, 0.64427125, 0.32104823, 0.02916753], + [14.61464119, 12.96784878, 11.54541874, 9.24142551, 8.30717278, 7.49001646, 6.44769001, 5.58536053, 4.65472794, 3.75677586, 3.07277966, 2.45070267, 1.78698075, 1.24153244, 0.83188516, 0.50118381, 0.22545385, 0.02916753], + [14.61464119, 12.96784878, 11.54541874, 9.24142551, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 5.09240818, 4.45427561, 3.60512662, 2.95596409, 2.36326075, 1.72759056, 1.24153244, 0.83188516, 0.50118381, 0.22545385, 0.02916753], + [14.61464119, 13.76078796, 12.2308979, 10.90732002, 9.24142551, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 5.09240818, 4.45427561, 3.60512662, 2.95596409, 2.36326075, 1.72759056, 1.24153244, 0.83188516, 0.50118381, 0.22545385, 0.02916753], + [14.61464119, 13.76078796, 12.2308979, 10.90732002, 9.24142551, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 5.09240818, 4.45427561, 3.75677586, 3.07277966, 2.45070267, 1.91321158, 1.46270394, 1.05362725, 0.72133851, 0.43325692, 0.19894916, 0.02916753], + ], + 1.00: [ + [14.61464119, 1.56271636, 0.02916753], + [14.61464119, 6.77309084, 0.95350921, 0.02916753], + [14.61464119, 6.77309084, 2.36326075, 0.803307, 0.02916753], + [14.61464119, 7.11996698, 3.07277966, 1.56271636, 0.59516323, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 2.84484982, 1.41535246, 0.57119018, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 2.84484982, 1.61558151, 0.86115354, 0.38853383, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 4.86714602, 2.84484982, 1.61558151, 0.86115354, 0.38853383, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 4.86714602, 3.07277966, 1.98035145, 1.24153244, 0.72133851, 0.34370604, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 4.45427561, 3.07277966, 1.98035145, 1.24153244, 0.72133851, 0.34370604, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 4.45427561, 3.1956799, 2.27973175, 1.51179266, 0.95350921, 0.54755926, 0.25053367, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 4.45427561, 3.1956799, 2.36326075, 1.61558151, 1.08895338, 0.72133851, 0.41087446, 0.17026083, 0.02916753], + [14.61464119, 11.54541874, 8.75849152, 7.49001646, 5.85520077, 4.45427561, 3.1956799, 2.36326075, 1.61558151, 1.08895338, 0.72133851, 0.41087446, 0.17026083, 0.02916753], + [14.61464119, 11.54541874, 8.75849152, 7.49001646, 5.85520077, 4.65472794, 3.60512662, 2.84484982, 2.12350607, 1.56271636, 1.08895338, 0.72133851, 0.41087446, 0.17026083, 0.02916753], + [14.61464119, 11.54541874, 8.75849152, 7.49001646, 5.85520077, 4.65472794, 3.60512662, 2.84484982, 2.19988537, 1.61558151, 1.162866, 0.803307, 0.50118381, 0.27464288, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 8.75849152, 7.49001646, 5.85520077, 4.65472794, 3.75677586, 3.07277966, 2.45070267, 1.84880662, 1.36964464, 1.01931262, 0.72133851, 0.45573691, 0.25053367, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 8.75849152, 7.49001646, 6.14220476, 5.09240818, 4.26497746, 3.46139455, 2.84484982, 2.19988537, 1.67050016, 1.24153244, 0.92192322, 0.64427125, 0.43325692, 0.25053367, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 8.75849152, 7.49001646, 6.14220476, 5.09240818, 4.26497746, 3.60512662, 2.95596409, 2.45070267, 1.91321158, 1.51179266, 1.12534678, 0.83188516, 0.59516323, 0.38853383, 0.22545385, 0.09824532, 0.02916753], + [14.61464119, 12.2308979, 9.24142551, 8.30717278, 7.49001646, 6.14220476, 5.09240818, 4.26497746, 3.60512662, 2.95596409, 2.45070267, 1.91321158, 1.51179266, 1.12534678, 0.83188516, 0.59516323, 0.38853383, 0.22545385, 0.09824532, 0.02916753], + [14.61464119, 12.2308979, 9.24142551, 8.30717278, 7.49001646, 6.77309084, 5.85520077, 5.09240818, 4.26497746, 3.60512662, 2.95596409, 2.45070267, 1.91321158, 1.51179266, 1.12534678, 0.83188516, 0.59516323, 0.38853383, 0.22545385, 0.09824532, 0.02916753], + ], + 1.05: [ + [14.61464119, 0.95350921, 0.02916753], + [14.61464119, 6.77309084, 0.89115214, 0.02916753], + [14.61464119, 6.77309084, 2.05039096, 0.72133851, 0.02916753], + [14.61464119, 6.77309084, 2.84484982, 1.28281462, 0.52423614, 0.02916753], + [14.61464119, 6.77309084, 3.07277966, 1.61558151, 0.803307, 0.34370604, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 2.84484982, 1.56271636, 0.803307, 0.34370604, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 2.84484982, 1.61558151, 0.95350921, 0.52423614, 0.22545385, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.07277966, 1.98035145, 1.24153244, 0.74807048, 0.41087446, 0.17026083, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.1956799, 2.27973175, 1.51179266, 0.95350921, 0.59516323, 0.34370604, 0.13792117, 0.02916753], + [14.61464119, 7.49001646, 5.09240818, 3.46139455, 2.45070267, 1.61558151, 1.08895338, 0.72133851, 0.45573691, 0.25053367, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.09240818, 3.46139455, 2.45070267, 1.61558151, 1.08895338, 0.72133851, 0.45573691, 0.25053367, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 4.45427561, 3.1956799, 2.36326075, 1.61558151, 1.08895338, 0.72133851, 0.45573691, 0.25053367, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 4.45427561, 3.1956799, 2.45070267, 1.72759056, 1.24153244, 0.86115354, 0.59516323, 0.38853383, 0.22545385, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 4.65472794, 3.60512662, 2.84484982, 2.19988537, 1.61558151, 1.162866, 0.83188516, 0.59516323, 0.38853383, 0.22545385, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 4.65472794, 3.60512662, 2.84484982, 2.19988537, 1.67050016, 1.28281462, 0.95350921, 0.72133851, 0.52423614, 0.34370604, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 4.65472794, 3.60512662, 2.95596409, 2.36326075, 1.84880662, 1.41535246, 1.08895338, 0.83188516, 0.61951244, 0.45573691, 0.32104823, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 4.65472794, 3.60512662, 2.95596409, 2.45070267, 1.91321158, 1.51179266, 1.20157266, 0.95350921, 0.74807048, 0.57119018, 0.43325692, 0.29807833, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 8.30717278, 7.11996698, 5.85520077, 4.65472794, 3.60512662, 2.95596409, 2.45070267, 1.91321158, 1.51179266, 1.20157266, 0.95350921, 0.74807048, 0.57119018, 0.43325692, 0.29807833, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 8.30717278, 7.11996698, 5.85520077, 4.65472794, 3.60512662, 2.95596409, 2.45070267, 1.98035145, 1.61558151, 1.32549286, 1.08895338, 0.86115354, 0.69515091, 0.54755926, 0.41087446, 0.29807833, 0.19894916, 0.09824532, 0.02916753], + ], + 1.10: [ + [14.61464119, 0.89115214, 0.02916753], + [14.61464119, 2.36326075, 0.72133851, 0.02916753], + [14.61464119, 5.85520077, 1.61558151, 0.57119018, 0.02916753], + [14.61464119, 6.77309084, 2.45070267, 1.08895338, 0.45573691, 0.02916753], + [14.61464119, 6.77309084, 2.95596409, 1.56271636, 0.803307, 0.34370604, 0.02916753], + [14.61464119, 6.77309084, 3.07277966, 1.61558151, 0.89115214, 0.4783645, 0.19894916, 0.02916753], + [14.61464119, 6.77309084, 3.07277966, 1.84880662, 1.08895338, 0.64427125, 0.34370604, 0.13792117, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 2.84484982, 1.61558151, 0.95350921, 0.54755926, 0.27464288, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 2.95596409, 1.91321158, 1.24153244, 0.803307, 0.4783645, 0.25053367, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.07277966, 2.05039096, 1.41535246, 0.95350921, 0.64427125, 0.41087446, 0.22545385, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.1956799, 2.27973175, 1.61558151, 1.12534678, 0.803307, 0.54755926, 0.36617002, 0.22545385, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.32507086, 2.45070267, 1.72759056, 1.24153244, 0.89115214, 0.64427125, 0.45573691, 0.32104823, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 5.09240818, 3.60512662, 2.84484982, 2.05039096, 1.51179266, 1.08895338, 0.803307, 0.59516323, 0.43325692, 0.29807833, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 5.09240818, 3.60512662, 2.84484982, 2.12350607, 1.61558151, 1.24153244, 0.95350921, 0.72133851, 0.54755926, 0.41087446, 0.29807833, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 5.85520077, 4.45427561, 3.1956799, 2.45070267, 1.84880662, 1.41535246, 1.08895338, 0.83188516, 0.64427125, 0.50118381, 0.36617002, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 5.85520077, 4.45427561, 3.1956799, 2.45070267, 1.91321158, 1.51179266, 1.20157266, 0.95350921, 0.74807048, 0.59516323, 0.45573691, 0.34370604, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 5.85520077, 4.45427561, 3.46139455, 2.84484982, 2.19988537, 1.72759056, 1.36964464, 1.08895338, 0.86115354, 0.69515091, 0.54755926, 0.43325692, 0.34370604, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 4.45427561, 3.46139455, 2.84484982, 2.19988537, 1.72759056, 1.36964464, 1.08895338, 0.86115354, 0.69515091, 0.54755926, 0.43325692, 0.34370604, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 11.54541874, 7.49001646, 5.85520077, 4.45427561, 3.46139455, 2.84484982, 2.19988537, 1.72759056, 1.36964464, 1.08895338, 0.89115214, 0.72133851, 0.59516323, 0.4783645, 0.38853383, 0.29807833, 0.22545385, 0.17026083, 0.09824532, 0.02916753], + ], + 1.15: [ + [14.61464119, 0.83188516, 0.02916753], + [14.61464119, 1.84880662, 0.59516323, 0.02916753], + [14.61464119, 5.85520077, 1.56271636, 0.52423614, 0.02916753], + [14.61464119, 5.85520077, 1.91321158, 0.83188516, 0.34370604, 0.02916753], + [14.61464119, 5.85520077, 2.45070267, 1.24153244, 0.59516323, 0.25053367, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.51179266, 0.803307, 0.41087446, 0.17026083, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.56271636, 0.89115214, 0.50118381, 0.25053367, 0.09824532, 0.02916753], + [14.61464119, 6.77309084, 3.07277966, 1.84880662, 1.12534678, 0.72133851, 0.43325692, 0.22545385, 0.09824532, 0.02916753], + [14.61464119, 6.77309084, 3.07277966, 1.91321158, 1.24153244, 0.803307, 0.52423614, 0.34370604, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 2.95596409, 1.91321158, 1.24153244, 0.803307, 0.52423614, 0.34370604, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.07277966, 2.05039096, 1.36964464, 0.95350921, 0.69515091, 0.4783645, 0.32104823, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.07277966, 2.12350607, 1.51179266, 1.08895338, 0.803307, 0.59516323, 0.43325692, 0.29807833, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.07277966, 2.12350607, 1.51179266, 1.08895338, 0.803307, 0.59516323, 0.45573691, 0.34370604, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.07277966, 2.19988537, 1.61558151, 1.24153244, 0.95350921, 0.74807048, 0.59516323, 0.45573691, 0.34370604, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.1956799, 2.45070267, 1.78698075, 1.32549286, 1.01931262, 0.803307, 0.64427125, 0.50118381, 0.38853383, 0.29807833, 0.22545385, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.1956799, 2.45070267, 1.78698075, 1.32549286, 1.01931262, 0.803307, 0.64427125, 0.52423614, 0.41087446, 0.32104823, 0.25053367, 0.19894916, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.1956799, 2.45070267, 1.84880662, 1.41535246, 1.12534678, 0.89115214, 0.72133851, 0.59516323, 0.4783645, 0.38853383, 0.32104823, 0.25053367, 0.19894916, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.1956799, 2.45070267, 1.84880662, 1.41535246, 1.12534678, 0.89115214, 0.72133851, 0.59516323, 0.50118381, 0.41087446, 0.34370604, 0.27464288, 0.22545385, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.86714602, 3.1956799, 2.45070267, 1.84880662, 1.41535246, 1.12534678, 0.89115214, 0.72133851, 0.59516323, 0.50118381, 0.41087446, 0.34370604, 0.29807833, 0.25053367, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + ], + 1.20: [ + [14.61464119, 0.803307, 0.02916753], + [14.61464119, 1.56271636, 0.52423614, 0.02916753], + [14.61464119, 2.36326075, 0.92192322, 0.36617002, 0.02916753], + [14.61464119, 2.84484982, 1.24153244, 0.59516323, 0.25053367, 0.02916753], + [14.61464119, 5.85520077, 2.05039096, 0.95350921, 0.45573691, 0.17026083, 0.02916753], + [14.61464119, 5.85520077, 2.45070267, 1.24153244, 0.64427125, 0.29807833, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.45070267, 1.36964464, 0.803307, 0.45573691, 0.25053367, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.61558151, 0.95350921, 0.59516323, 0.36617002, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.67050016, 1.08895338, 0.74807048, 0.50118381, 0.32104823, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.95596409, 1.84880662, 1.24153244, 0.83188516, 0.59516323, 0.41087446, 0.27464288, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 3.07277966, 1.98035145, 1.36964464, 0.95350921, 0.69515091, 0.50118381, 0.36617002, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 6.77309084, 3.46139455, 2.36326075, 1.56271636, 1.08895338, 0.803307, 0.59516323, 0.45573691, 0.34370604, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 6.77309084, 3.46139455, 2.45070267, 1.61558151, 1.162866, 0.86115354, 0.64427125, 0.50118381, 0.38853383, 0.29807833, 0.22545385, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.65472794, 3.07277966, 2.12350607, 1.51179266, 1.08895338, 0.83188516, 0.64427125, 0.50118381, 0.38853383, 0.29807833, 0.22545385, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.65472794, 3.07277966, 2.12350607, 1.51179266, 1.08895338, 0.83188516, 0.64427125, 0.50118381, 0.41087446, 0.32104823, 0.25053367, 0.19894916, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.65472794, 3.07277966, 2.12350607, 1.51179266, 1.08895338, 0.83188516, 0.64427125, 0.50118381, 0.41087446, 0.34370604, 0.27464288, 0.22545385, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.65472794, 3.07277966, 2.19988537, 1.61558151, 1.20157266, 0.92192322, 0.72133851, 0.57119018, 0.45573691, 0.36617002, 0.29807833, 0.25053367, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.65472794, 3.07277966, 2.19988537, 1.61558151, 1.24153244, 0.95350921, 0.74807048, 0.59516323, 0.4783645, 0.38853383, 0.32104823, 0.27464288, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 7.49001646, 4.65472794, 3.07277966, 2.19988537, 1.61558151, 1.24153244, 0.95350921, 0.74807048, 0.59516323, 0.50118381, 0.41087446, 0.34370604, 0.29807833, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + ], + 1.25: [ + [14.61464119, 0.72133851, 0.02916753], + [14.61464119, 1.56271636, 0.50118381, 0.02916753], + [14.61464119, 2.05039096, 0.803307, 0.32104823, 0.02916753], + [14.61464119, 2.36326075, 0.95350921, 0.43325692, 0.17026083, 0.02916753], + [14.61464119, 2.84484982, 1.24153244, 0.59516323, 0.27464288, 0.09824532, 0.02916753], + [14.61464119, 3.07277966, 1.51179266, 0.803307, 0.43325692, 0.22545385, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.36326075, 1.24153244, 0.72133851, 0.41087446, 0.22545385, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.45070267, 1.36964464, 0.83188516, 0.52423614, 0.34370604, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.61558151, 0.98595673, 0.64427125, 0.43325692, 0.27464288, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.67050016, 1.08895338, 0.74807048, 0.52423614, 0.36617002, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.72759056, 1.162866, 0.803307, 0.59516323, 0.45573691, 0.34370604, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.95596409, 1.84880662, 1.24153244, 0.86115354, 0.64427125, 0.4783645, 0.36617002, 0.27464288, 0.19894916, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.95596409, 1.84880662, 1.28281462, 0.92192322, 0.69515091, 0.52423614, 0.41087446, 0.32104823, 0.25053367, 0.19894916, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.95596409, 1.91321158, 1.32549286, 0.95350921, 0.72133851, 0.54755926, 0.43325692, 0.34370604, 0.27464288, 0.22545385, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.95596409, 1.91321158, 1.32549286, 0.95350921, 0.72133851, 0.57119018, 0.45573691, 0.36617002, 0.29807833, 0.25053367, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.95596409, 1.91321158, 1.32549286, 0.95350921, 0.74807048, 0.59516323, 0.4783645, 0.38853383, 0.32104823, 0.27464288, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 3.07277966, 2.05039096, 1.41535246, 1.05362725, 0.803307, 0.61951244, 0.50118381, 0.41087446, 0.34370604, 0.29807833, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 3.07277966, 2.05039096, 1.41535246, 1.05362725, 0.803307, 0.64427125, 0.52423614, 0.43325692, 0.36617002, 0.32104823, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 3.07277966, 2.05039096, 1.46270394, 1.08895338, 0.83188516, 0.66947293, 0.54755926, 0.45573691, 0.38853383, 0.34370604, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + ], + 1.30: [ + [14.61464119, 0.72133851, 0.02916753], + [14.61464119, 1.24153244, 0.43325692, 0.02916753], + [14.61464119, 1.56271636, 0.59516323, 0.22545385, 0.02916753], + [14.61464119, 1.84880662, 0.803307, 0.36617002, 0.13792117, 0.02916753], + [14.61464119, 2.36326075, 1.01931262, 0.52423614, 0.25053367, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.36964464, 0.74807048, 0.41087446, 0.22545385, 0.09824532, 0.02916753], + [14.61464119, 3.07277966, 1.56271636, 0.89115214, 0.54755926, 0.34370604, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 3.07277966, 1.61558151, 0.95350921, 0.61951244, 0.41087446, 0.27464288, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.45070267, 1.36964464, 0.83188516, 0.54755926, 0.36617002, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.45070267, 1.41535246, 0.92192322, 0.64427125, 0.45573691, 0.34370604, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.6383388, 1.56271636, 1.01931262, 0.72133851, 0.50118381, 0.36617002, 0.27464288, 0.19894916, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.61558151, 1.05362725, 0.74807048, 0.54755926, 0.41087446, 0.32104823, 0.25053367, 0.19894916, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.61558151, 1.08895338, 0.77538133, 0.57119018, 0.43325692, 0.34370604, 0.27464288, 0.22545385, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.61558151, 1.08895338, 0.803307, 0.59516323, 0.45573691, 0.36617002, 0.29807833, 0.25053367, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.61558151, 1.08895338, 0.803307, 0.59516323, 0.4783645, 0.38853383, 0.32104823, 0.27464288, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.72759056, 1.162866, 0.83188516, 0.64427125, 0.50118381, 0.41087446, 0.34370604, 0.29807833, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.72759056, 1.162866, 0.83188516, 0.64427125, 0.52423614, 0.43325692, 0.36617002, 0.32104823, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.78698075, 1.24153244, 0.92192322, 0.72133851, 0.57119018, 0.45573691, 0.38853383, 0.34370604, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.84484982, 1.78698075, 1.24153244, 0.92192322, 0.72133851, 0.57119018, 0.4783645, 0.41087446, 0.36617002, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + ], + 1.35: [ + [14.61464119, 0.69515091, 0.02916753], + [14.61464119, 0.95350921, 0.34370604, 0.02916753], + [14.61464119, 1.56271636, 0.57119018, 0.19894916, 0.02916753], + [14.61464119, 1.61558151, 0.69515091, 0.29807833, 0.09824532, 0.02916753], + [14.61464119, 1.84880662, 0.83188516, 0.43325692, 0.22545385, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.162866, 0.64427125, 0.36617002, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.36964464, 0.803307, 0.50118381, 0.32104823, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.41535246, 0.83188516, 0.54755926, 0.36617002, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.56271636, 0.95350921, 0.64427125, 0.45573691, 0.32104823, 0.22545385, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.56271636, 0.95350921, 0.64427125, 0.45573691, 0.34370604, 0.25053367, 0.19894916, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 3.07277966, 1.61558151, 1.01931262, 0.72133851, 0.52423614, 0.38853383, 0.29807833, 0.22545385, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 3.07277966, 1.61558151, 1.01931262, 0.72133851, 0.52423614, 0.41087446, 0.32104823, 0.25053367, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 3.07277966, 1.61558151, 1.05362725, 0.74807048, 0.54755926, 0.43325692, 0.34370604, 0.27464288, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 3.07277966, 1.72759056, 1.12534678, 0.803307, 0.59516323, 0.45573691, 0.36617002, 0.29807833, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 3.07277966, 1.72759056, 1.12534678, 0.803307, 0.59516323, 0.4783645, 0.38853383, 0.32104823, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.45070267, 1.51179266, 1.01931262, 0.74807048, 0.57119018, 0.45573691, 0.36617002, 0.32104823, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.6383388, 1.61558151, 1.08895338, 0.803307, 0.61951244, 0.50118381, 0.41087446, 0.34370604, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.6383388, 1.61558151, 1.08895338, 0.803307, 0.64427125, 0.52423614, 0.43325692, 0.36617002, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 5.85520077, 2.6383388, 1.61558151, 1.08895338, 0.803307, 0.64427125, 0.52423614, 0.45573691, 0.38853383, 0.34370604, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + ], + 1.40: [ + [14.61464119, 0.59516323, 0.02916753], + [14.61464119, 0.95350921, 0.34370604, 0.02916753], + [14.61464119, 1.08895338, 0.43325692, 0.13792117, 0.02916753], + [14.61464119, 1.56271636, 0.64427125, 0.27464288, 0.09824532, 0.02916753], + [14.61464119, 1.61558151, 0.803307, 0.43325692, 0.22545385, 0.09824532, 0.02916753], + [14.61464119, 2.05039096, 0.95350921, 0.54755926, 0.34370604, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.24153244, 0.72133851, 0.43325692, 0.27464288, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.24153244, 0.74807048, 0.50118381, 0.34370604, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.28281462, 0.803307, 0.52423614, 0.36617002, 0.27464288, 0.19894916, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.28281462, 0.803307, 0.54755926, 0.38853383, 0.29807833, 0.22545385, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.41535246, 0.86115354, 0.59516323, 0.43325692, 0.32104823, 0.25053367, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.51179266, 0.95350921, 0.64427125, 0.45573691, 0.34370604, 0.27464288, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.51179266, 0.95350921, 0.64427125, 0.4783645, 0.36617002, 0.29807833, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.56271636, 0.98595673, 0.69515091, 0.52423614, 0.41087446, 0.34370604, 0.29807833, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.56271636, 1.01931262, 0.72133851, 0.54755926, 0.43325692, 0.36617002, 0.32104823, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.61558151, 1.05362725, 0.74807048, 0.57119018, 0.45573691, 0.38853383, 0.34370604, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.61558151, 1.08895338, 0.803307, 0.61951244, 0.50118381, 0.41087446, 0.36617002, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.61558151, 1.08895338, 0.803307, 0.61951244, 0.50118381, 0.43325692, 0.38853383, 0.34370604, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.61558151, 1.08895338, 0.803307, 0.64427125, 0.52423614, 0.45573691, 0.41087446, 0.36617002, 0.34370604, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + ], + 1.45: [ + [14.61464119, 0.59516323, 0.02916753], + [14.61464119, 0.803307, 0.25053367, 0.02916753], + [14.61464119, 0.95350921, 0.34370604, 0.09824532, 0.02916753], + [14.61464119, 1.24153244, 0.54755926, 0.25053367, 0.09824532, 0.02916753], + [14.61464119, 1.56271636, 0.72133851, 0.36617002, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 1.61558151, 0.803307, 0.45573691, 0.27464288, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 1.91321158, 0.95350921, 0.57119018, 0.36617002, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 2.19988537, 1.08895338, 0.64427125, 0.41087446, 0.27464288, 0.19894916, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.24153244, 0.74807048, 0.50118381, 0.34370604, 0.25053367, 0.19894916, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.24153244, 0.74807048, 0.50118381, 0.36617002, 0.27464288, 0.22545385, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.28281462, 0.803307, 0.54755926, 0.41087446, 0.32104823, 0.25053367, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.28281462, 0.803307, 0.57119018, 0.43325692, 0.34370604, 0.27464288, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.28281462, 0.83188516, 0.59516323, 0.45573691, 0.36617002, 0.29807833, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.28281462, 0.83188516, 0.59516323, 0.45573691, 0.36617002, 0.32104823, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.51179266, 0.95350921, 0.69515091, 0.52423614, 0.41087446, 0.34370604, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.51179266, 0.95350921, 0.69515091, 0.52423614, 0.43325692, 0.36617002, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.56271636, 0.98595673, 0.72133851, 0.54755926, 0.45573691, 0.38853383, 0.34370604, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.56271636, 1.01931262, 0.74807048, 0.57119018, 0.4783645, 0.41087446, 0.36617002, 0.34370604, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.84484982, 1.56271636, 1.01931262, 0.74807048, 0.59516323, 0.50118381, 0.43325692, 0.38853383, 0.36617002, 0.34370604, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + ], + 1.50: [ + [14.61464119, 0.54755926, 0.02916753], + [14.61464119, 0.803307, 0.25053367, 0.02916753], + [14.61464119, 0.86115354, 0.32104823, 0.09824532, 0.02916753], + [14.61464119, 1.24153244, 0.54755926, 0.25053367, 0.09824532, 0.02916753], + [14.61464119, 1.56271636, 0.72133851, 0.36617002, 0.19894916, 0.09824532, 0.02916753], + [14.61464119, 1.61558151, 0.803307, 0.45573691, 0.27464288, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 1.61558151, 0.83188516, 0.52423614, 0.34370604, 0.25053367, 0.17026083, 0.09824532, 0.02916753], + [14.61464119, 1.84880662, 0.95350921, 0.59516323, 0.38853383, 0.27464288, 0.19894916, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 1.84880662, 0.95350921, 0.59516323, 0.41087446, 0.29807833, 0.22545385, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 1.84880662, 0.95350921, 0.61951244, 0.43325692, 0.32104823, 0.25053367, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.19988537, 1.12534678, 0.72133851, 0.50118381, 0.36617002, 0.27464288, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.19988537, 1.12534678, 0.72133851, 0.50118381, 0.36617002, 0.29807833, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.36326075, 1.24153244, 0.803307, 0.57119018, 0.43325692, 0.34370604, 0.29807833, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.36326075, 1.24153244, 0.803307, 0.57119018, 0.43325692, 0.34370604, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.36326075, 1.24153244, 0.803307, 0.59516323, 0.45573691, 0.36617002, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.36326075, 1.24153244, 0.803307, 0.59516323, 0.45573691, 0.38853383, 0.34370604, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.32549286, 0.86115354, 0.64427125, 0.50118381, 0.41087446, 0.36617002, 0.34370604, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.36964464, 0.92192322, 0.69515091, 0.54755926, 0.45573691, 0.41087446, 0.36617002, 0.34370604, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + [14.61464119, 2.45070267, 1.41535246, 0.95350921, 0.72133851, 0.57119018, 0.4783645, 0.43325692, 0.38853383, 0.36617002, 0.34370604, 0.32104823, 0.29807833, 0.27464288, 0.25053367, 0.22545385, 0.19894916, 0.17026083, 0.13792117, 0.09824532, 0.02916753], + ], +} + +class GITSScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"coeff": ("FLOAT", {"default": 1.20, "min": 0.80, "max": 1.50, "step": 0.05}), + "steps": ("INT", {"default": 10, "min": 2, "max": 1000}), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + } + } + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, coeff, steps, denoise): + total_steps = steps + if denoise < 1.0: + if denoise <= 0.0: + return (torch.FloatTensor([]),) + total_steps = round(steps * denoise) + + if steps <= 20: + sigmas = NOISE_LEVELS[round(coeff, 2)][steps-2][:] + else: + sigmas = NOISE_LEVELS[round(coeff, 2)][-1][:] + sigmas = loglinear_interp(sigmas, steps + 1) + + sigmas = sigmas[-(total_steps + 1):] + sigmas[-1] = 0 + return (torch.FloatTensor(sigmas), ) + +NODE_CLASS_MAPPINGS = { + "GITSScheduler": GITSScheduler, +} diff --git a/comfy_extras/nodes_hooks.py b/comfy_extras/nodes_hooks.py new file mode 100644 index 0000000000000000000000000000000000000000..1edc06f3d7ae6b0682b03afe666ef936b16f2f28 --- /dev/null +++ b/comfy_extras/nodes_hooks.py @@ -0,0 +1,745 @@ +from __future__ import annotations +from typing import TYPE_CHECKING, Union +import logging +import torch +from collections.abc import Iterable + +if TYPE_CHECKING: + from comfy.sd import CLIP + +import comfy.hooks +import comfy.sd +import comfy.utils +import folder_paths + +########################################### +# Mask, Combine, and Hook Conditioning +#------------------------------------------ +class PairConditioningSetProperties: + NodeId = 'PairConditioningSetProperties' + NodeName = 'Cond Pair Set Props' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "positive_NEW": ("CONDITIONING", ), + "negative_NEW": ("CONDITIONING", ), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "set_cond_area": (["default", "mask bounds"],), + }, + "optional": { + "mask": ("MASK", ), + "hooks": ("HOOKS",), + "timesteps": ("TIMESTEPS_RANGE",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("positive", "negative") + CATEGORY = "advanced/hooks/cond pair" + FUNCTION = "set_properties" + + def set_properties(self, positive_NEW, negative_NEW, + strength: float, set_cond_area: str, + mask: torch.Tensor=None, hooks: comfy.hooks.HookGroup=None, timesteps: tuple=None): + final_positive, final_negative = comfy.hooks.set_conds_props(conds=[positive_NEW, negative_NEW], + strength=strength, set_cond_area=set_cond_area, + mask=mask, hooks=hooks, timesteps_range=timesteps) + return (final_positive, final_negative) + +class PairConditioningSetPropertiesAndCombine: + NodeId = 'PairConditioningSetPropertiesAndCombine' + NodeName = 'Cond Pair Set Props Combine' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "positive_NEW": ("CONDITIONING", ), + "negative_NEW": ("CONDITIONING", ), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "set_cond_area": (["default", "mask bounds"],), + }, + "optional": { + "mask": ("MASK", ), + "hooks": ("HOOKS",), + "timesteps": ("TIMESTEPS_RANGE",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("positive", "negative") + CATEGORY = "advanced/hooks/cond pair" + FUNCTION = "set_properties" + + def set_properties(self, positive, negative, positive_NEW, negative_NEW, + strength: float, set_cond_area: str, + mask: torch.Tensor=None, hooks: comfy.hooks.HookGroup=None, timesteps: tuple=None): + final_positive, final_negative = comfy.hooks.set_conds_props_and_combine(conds=[positive, negative], new_conds=[positive_NEW, negative_NEW], + strength=strength, set_cond_area=set_cond_area, + mask=mask, hooks=hooks, timesteps_range=timesteps) + return (final_positive, final_negative) + +class ConditioningSetProperties: + NodeId = 'ConditioningSetProperties' + NodeName = 'Cond Set Props' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "cond_NEW": ("CONDITIONING", ), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "set_cond_area": (["default", "mask bounds"],), + }, + "optional": { + "mask": ("MASK", ), + "hooks": ("HOOKS",), + "timesteps": ("TIMESTEPS_RANGE",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING",) + CATEGORY = "advanced/hooks/cond single" + FUNCTION = "set_properties" + + def set_properties(self, cond_NEW, + strength: float, set_cond_area: str, + mask: torch.Tensor=None, hooks: comfy.hooks.HookGroup=None, timesteps: tuple=None): + (final_cond,) = comfy.hooks.set_conds_props(conds=[cond_NEW], + strength=strength, set_cond_area=set_cond_area, + mask=mask, hooks=hooks, timesteps_range=timesteps) + return (final_cond,) + +class ConditioningSetPropertiesAndCombine: + NodeId = 'ConditioningSetPropertiesAndCombine' + NodeName = 'Cond Set Props Combine' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "cond": ("CONDITIONING", ), + "cond_NEW": ("CONDITIONING", ), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "set_cond_area": (["default", "mask bounds"],), + }, + "optional": { + "mask": ("MASK", ), + "hooks": ("HOOKS",), + "timesteps": ("TIMESTEPS_RANGE",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING",) + CATEGORY = "advanced/hooks/cond single" + FUNCTION = "set_properties" + + def set_properties(self, cond, cond_NEW, + strength: float, set_cond_area: str, + mask: torch.Tensor=None, hooks: comfy.hooks.HookGroup=None, timesteps: tuple=None): + (final_cond,) = comfy.hooks.set_conds_props_and_combine(conds=[cond], new_conds=[cond_NEW], + strength=strength, set_cond_area=set_cond_area, + mask=mask, hooks=hooks, timesteps_range=timesteps) + return (final_cond,) + +class PairConditioningCombine: + NodeId = 'PairConditioningCombine' + NodeName = 'Cond Pair Combine' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "positive_A": ("CONDITIONING",), + "negative_A": ("CONDITIONING",), + "positive_B": ("CONDITIONING",), + "negative_B": ("CONDITIONING",), + }, + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("positive", "negative") + CATEGORY = "advanced/hooks/cond pair" + FUNCTION = "combine" + + def combine(self, positive_A, negative_A, positive_B, negative_B): + final_positive, final_negative = comfy.hooks.set_conds_props_and_combine(conds=[positive_A, negative_A], new_conds=[positive_B, negative_B],) + return (final_positive, final_negative,) + +class PairConditioningSetDefaultAndCombine: + NodeId = 'PairConditioningSetDefaultCombine' + NodeName = 'Cond Pair Set Default Combine' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + "positive_DEFAULT": ("CONDITIONING",), + "negative_DEFAULT": ("CONDITIONING",), + }, + "optional": { + "hooks": ("HOOKS",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("positive", "negative") + CATEGORY = "advanced/hooks/cond pair" + FUNCTION = "set_default_and_combine" + + def set_default_and_combine(self, positive, negative, positive_DEFAULT, negative_DEFAULT, + hooks: comfy.hooks.HookGroup=None): + final_positive, final_negative = comfy.hooks.set_default_conds_and_combine(conds=[positive, negative], new_conds=[positive_DEFAULT, negative_DEFAULT], + hooks=hooks) + return (final_positive, final_negative) + +class ConditioningSetDefaultAndCombine: + NodeId = 'ConditioningSetDefaultCombine' + NodeName = 'Cond Set Default Combine' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "cond": ("CONDITIONING",), + "cond_DEFAULT": ("CONDITIONING",), + }, + "optional": { + "hooks": ("HOOKS",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING",) + CATEGORY = "advanced/hooks/cond single" + FUNCTION = "set_default_and_combine" + + def set_default_and_combine(self, cond, cond_DEFAULT, + hooks: comfy.hooks.HookGroup=None): + (final_conditioning,) = comfy.hooks.set_default_conds_and_combine(conds=[cond], new_conds=[cond_DEFAULT], + hooks=hooks) + return (final_conditioning,) + +class SetClipHooks: + NodeId = 'SetClipHooks' + NodeName = 'Set CLIP Hooks' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "clip": ("CLIP",), + "apply_to_conds": ("BOOLEAN", {"default": True}), + "schedule_clip": ("BOOLEAN", {"default": False}) + }, + "optional": { + "hooks": ("HOOKS",) + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CLIP",) + CATEGORY = "advanced/hooks/clip" + FUNCTION = "apply_hooks" + + def apply_hooks(self, clip: CLIP, schedule_clip: bool, apply_to_conds: bool, hooks: comfy.hooks.HookGroup=None): + if hooks is not None: + clip = clip.clone() + if apply_to_conds: + clip.apply_hooks_to_conds = hooks + clip.patcher.forced_hooks = hooks.clone() + clip.use_clip_schedule = schedule_clip + if not clip.use_clip_schedule: + clip.patcher.forced_hooks.set_keyframes_on_hooks(None) + clip.patcher.register_all_hook_patches(hooks, comfy.hooks.create_target_dict(comfy.hooks.EnumWeightTarget.Clip)) + return (clip,) + +class ConditioningTimestepsRange: + NodeId = 'ConditioningTimestepsRange' + NodeName = 'Timesteps Range' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}) + }, + } + + EXPERIMENTAL = True + RETURN_TYPES = ("TIMESTEPS_RANGE", "TIMESTEPS_RANGE", "TIMESTEPS_RANGE") + RETURN_NAMES = ("TIMESTEPS_RANGE", "BEFORE_RANGE", "AFTER_RANGE") + CATEGORY = "advanced/hooks" + FUNCTION = "create_range" + + def create_range(self, start_percent: float, end_percent: float): + return ((start_percent, end_percent), (0.0, start_percent), (end_percent, 1.0)) +#------------------------------------------ +########################################### + + +########################################### +# Create Hooks +#------------------------------------------ +class CreateHookLora: + NodeId = 'CreateHookLora' + NodeName = 'Create Hook LoRA' + def __init__(self): + self.loaded_lora = None + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "lora_name": (folder_paths.get_filename_list("loras"), ), + "strength_model": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + "strength_clip": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + }, + "optional": { + "prev_hooks": ("HOOKS",) + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/create" + FUNCTION = "create_hook" + + def create_hook(self, lora_name: str, strength_model: float, strength_clip: float, prev_hooks: comfy.hooks.HookGroup=None): + if prev_hooks is None: + prev_hooks = comfy.hooks.HookGroup() + prev_hooks.clone() + + if strength_model == 0 and strength_clip == 0: + return (prev_hooks,) + + lora_path = folder_paths.get_full_path("loras", lora_name) + lora = None + if self.loaded_lora is not None: + if self.loaded_lora[0] == lora_path: + lora = self.loaded_lora[1] + else: + temp = self.loaded_lora + self.loaded_lora = None + del temp + + if lora is None: + lora = comfy.utils.load_torch_file(lora_path, safe_load=True) + self.loaded_lora = (lora_path, lora) + + hooks = comfy.hooks.create_hook_lora(lora=lora, strength_model=strength_model, strength_clip=strength_clip) + return (prev_hooks.clone_and_combine(hooks),) + +class CreateHookLoraModelOnly(CreateHookLora): + NodeId = 'CreateHookLoraModelOnly' + NodeName = 'Create Hook LoRA (MO)' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "lora_name": (folder_paths.get_filename_list("loras"), ), + "strength_model": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + }, + "optional": { + "prev_hooks": ("HOOKS",) + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/create" + FUNCTION = "create_hook_model_only" + + def create_hook_model_only(self, lora_name: str, strength_model: float, prev_hooks: comfy.hooks.HookGroup=None): + return self.create_hook(lora_name=lora_name, strength_model=strength_model, strength_clip=0, prev_hooks=prev_hooks) + +class CreateHookModelAsLora: + NodeId = 'CreateHookModelAsLora' + NodeName = 'Create Hook Model as LoRA' + + def __init__(self): + # when not None, will be in following format: + # (ckpt_path: str, weights_model: dict, weights_clip: dict) + self.loaded_weights = None + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (folder_paths.get_filename_list("checkpoints"), ), + "strength_model": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + "strength_clip": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + }, + "optional": { + "prev_hooks": ("HOOKS",) + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/create" + FUNCTION = "create_hook" + + def create_hook(self, ckpt_name: str, strength_model: float, strength_clip: float, + prev_hooks: comfy.hooks.HookGroup=None): + if prev_hooks is None: + prev_hooks = comfy.hooks.HookGroup() + prev_hooks.clone() + + ckpt_path = folder_paths.get_full_path("checkpoints", ckpt_name) + weights_model = None + weights_clip = None + if self.loaded_weights is not None: + if self.loaded_weights[0] == ckpt_path: + weights_model = self.loaded_weights[1] + weights_clip = self.loaded_weights[2] + else: + temp = self.loaded_weights + self.loaded_weights = None + del temp + + if weights_model is None: + out = comfy.sd.load_checkpoint_guess_config(ckpt_path, output_vae=True, output_clip=True, embedding_directory=folder_paths.get_folder_paths("embeddings")) + weights_model = comfy.hooks.get_patch_weights_from_model(out[0]) + weights_clip = comfy.hooks.get_patch_weights_from_model(out[1].patcher if out[1] else out[1]) + self.loaded_weights = (ckpt_path, weights_model, weights_clip) + + hooks = comfy.hooks.create_hook_model_as_lora(weights_model=weights_model, weights_clip=weights_clip, + strength_model=strength_model, strength_clip=strength_clip) + return (prev_hooks.clone_and_combine(hooks),) + +class CreateHookModelAsLoraModelOnly(CreateHookModelAsLora): + NodeId = 'CreateHookModelAsLoraModelOnly' + NodeName = 'Create Hook Model as LoRA (MO)' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (folder_paths.get_filename_list("checkpoints"), ), + "strength_model": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + }, + "optional": { + "prev_hooks": ("HOOKS",) + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/create" + FUNCTION = "create_hook_model_only" + + def create_hook_model_only(self, ckpt_name: str, strength_model: float, + prev_hooks: comfy.hooks.HookGroup=None): + return self.create_hook(ckpt_name=ckpt_name, strength_model=strength_model, strength_clip=0.0, prev_hooks=prev_hooks) +#------------------------------------------ +########################################### + + +########################################### +# Schedule Hooks +#------------------------------------------ +class SetHookKeyframes: + NodeId = 'SetHookKeyframes' + NodeName = 'Set Hook Keyframes' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "hooks": ("HOOKS",), + }, + "optional": { + "hook_kf": ("HOOK_KEYFRAMES",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/scheduling" + FUNCTION = "set_hook_keyframes" + + def set_hook_keyframes(self, hooks: comfy.hooks.HookGroup, hook_kf: comfy.hooks.HookKeyframeGroup=None): + if hook_kf is not None: + hooks = hooks.clone() + hooks.set_keyframes_on_hooks(hook_kf=hook_kf) + return (hooks,) + +class CreateHookKeyframe: + NodeId = 'CreateHookKeyframe' + NodeName = 'Create Hook Keyframe' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "strength_mult": ("FLOAT", {"default": 1.0, "min": -20.0, "max": 20.0, "step": 0.01}), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + }, + "optional": { + "prev_hook_kf": ("HOOK_KEYFRAMES",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOK_KEYFRAMES",) + RETURN_NAMES = ("HOOK_KF",) + CATEGORY = "advanced/hooks/scheduling" + FUNCTION = "create_hook_keyframe" + + def create_hook_keyframe(self, strength_mult: float, start_percent: float, prev_hook_kf: comfy.hooks.HookKeyframeGroup=None): + if prev_hook_kf is None: + prev_hook_kf = comfy.hooks.HookKeyframeGroup() + prev_hook_kf = prev_hook_kf.clone() + keyframe = comfy.hooks.HookKeyframe(strength=strength_mult, start_percent=start_percent) + prev_hook_kf.add(keyframe) + return (prev_hook_kf,) + +class CreateHookKeyframesInterpolated: + NodeId = 'CreateHookKeyframesInterpolated' + NodeName = 'Create Hook Keyframes Interp.' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "strength_start": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}, ), + "strength_end": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}, ), + "interpolation": (comfy.hooks.InterpolationMethod._LIST, ), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "keyframes_count": ("INT", {"default": 5, "min": 2, "max": 100, "step": 1}), + "print_keyframes": ("BOOLEAN", {"default": False}), + }, + "optional": { + "prev_hook_kf": ("HOOK_KEYFRAMES",), + }, + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOK_KEYFRAMES",) + RETURN_NAMES = ("HOOK_KF",) + CATEGORY = "advanced/hooks/scheduling" + FUNCTION = "create_hook_keyframes" + + def create_hook_keyframes(self, strength_start: float, strength_end: float, interpolation: str, + start_percent: float, end_percent: float, keyframes_count: int, + print_keyframes=False, prev_hook_kf: comfy.hooks.HookKeyframeGroup=None): + if prev_hook_kf is None: + prev_hook_kf = comfy.hooks.HookKeyframeGroup() + prev_hook_kf = prev_hook_kf.clone() + percents = comfy.hooks.InterpolationMethod.get_weights(num_from=start_percent, num_to=end_percent, length=keyframes_count, + method=comfy.hooks.InterpolationMethod.LINEAR) + strengths = comfy.hooks.InterpolationMethod.get_weights(num_from=strength_start, num_to=strength_end, length=keyframes_count, method=interpolation) + + is_first = True + for percent, strength in zip(percents, strengths): + guarantee_steps = 0 + if is_first: + guarantee_steps = 1 + is_first = False + prev_hook_kf.add(comfy.hooks.HookKeyframe(strength=strength, start_percent=percent, guarantee_steps=guarantee_steps)) + if print_keyframes: + logging.info(f"Hook Keyframe - start_percent:{percent} = {strength}") + return (prev_hook_kf,) + +class CreateHookKeyframesFromFloats: + NodeId = 'CreateHookKeyframesFromFloats' + NodeName = 'Create Hook Keyframes From Floats' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "floats_strength": ("FLOATS", {"default": -1, "min": -1, "step": 0.001, "forceInput": True}), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "print_keyframes": ("BOOLEAN", {"default": False}), + }, + "optional": { + "prev_hook_kf": ("HOOK_KEYFRAMES",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOK_KEYFRAMES",) + RETURN_NAMES = ("HOOK_KF",) + CATEGORY = "advanced/hooks/scheduling" + FUNCTION = "create_hook_keyframes" + + def create_hook_keyframes(self, floats_strength: Union[float, list[float]], + start_percent: float, end_percent: float, + prev_hook_kf: comfy.hooks.HookKeyframeGroup=None, print_keyframes=False): + if prev_hook_kf is None: + prev_hook_kf = comfy.hooks.HookKeyframeGroup() + prev_hook_kf = prev_hook_kf.clone() + if type(floats_strength) in (float, int): + floats_strength = [float(floats_strength)] + elif isinstance(floats_strength, Iterable): + pass + else: + raise Exception(f"floats_strength must be either an iterable input or a float, but was{type(floats_strength).__repr__}.") + percents = comfy.hooks.InterpolationMethod.get_weights(num_from=start_percent, num_to=end_percent, length=len(floats_strength), + method=comfy.hooks.InterpolationMethod.LINEAR) + + is_first = True + for percent, strength in zip(percents, floats_strength): + guarantee_steps = 0 + if is_first: + guarantee_steps = 1 + is_first = False + prev_hook_kf.add(comfy.hooks.HookKeyframe(strength=strength, start_percent=percent, guarantee_steps=guarantee_steps)) + if print_keyframes: + logging.info(f"Hook Keyframe - start_percent:{percent} = {strength}") + return (prev_hook_kf,) +#------------------------------------------ +########################################### + + +class SetModelHooksOnCond: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "conditioning": ("CONDITIONING",), + "hooks": ("HOOKS",), + }, + } + + EXPERIMENTAL = True + RETURN_TYPES = ("CONDITIONING",) + CATEGORY = "advanced/hooks/manual" + FUNCTION = "attach_hook" + + def attach_hook(self, conditioning, hooks: comfy.hooks.HookGroup): + return (comfy.hooks.set_hooks_for_conditioning(conditioning, hooks),) + + +########################################### +# Combine Hooks +#------------------------------------------ +class CombineHooks: + NodeId = 'CombineHooks2' + NodeName = 'Combine Hooks [2]' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + }, + "optional": { + "hooks_A": ("HOOKS",), + "hooks_B": ("HOOKS",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/combine" + FUNCTION = "combine_hooks" + + def combine_hooks(self, + hooks_A: comfy.hooks.HookGroup=None, + hooks_B: comfy.hooks.HookGroup=None): + candidates = [hooks_A, hooks_B] + return (comfy.hooks.HookGroup.combine_all_hooks(candidates),) + +class CombineHooksFour: + NodeId = 'CombineHooks4' + NodeName = 'Combine Hooks [4]' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + }, + "optional": { + "hooks_A": ("HOOKS",), + "hooks_B": ("HOOKS",), + "hooks_C": ("HOOKS",), + "hooks_D": ("HOOKS",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/combine" + FUNCTION = "combine_hooks" + + def combine_hooks(self, + hooks_A: comfy.hooks.HookGroup=None, + hooks_B: comfy.hooks.HookGroup=None, + hooks_C: comfy.hooks.HookGroup=None, + hooks_D: comfy.hooks.HookGroup=None): + candidates = [hooks_A, hooks_B, hooks_C, hooks_D] + return (comfy.hooks.HookGroup.combine_all_hooks(candidates),) + +class CombineHooksEight: + NodeId = 'CombineHooks8' + NodeName = 'Combine Hooks [8]' + @classmethod + def INPUT_TYPES(s): + return { + "required": { + }, + "optional": { + "hooks_A": ("HOOKS",), + "hooks_B": ("HOOKS",), + "hooks_C": ("HOOKS",), + "hooks_D": ("HOOKS",), + "hooks_E": ("HOOKS",), + "hooks_F": ("HOOKS",), + "hooks_G": ("HOOKS",), + "hooks_H": ("HOOKS",), + } + } + + EXPERIMENTAL = True + RETURN_TYPES = ("HOOKS",) + CATEGORY = "advanced/hooks/combine" + FUNCTION = "combine_hooks" + + def combine_hooks(self, + hooks_A: comfy.hooks.HookGroup=None, + hooks_B: comfy.hooks.HookGroup=None, + hooks_C: comfy.hooks.HookGroup=None, + hooks_D: comfy.hooks.HookGroup=None, + hooks_E: comfy.hooks.HookGroup=None, + hooks_F: comfy.hooks.HookGroup=None, + hooks_G: comfy.hooks.HookGroup=None, + hooks_H: comfy.hooks.HookGroup=None): + candidates = [hooks_A, hooks_B, hooks_C, hooks_D, hooks_E, hooks_F, hooks_G, hooks_H] + return (comfy.hooks.HookGroup.combine_all_hooks(candidates),) +#------------------------------------------ +########################################### + +node_list = [ + # Create + CreateHookLora, + CreateHookLoraModelOnly, + CreateHookModelAsLora, + CreateHookModelAsLoraModelOnly, + # Scheduling + SetHookKeyframes, + CreateHookKeyframe, + CreateHookKeyframesInterpolated, + CreateHookKeyframesFromFloats, + # Combine + CombineHooks, + CombineHooksFour, + CombineHooksEight, + # Attach + ConditioningSetProperties, + ConditioningSetPropertiesAndCombine, + PairConditioningSetProperties, + PairConditioningSetPropertiesAndCombine, + ConditioningSetDefaultAndCombine, + PairConditioningSetDefaultAndCombine, + PairConditioningCombine, + SetClipHooks, + # Other + ConditioningTimestepsRange, +] +NODE_CLASS_MAPPINGS = {} +NODE_DISPLAY_NAME_MAPPINGS = {} + +for node in node_list: + NODE_CLASS_MAPPINGS[node.NodeId] = node + NODE_DISPLAY_NAME_MAPPINGS[node.NodeId] = node.NodeName diff --git a/comfy_extras/nodes_hunyuan.py b/comfy_extras/nodes_hunyuan.py new file mode 100644 index 0000000000000000000000000000000000000000..d6408269f61dc6dc694a02ba3f0e047261724cb9 --- /dev/null +++ b/comfy_extras/nodes_hunyuan.py @@ -0,0 +1,44 @@ +import nodes +import torch +import comfy.model_management + + +class CLIPTextEncodeHunyuanDiT: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "clip": ("CLIP", ), + "bert": ("STRING", {"multiline": True, "dynamicPrompts": True}), + "mt5xl": ("STRING", {"multiline": True, "dynamicPrompts": True}), + }} + RETURN_TYPES = ("CONDITIONING",) + FUNCTION = "encode" + + CATEGORY = "advanced/conditioning" + + def encode(self, clip, bert, mt5xl): + tokens = clip.tokenize(bert) + tokens["mt5xl"] = clip.tokenize(mt5xl)["mt5xl"] + + return (clip.encode_from_tokens_scheduled(tokens), ) + +class EmptyHunyuanLatentVideo: + @classmethod + def INPUT_TYPES(s): + return {"required": { "width": ("INT", {"default": 848, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "height": ("INT", {"default": 480, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "length": ("INT", {"default": 25, "min": 1, "max": nodes.MAX_RESOLUTION, "step": 4}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096})}} + RETURN_TYPES = ("LATENT",) + FUNCTION = "generate" + + CATEGORY = "latent/video" + + def generate(self, width, height, length, batch_size=1): + latent = torch.zeros([batch_size, 16, ((length - 1) // 4) + 1, height // 8, width // 8], device=comfy.model_management.intermediate_device()) + return ({"samples":latent}, ) + +NODE_CLASS_MAPPINGS = { + "CLIPTextEncodeHunyuanDiT": CLIPTextEncodeHunyuanDiT, + "EmptyHunyuanLatentVideo": EmptyHunyuanLatentVideo, +} diff --git a/comfy_extras/nodes_hypernetwork.py b/comfy_extras/nodes_hypernetwork.py new file mode 100644 index 0000000000000000000000000000000000000000..665632292782e00fff4d73fa085e9c397a9bec4f --- /dev/null +++ b/comfy_extras/nodes_hypernetwork.py @@ -0,0 +1,120 @@ +import comfy.utils +import folder_paths +import torch +import logging + +def load_hypernetwork_patch(path, strength): + sd = comfy.utils.load_torch_file(path, safe_load=True) + activation_func = sd.get('activation_func', 'linear') + is_layer_norm = sd.get('is_layer_norm', False) + use_dropout = sd.get('use_dropout', False) + activate_output = sd.get('activate_output', False) + last_layer_dropout = sd.get('last_layer_dropout', False) + + valid_activation = { + "linear": torch.nn.Identity, + "relu": torch.nn.ReLU, + "leakyrelu": torch.nn.LeakyReLU, + "elu": torch.nn.ELU, + "swish": torch.nn.Hardswish, + "tanh": torch.nn.Tanh, + "sigmoid": torch.nn.Sigmoid, + "softsign": torch.nn.Softsign, + "mish": torch.nn.Mish, + } + + if activation_func not in valid_activation: + logging.error("Unsupported Hypernetwork format, if you report it I might implement it. {} {} {} {} {} {}".format(path, activation_func, is_layer_norm, use_dropout, activate_output, last_layer_dropout)) + return None + + out = {} + + for d in sd: + try: + dim = int(d) + except: + continue + + output = [] + for index in [0, 1]: + attn_weights = sd[dim][index] + keys = attn_weights.keys() + + linears = filter(lambda a: a.endswith(".weight"), keys) + linears = list(map(lambda a: a[:-len(".weight")], linears)) + layers = [] + + i = 0 + while i < len(linears): + lin_name = linears[i] + last_layer = (i == (len(linears) - 1)) + penultimate_layer = (i == (len(linears) - 2)) + + lin_weight = attn_weights['{}.weight'.format(lin_name)] + lin_bias = attn_weights['{}.bias'.format(lin_name)] + layer = torch.nn.Linear(lin_weight.shape[1], lin_weight.shape[0]) + layer.load_state_dict({"weight": lin_weight, "bias": lin_bias}) + layers.append(layer) + if activation_func != "linear": + if (not last_layer) or (activate_output): + layers.append(valid_activation[activation_func]()) + if is_layer_norm: + i += 1 + ln_name = linears[i] + ln_weight = attn_weights['{}.weight'.format(ln_name)] + ln_bias = attn_weights['{}.bias'.format(ln_name)] + ln = torch.nn.LayerNorm(ln_weight.shape[0]) + ln.load_state_dict({"weight": ln_weight, "bias": ln_bias}) + layers.append(ln) + if use_dropout: + if (not last_layer) and (not penultimate_layer or last_layer_dropout): + layers.append(torch.nn.Dropout(p=0.3)) + i += 1 + + output.append(torch.nn.Sequential(*layers)) + out[dim] = torch.nn.ModuleList(output) + + class hypernetwork_patch: + def __init__(self, hypernet, strength): + self.hypernet = hypernet + self.strength = strength + def __call__(self, q, k, v, extra_options): + dim = k.shape[-1] + if dim in self.hypernet: + hn = self.hypernet[dim] + k = k + hn[0](k) * self.strength + v = v + hn[1](v) * self.strength + + return q, k, v + + def to(self, device): + for d in self.hypernet.keys(): + self.hypernet[d] = self.hypernet[d].to(device) + return self + + return hypernetwork_patch(out, strength) + +class HypernetworkLoader: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "hypernetwork_name": (folder_paths.get_filename_list("hypernetworks"), ), + "strength": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "load_hypernetwork" + + CATEGORY = "loaders" + + def load_hypernetwork(self, model, hypernetwork_name, strength): + hypernetwork_path = folder_paths.get_full_path_or_raise("hypernetworks", hypernetwork_name) + model_hypernetwork = model.clone() + patch = load_hypernetwork_patch(hypernetwork_path, strength) + if patch is not None: + model_hypernetwork.set_model_attn1_patch(patch) + model_hypernetwork.set_model_attn2_patch(patch) + return (model_hypernetwork,) + +NODE_CLASS_MAPPINGS = { + "HypernetworkLoader": HypernetworkLoader +} diff --git a/comfy_extras/nodes_hypertile.py b/comfy_extras/nodes_hypertile.py new file mode 100644 index 0000000000000000000000000000000000000000..b366117c7bd811ec98f2464eef4b4cc3e8d86f1b --- /dev/null +++ b/comfy_extras/nodes_hypertile.py @@ -0,0 +1,81 @@ +#Taken from: https://github.com/tfernd/HyperTile/ + +import math +from einops import rearrange +# Use torch rng for consistency across generations +from torch import randint + +def random_divisor(value: int, min_value: int, /, max_options: int = 1) -> int: + min_value = min(min_value, value) + + # All big divisors of value (inclusive) + divisors = [i for i in range(min_value, value + 1) if value % i == 0] + + ns = [value // i for i in divisors[:max_options]] # has at least 1 element + + if len(ns) - 1 > 0: + idx = randint(low=0, high=len(ns) - 1, size=(1,)).item() + else: + idx = 0 + + return ns[idx] + +class HyperTile: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "tile_size": ("INT", {"default": 256, "min": 1, "max": 2048}), + "swap_size": ("INT", {"default": 2, "min": 1, "max": 128}), + "max_depth": ("INT", {"default": 0, "min": 0, "max": 10}), + "scale_depth": ("BOOLEAN", {"default": False}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "model_patches/unet" + + def patch(self, model, tile_size, swap_size, max_depth, scale_depth): + latent_tile_size = max(32, tile_size) // 8 + self.temp = None + + def hypertile_in(q, k, v, extra_options): + model_chans = q.shape[-2] + orig_shape = extra_options['original_shape'] + apply_to = [] + for i in range(max_depth + 1): + apply_to.append((orig_shape[-2] / (2 ** i)) * (orig_shape[-1] / (2 ** i))) + + if model_chans in apply_to: + shape = extra_options["original_shape"] + aspect_ratio = shape[-1] / shape[-2] + + hw = q.size(1) + h, w = round(math.sqrt(hw * aspect_ratio)), round(math.sqrt(hw / aspect_ratio)) + + factor = (2 ** apply_to.index(model_chans)) if scale_depth else 1 + nh = random_divisor(h, latent_tile_size * factor, swap_size) + nw = random_divisor(w, latent_tile_size * factor, swap_size) + + if nh * nw > 1: + q = rearrange(q, "b (nh h nw w) c -> (b nh nw) (h w) c", h=h // nh, w=w // nw, nh=nh, nw=nw) + self.temp = (nh, nw, h, w) + return q, k, v + + return q, k, v + def hypertile_out(out, extra_options): + if self.temp is not None: + nh, nw, h, w = self.temp + self.temp = None + out = rearrange(out, "(b nh nw) hw c -> b nh nw hw c", nh=nh, nw=nw) + out = rearrange(out, "b nh nw (h w) c -> b (nh h nw w) c", h=h // nh, w=w // nw) + return out + + + m = model.clone() + m.set_model_attn1_patch(hypertile_in) + m.set_model_attn1_output_patch(hypertile_out) + return (m, ) + +NODE_CLASS_MAPPINGS = { + "HyperTile": HyperTile, +} diff --git a/comfy_extras/nodes_images.py b/comfy_extras/nodes_images.py new file mode 100644 index 0000000000000000000000000000000000000000..af37666b29fcf5d6a572b715682fd031e28639bc --- /dev/null +++ b/comfy_extras/nodes_images.py @@ -0,0 +1,195 @@ +import nodes +import folder_paths +from comfy.cli_args import args + +from PIL import Image +from PIL.PngImagePlugin import PngInfo + +import numpy as np +import json +import os + +MAX_RESOLUTION = nodes.MAX_RESOLUTION + +class ImageCrop: + @classmethod + def INPUT_TYPES(s): + return {"required": { "image": ("IMAGE",), + "width": ("INT", {"default": 512, "min": 1, "max": MAX_RESOLUTION, "step": 1}), + "height": ("INT", {"default": 512, "min": 1, "max": MAX_RESOLUTION, "step": 1}), + "x": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "y": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + }} + RETURN_TYPES = ("IMAGE",) + FUNCTION = "crop" + + CATEGORY = "image/transform" + + def crop(self, image, width, height, x, y): + x = min(x, image.shape[2] - 1) + y = min(y, image.shape[1] - 1) + to_x = width + x + to_y = height + y + img = image[:,y:to_y, x:to_x, :] + return (img,) + +class RepeatImageBatch: + @classmethod + def INPUT_TYPES(s): + return {"required": { "image": ("IMAGE",), + "amount": ("INT", {"default": 1, "min": 1, "max": 4096}), + }} + RETURN_TYPES = ("IMAGE",) + FUNCTION = "repeat" + + CATEGORY = "image/batch" + + def repeat(self, image, amount): + s = image.repeat((amount, 1,1,1)) + return (s,) + +class ImageFromBatch: + @classmethod + def INPUT_TYPES(s): + return {"required": { "image": ("IMAGE",), + "batch_index": ("INT", {"default": 0, "min": 0, "max": 4095}), + "length": ("INT", {"default": 1, "min": 1, "max": 4096}), + }} + RETURN_TYPES = ("IMAGE",) + FUNCTION = "frombatch" + + CATEGORY = "image/batch" + + def frombatch(self, image, batch_index, length): + s_in = image + batch_index = min(s_in.shape[0] - 1, batch_index) + length = min(s_in.shape[0] - batch_index, length) + s = s_in[batch_index:batch_index + length].clone() + return (s,) + +class SaveAnimatedWEBP: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + self.type = "output" + self.prefix_append = "" + + methods = {"default": 4, "fastest": 0, "slowest": 6} + @classmethod + def INPUT_TYPES(s): + return {"required": + {"images": ("IMAGE", ), + "filename_prefix": ("STRING", {"default": "ComfyUI"}), + "fps": ("FLOAT", {"default": 6.0, "min": 0.01, "max": 1000.0, "step": 0.01}), + "lossless": ("BOOLEAN", {"default": True}), + "quality": ("INT", {"default": 80, "min": 0, "max": 100}), + "method": (list(s.methods.keys()),), + # "num_frames": ("INT", {"default": 0, "min": 0, "max": 8192}), + }, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, + } + + RETURN_TYPES = () + FUNCTION = "save_images" + + OUTPUT_NODE = True + + CATEGORY = "image/animation" + + def save_images(self, images, fps, filename_prefix, lossless, quality, method, num_frames=0, prompt=None, extra_pnginfo=None): + method = self.methods.get(method) + filename_prefix += self.prefix_append + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir, images[0].shape[1], images[0].shape[0]) + results = list() + pil_images = [] + for image in images: + i = 255. * image.cpu().numpy() + img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8)) + pil_images.append(img) + + metadata = pil_images[0].getexif() + if not args.disable_metadata: + if prompt is not None: + metadata[0x0110] = "prompt:{}".format(json.dumps(prompt)) + if extra_pnginfo is not None: + inital_exif = 0x010f + for x in extra_pnginfo: + metadata[inital_exif] = "{}:{}".format(x, json.dumps(extra_pnginfo[x])) + inital_exif -= 1 + + if num_frames == 0: + num_frames = len(pil_images) + + c = len(pil_images) + for i in range(0, c, num_frames): + file = f"{filename}_{counter:05}_.webp" + pil_images[i].save(os.path.join(full_output_folder, file), save_all=True, duration=int(1000.0/fps), append_images=pil_images[i + 1:i + num_frames], exif=metadata, lossless=lossless, quality=quality, method=method) + results.append({ + "filename": file, + "subfolder": subfolder, + "type": self.type + }) + counter += 1 + + animated = num_frames != 1 + return { "ui": { "images": results, "animated": (animated,) } } + +class SaveAnimatedPNG: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + self.type = "output" + self.prefix_append = "" + + @classmethod + def INPUT_TYPES(s): + return {"required": + {"images": ("IMAGE", ), + "filename_prefix": ("STRING", {"default": "ComfyUI"}), + "fps": ("FLOAT", {"default": 6.0, "min": 0.01, "max": 1000.0, "step": 0.01}), + "compress_level": ("INT", {"default": 4, "min": 0, "max": 9}) + }, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, + } + + RETURN_TYPES = () + FUNCTION = "save_images" + + OUTPUT_NODE = True + + CATEGORY = "image/animation" + + def save_images(self, images, fps, compress_level, filename_prefix="ComfyUI", prompt=None, extra_pnginfo=None): + filename_prefix += self.prefix_append + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir, images[0].shape[1], images[0].shape[0]) + results = list() + pil_images = [] + for image in images: + i = 255. * image.cpu().numpy() + img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8)) + pil_images.append(img) + + metadata = None + if not args.disable_metadata: + metadata = PngInfo() + if prompt is not None: + metadata.add(b"comf", "prompt".encode("latin-1", "strict") + b"\0" + json.dumps(prompt).encode("latin-1", "strict"), after_idat=True) + if extra_pnginfo is not None: + for x in extra_pnginfo: + metadata.add(b"comf", x.encode("latin-1", "strict") + b"\0" + json.dumps(extra_pnginfo[x]).encode("latin-1", "strict"), after_idat=True) + + file = f"{filename}_{counter:05}_.png" + pil_images[0].save(os.path.join(full_output_folder, file), pnginfo=metadata, compress_level=compress_level, save_all=True, duration=int(1000.0/fps), append_images=pil_images[1:]) + results.append({ + "filename": file, + "subfolder": subfolder, + "type": self.type + }) + + return { "ui": { "images": results, "animated": (True,)} } + +NODE_CLASS_MAPPINGS = { + "ImageCrop": ImageCrop, + "RepeatImageBatch": RepeatImageBatch, + "ImageFromBatch": ImageFromBatch, + "SaveAnimatedWEBP": SaveAnimatedWEBP, + "SaveAnimatedPNG": SaveAnimatedPNG, +} diff --git a/comfy_extras/nodes_ip2p.py b/comfy_extras/nodes_ip2p.py new file mode 100644 index 0000000000000000000000000000000000000000..c2e70a84c10ca5cc1b3ca853a97adc3c64fbb315 --- /dev/null +++ b/comfy_extras/nodes_ip2p.py @@ -0,0 +1,45 @@ +import torch + +class InstructPixToPixConditioning: + @classmethod + def INPUT_TYPES(s): + return {"required": {"positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "vae": ("VAE", ), + "pixels": ("IMAGE", ), + }} + + RETURN_TYPES = ("CONDITIONING","CONDITIONING","LATENT") + RETURN_NAMES = ("positive", "negative", "latent") + FUNCTION = "encode" + + CATEGORY = "conditioning/instructpix2pix" + + def encode(self, positive, negative, pixels, vae): + x = (pixels.shape[1] // 8) * 8 + y = (pixels.shape[2] // 8) * 8 + + if pixels.shape[1] != x or pixels.shape[2] != y: + x_offset = (pixels.shape[1] % 8) // 2 + y_offset = (pixels.shape[2] % 8) // 2 + pixels = pixels[:,x_offset:x + x_offset, y_offset:y + y_offset,:] + + concat_latent = vae.encode(pixels) + + out_latent = {} + out_latent["samples"] = torch.zeros_like(concat_latent) + + out = [] + for conditioning in [positive, negative]: + c = [] + for t in conditioning: + d = t[1].copy() + d["concat_latent_image"] = concat_latent + n = [t[0], d] + c.append(n) + out.append(c) + return (out[0], out[1], out_latent) + +NODE_CLASS_MAPPINGS = { + "InstructPixToPixConditioning": InstructPixToPixConditioning, +} diff --git a/comfy_extras/nodes_latent.py b/comfy_extras/nodes_latent.py new file mode 100644 index 0000000000000000000000000000000000000000..f33ed1beea538ee28871e6fcb04da73ae8d4b91c --- /dev/null +++ b/comfy_extras/nodes_latent.py @@ -0,0 +1,288 @@ +import comfy.utils +import comfy_extras.nodes_post_processing +import torch + + +def reshape_latent_to(target_shape, latent, repeat_batch=True): + if latent.shape[1:] != target_shape[1:]: + latent = comfy.utils.common_upscale(latent, target_shape[-1], target_shape[-2], "bilinear", "center") + if repeat_batch: + return comfy.utils.repeat_to_batch_size(latent, target_shape[0]) + else: + return latent + + +class LatentAdd: + @classmethod + def INPUT_TYPES(s): + return {"required": { "samples1": ("LATENT",), "samples2": ("LATENT",)}} + + RETURN_TYPES = ("LATENT",) + FUNCTION = "op" + + CATEGORY = "latent/advanced" + + def op(self, samples1, samples2): + samples_out = samples1.copy() + + s1 = samples1["samples"] + s2 = samples2["samples"] + + s2 = reshape_latent_to(s1.shape, s2) + samples_out["samples"] = s1 + s2 + return (samples_out,) + +class LatentSubtract: + @classmethod + def INPUT_TYPES(s): + return {"required": { "samples1": ("LATENT",), "samples2": ("LATENT",)}} + + RETURN_TYPES = ("LATENT",) + FUNCTION = "op" + + CATEGORY = "latent/advanced" + + def op(self, samples1, samples2): + samples_out = samples1.copy() + + s1 = samples1["samples"] + s2 = samples2["samples"] + + s2 = reshape_latent_to(s1.shape, s2) + samples_out["samples"] = s1 - s2 + return (samples_out,) + +class LatentMultiply: + @classmethod + def INPUT_TYPES(s): + return {"required": { "samples": ("LATENT",), + "multiplier": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), + }} + + RETURN_TYPES = ("LATENT",) + FUNCTION = "op" + + CATEGORY = "latent/advanced" + + def op(self, samples, multiplier): + samples_out = samples.copy() + + s1 = samples["samples"] + samples_out["samples"] = s1 * multiplier + return (samples_out,) + +class LatentInterpolate: + @classmethod + def INPUT_TYPES(s): + return {"required": { "samples1": ("LATENT",), + "samples2": ("LATENT",), + "ratio": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + }} + + RETURN_TYPES = ("LATENT",) + FUNCTION = "op" + + CATEGORY = "latent/advanced" + + def op(self, samples1, samples2, ratio): + samples_out = samples1.copy() + + s1 = samples1["samples"] + s2 = samples2["samples"] + + s2 = reshape_latent_to(s1.shape, s2) + + m1 = torch.linalg.vector_norm(s1, dim=(1)) + m2 = torch.linalg.vector_norm(s2, dim=(1)) + + s1 = torch.nan_to_num(s1 / m1) + s2 = torch.nan_to_num(s2 / m2) + + t = (s1 * ratio + s2 * (1.0 - ratio)) + mt = torch.linalg.vector_norm(t, dim=(1)) + st = torch.nan_to_num(t / mt) + + samples_out["samples"] = st * (m1 * ratio + m2 * (1.0 - ratio)) + return (samples_out,) + +class LatentBatch: + @classmethod + def INPUT_TYPES(s): + return {"required": { "samples1": ("LATENT",), "samples2": ("LATENT",)}} + + RETURN_TYPES = ("LATENT",) + FUNCTION = "batch" + + CATEGORY = "latent/batch" + + def batch(self, samples1, samples2): + samples_out = samples1.copy() + s1 = samples1["samples"] + s2 = samples2["samples"] + + s2 = reshape_latent_to(s1.shape, s2, repeat_batch=False) + s = torch.cat((s1, s2), dim=0) + samples_out["samples"] = s + samples_out["batch_index"] = samples1.get("batch_index", [x for x in range(0, s1.shape[0])]) + samples2.get("batch_index", [x for x in range(0, s2.shape[0])]) + return (samples_out,) + +class LatentBatchSeedBehavior: + @classmethod + def INPUT_TYPES(s): + return {"required": { "samples": ("LATENT",), + "seed_behavior": (["random", "fixed"],{"default": "fixed"}),}} + + RETURN_TYPES = ("LATENT",) + FUNCTION = "op" + + CATEGORY = "latent/advanced" + + def op(self, samples, seed_behavior): + samples_out = samples.copy() + latent = samples["samples"] + if seed_behavior == "random": + if 'batch_index' in samples_out: + samples_out.pop('batch_index') + elif seed_behavior == "fixed": + batch_number = samples_out.get("batch_index", [0])[0] + samples_out["batch_index"] = [batch_number] * latent.shape[0] + + return (samples_out,) + +class LatentApplyOperation: + @classmethod + def INPUT_TYPES(s): + return {"required": { "samples": ("LATENT",), + "operation": ("LATENT_OPERATION",), + }} + + RETURN_TYPES = ("LATENT",) + FUNCTION = "op" + + CATEGORY = "latent/advanced/operations" + EXPERIMENTAL = True + + def op(self, samples, operation): + samples_out = samples.copy() + + s1 = samples["samples"] + samples_out["samples"] = operation(latent=s1) + return (samples_out,) + +class LatentApplyOperationCFG: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "operation": ("LATENT_OPERATION",), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "latent/advanced/operations" + EXPERIMENTAL = True + + def patch(self, model, operation): + m = model.clone() + + def pre_cfg_function(args): + conds_out = args["conds_out"] + if len(conds_out) == 2: + conds_out[0] = operation(latent=(conds_out[0] - conds_out[1])) + conds_out[1] + else: + conds_out[0] = operation(latent=conds_out[0]) + return conds_out + + m.set_model_sampler_pre_cfg_function(pre_cfg_function) + return (m, ) + +class LatentOperationTonemapReinhard: + @classmethod + def INPUT_TYPES(s): + return {"required": { "multiplier": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}), + }} + + RETURN_TYPES = ("LATENT_OPERATION",) + FUNCTION = "op" + + CATEGORY = "latent/advanced/operations" + EXPERIMENTAL = True + + def op(self, multiplier): + def tonemap_reinhard(latent, **kwargs): + latent_vector_magnitude = (torch.linalg.vector_norm(latent, dim=(1)) + 0.0000000001)[:,None] + normalized_latent = latent / latent_vector_magnitude + + mean = torch.mean(latent_vector_magnitude, dim=(1,2,3), keepdim=True) + std = torch.std(latent_vector_magnitude, dim=(1,2,3), keepdim=True) + + top = (std * 5 + mean) * multiplier + + #reinhard + latent_vector_magnitude *= (1.0 / top) + new_magnitude = latent_vector_magnitude / (latent_vector_magnitude + 1.0) + new_magnitude *= top + + return normalized_latent * new_magnitude + return (tonemap_reinhard,) + +class LatentOperationSharpen: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "sharpen_radius": ("INT", { + "default": 9, + "min": 1, + "max": 31, + "step": 1 + }), + "sigma": ("FLOAT", { + "default": 1.0, + "min": 0.1, + "max": 10.0, + "step": 0.1 + }), + "alpha": ("FLOAT", { + "default": 0.1, + "min": 0.0, + "max": 5.0, + "step": 0.01 + }), + }} + + RETURN_TYPES = ("LATENT_OPERATION",) + FUNCTION = "op" + + CATEGORY = "latent/advanced/operations" + EXPERIMENTAL = True + + def op(self, sharpen_radius, sigma, alpha): + def sharpen(latent, **kwargs): + luminance = (torch.linalg.vector_norm(latent, dim=(1)) + 1e-6)[:,None] + normalized_latent = latent / luminance + channels = latent.shape[1] + + kernel_size = sharpen_radius * 2 + 1 + kernel = comfy_extras.nodes_post_processing.gaussian_kernel(kernel_size, sigma, device=luminance.device) + center = kernel_size // 2 + + kernel *= alpha * -10 + kernel[center, center] = kernel[center, center] - kernel.sum() + 1.0 + + padded_image = torch.nn.functional.pad(normalized_latent, (sharpen_radius,sharpen_radius,sharpen_radius,sharpen_radius), 'reflect') + sharpened = torch.nn.functional.conv2d(padded_image, kernel.repeat(channels, 1, 1).unsqueeze(1), padding=kernel_size // 2, groups=channels)[:,:,sharpen_radius:-sharpen_radius, sharpen_radius:-sharpen_radius] + + return luminance * sharpened + return (sharpen,) + +NODE_CLASS_MAPPINGS = { + "LatentAdd": LatentAdd, + "LatentSubtract": LatentSubtract, + "LatentMultiply": LatentMultiply, + "LatentInterpolate": LatentInterpolate, + "LatentBatch": LatentBatch, + "LatentBatchSeedBehavior": LatentBatchSeedBehavior, + "LatentApplyOperation": LatentApplyOperation, + "LatentApplyOperationCFG": LatentApplyOperationCFG, + "LatentOperationTonemapReinhard": LatentOperationTonemapReinhard, + "LatentOperationSharpen": LatentOperationSharpen, +} diff --git a/comfy_extras/nodes_load_3d.py b/comfy_extras/nodes_load_3d.py new file mode 100644 index 0000000000000000000000000000000000000000..3b969e45f351378a62bac1233bc9c7f30ebf6e91 --- /dev/null +++ b/comfy_extras/nodes_load_3d.py @@ -0,0 +1,154 @@ +import nodes +import folder_paths +import os + +def normalize_path(path): + return path.replace('\\', '/') + +class Load3D(): + @classmethod + def INPUT_TYPES(s): + input_dir = os.path.join(folder_paths.get_input_directory(), "3d") + + os.makedirs(input_dir, exist_ok=True) + + files = [normalize_path(os.path.join("3d", f)) for f in os.listdir(input_dir) if f.endswith(('.gltf', '.glb', '.obj', '.mtl', '.fbx', '.stl'))] + + return {"required": { + "model_file": (sorted(files), {"file_upload": True}), + "image": ("LOAD_3D", {}), + "width": ("INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}), + "height": ("INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}), + "material": (["original", "normal", "wireframe", "depth"],), + "light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}), + "up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],), + "fov": ("INT", {"default": 75, "min": 10, "max": 150, "step": 1}), + }} + + RETURN_TYPES = ("IMAGE", "MASK", "STRING") + RETURN_NAMES = ("image", "mask", "mesh_path") + + FUNCTION = "process" + EXPERIMENTAL = True + + CATEGORY = "3d" + + def process(self, model_file, image, **kwargs): + if isinstance(image, dict): + image_path = folder_paths.get_annotated_filepath(image['image']) + mask_path = folder_paths.get_annotated_filepath(image['mask']) + + load_image_node = nodes.LoadImage() + output_image, ignore_mask = load_image_node.load_image(image=image_path) + ignore_image, output_mask = load_image_node.load_image(image=mask_path) + + return output_image, output_mask, model_file, + else: + # to avoid the format is not dict which will happen the FE code is not compatibility to core, + # we need to this to double-check, it can be removed after merged FE into the core + image_path = folder_paths.get_annotated_filepath(image) + load_image_node = nodes.LoadImage() + output_image, output_mask = load_image_node.load_image(image=image_path) + return output_image, output_mask, model_file, + +class Load3DAnimation(): + @classmethod + def INPUT_TYPES(s): + input_dir = os.path.join(folder_paths.get_input_directory(), "3d") + + os.makedirs(input_dir, exist_ok=True) + + files = [normalize_path(os.path.join("3d", f)) for f in os.listdir(input_dir) if f.endswith(('.gltf', '.glb', '.fbx'))] + + return {"required": { + "model_file": (sorted(files), {"file_upload": True}), + "image": ("LOAD_3D_ANIMATION", {}), + "width": ("INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}), + "height": ("INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}), + "material": (["original", "normal", "wireframe", "depth"],), + "light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}), + "up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],), + "fov": ("INT", {"default": 75, "min": 10, "max": 150, "step": 1}), + }} + + RETURN_TYPES = ("IMAGE", "MASK", "STRING") + RETURN_NAMES = ("image", "mask", "mesh_path") + + FUNCTION = "process" + EXPERIMENTAL = True + + CATEGORY = "3d" + + def process(self, model_file, image, **kwargs): + if isinstance(image, dict): + image_path = folder_paths.get_annotated_filepath(image['image']) + mask_path = folder_paths.get_annotated_filepath(image['mask']) + + load_image_node = nodes.LoadImage() + output_image, ignore_mask = load_image_node.load_image(image=image_path) + ignore_image, output_mask = load_image_node.load_image(image=mask_path) + + return output_image, output_mask, model_file, + else: + image_path = folder_paths.get_annotated_filepath(image) + load_image_node = nodes.LoadImage() + output_image, output_mask = load_image_node.load_image(image=image_path) + return output_image, output_mask, model_file, + +class Preview3D(): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model_file": ("STRING", {"default": "", "multiline": False}), + "material": (["original", "normal", "wireframe", "depth"],), + "light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}), + "up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],), + "fov": ("INT", {"default": 75, "min": 10, "max": 150, "step": 1}), + }} + + OUTPUT_NODE = True + RETURN_TYPES = () + + CATEGORY = "3d" + + FUNCTION = "process" + EXPERIMENTAL = True + + def process(self, model_file, **kwargs): + return {"ui": {"model_file": [model_file]}, "result": ()} + +class Preview3DAnimation(): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model_file": ("STRING", {"default": "", "multiline": False}), + "material": (["original", "normal", "wireframe", "depth"],), + "light_intensity": ("INT", {"default": 10, "min": 1, "max": 20, "step": 1}), + "up_direction": (["original", "-x", "+x", "-y", "+y", "-z", "+z"],), + "fov": ("INT", {"default": 75, "min": 10, "max": 150, "step": 1}), + }} + + OUTPUT_NODE = True + RETURN_TYPES = () + + CATEGORY = "3d" + + FUNCTION = "process" + EXPERIMENTAL = True + + def process(self, model_file, **kwargs): + return {"ui": {"model_file": [model_file]}, "result": ()} + +NODE_CLASS_MAPPINGS = { + "Load3D": Load3D, + "Load3DAnimation": Load3DAnimation, + "Preview3D": Preview3D, + "Preview3DAnimation": Preview3DAnimation +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "Load3D": "Load 3D", + "Load3DAnimation": "Load 3D - Animation", + "Preview3D": "Preview 3D", + "Preview3DAnimation": "Preview 3D - Animation" +} diff --git a/comfy_extras/nodes_lora_extract.py b/comfy_extras/nodes_lora_extract.py new file mode 100644 index 0000000000000000000000000000000000000000..dfd4fe9f4a5c4b7aff37d244fc25033e9a286119 --- /dev/null +++ b/comfy_extras/nodes_lora_extract.py @@ -0,0 +1,119 @@ +import torch +import comfy.model_management +import comfy.utils +import folder_paths +import os +import logging +from enum import Enum + +CLAMP_QUANTILE = 0.99 + +def extract_lora(diff, rank): + conv2d = (len(diff.shape) == 4) + kernel_size = None if not conv2d else diff.size()[2:4] + conv2d_3x3 = conv2d and kernel_size != (1, 1) + out_dim, in_dim = diff.size()[0:2] + rank = min(rank, in_dim, out_dim) + + if conv2d: + if conv2d_3x3: + diff = diff.flatten(start_dim=1) + else: + diff = diff.squeeze() + + + U, S, Vh = torch.linalg.svd(diff.float()) + U = U[:, :rank] + S = S[:rank] + U = U @ torch.diag(S) + Vh = Vh[:rank, :] + + dist = torch.cat([U.flatten(), Vh.flatten()]) + hi_val = torch.quantile(dist, CLAMP_QUANTILE) + low_val = -hi_val + + U = U.clamp(low_val, hi_val) + Vh = Vh.clamp(low_val, hi_val) + if conv2d: + U = U.reshape(out_dim, rank, 1, 1) + Vh = Vh.reshape(rank, in_dim, kernel_size[0], kernel_size[1]) + return (U, Vh) + +class LORAType(Enum): + STANDARD = 0 + FULL_DIFF = 1 + +LORA_TYPES = {"standard": LORAType.STANDARD, + "full_diff": LORAType.FULL_DIFF} + +def calc_lora_model(model_diff, rank, prefix_model, prefix_lora, output_sd, lora_type, bias_diff=False): + comfy.model_management.load_models_gpu([model_diff], force_patch_weights=True) + sd = model_diff.model_state_dict(filter_prefix=prefix_model) + + for k in sd: + if k.endswith(".weight"): + weight_diff = sd[k] + if lora_type == LORAType.STANDARD: + if weight_diff.ndim < 2: + if bias_diff: + output_sd["{}{}.diff".format(prefix_lora, k[len(prefix_model):-7])] = weight_diff.contiguous().half().cpu() + continue + try: + out = extract_lora(weight_diff, rank) + output_sd["{}{}.lora_up.weight".format(prefix_lora, k[len(prefix_model):-7])] = out[0].contiguous().half().cpu() + output_sd["{}{}.lora_down.weight".format(prefix_lora, k[len(prefix_model):-7])] = out[1].contiguous().half().cpu() + except: + logging.warning("Could not generate lora weights for key {}, is the weight difference a zero?".format(k)) + elif lora_type == LORAType.FULL_DIFF: + output_sd["{}{}.diff".format(prefix_lora, k[len(prefix_model):-7])] = weight_diff.contiguous().half().cpu() + + elif bias_diff and k.endswith(".bias"): + output_sd["{}{}.diff_b".format(prefix_lora, k[len(prefix_model):-5])] = sd[k].contiguous().half().cpu() + return output_sd + +class LoraSave: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + + @classmethod + def INPUT_TYPES(s): + return {"required": {"filename_prefix": ("STRING", {"default": "loras/ComfyUI_extracted_lora"}), + "rank": ("INT", {"default": 8, "min": 1, "max": 4096, "step": 1}), + "lora_type": (tuple(LORA_TYPES.keys()),), + "bias_diff": ("BOOLEAN", {"default": True}), + }, + "optional": {"model_diff": ("MODEL", {"tooltip": "The ModelSubtract output to be converted to a lora."}), + "text_encoder_diff": ("CLIP", {"tooltip": "The CLIPSubtract output to be converted to a lora."})}, + } + RETURN_TYPES = () + FUNCTION = "save" + OUTPUT_NODE = True + + CATEGORY = "_for_testing" + + def save(self, filename_prefix, rank, lora_type, bias_diff, model_diff=None, text_encoder_diff=None): + if model_diff is None and text_encoder_diff is None: + return {} + + lora_type = LORA_TYPES.get(lora_type) + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir) + + output_sd = {} + if model_diff is not None: + output_sd = calc_lora_model(model_diff, rank, "diffusion_model.", "diffusion_model.", output_sd, lora_type, bias_diff=bias_diff) + if text_encoder_diff is not None: + output_sd = calc_lora_model(text_encoder_diff.patcher, rank, "", "text_encoders.", output_sd, lora_type, bias_diff=bias_diff) + + output_checkpoint = f"{filename}_{counter:05}_.safetensors" + output_checkpoint = os.path.join(full_output_folder, output_checkpoint) + + comfy.utils.save_torch_file(output_sd, output_checkpoint, metadata=None) + return {} + +NODE_CLASS_MAPPINGS = { + "LoraSave": LoraSave +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "LoraSave": "Extract and Save Lora" +} diff --git a/comfy_extras/nodes_lt.py b/comfy_extras/nodes_lt.py new file mode 100644 index 0000000000000000000000000000000000000000..dec9124160752155ead96a1f72db830f1895b32f --- /dev/null +++ b/comfy_extras/nodes_lt.py @@ -0,0 +1,184 @@ +import nodes +import node_helpers +import torch +import comfy.model_management +import comfy.model_sampling +import math + +class EmptyLTXVLatentVideo: + @classmethod + def INPUT_TYPES(s): + return {"required": { "width": ("INT", {"default": 768, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 32}), + "height": ("INT", {"default": 512, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 32}), + "length": ("INT", {"default": 97, "min": 1, "max": nodes.MAX_RESOLUTION, "step": 8}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096})}} + RETURN_TYPES = ("LATENT",) + FUNCTION = "generate" + + CATEGORY = "latent/video/ltxv" + + def generate(self, width, height, length, batch_size=1): + latent = torch.zeros([batch_size, 128, ((length - 1) // 8) + 1, height // 32, width // 32], device=comfy.model_management.intermediate_device()) + return ({"samples": latent}, ) + + +class LTXVImgToVideo: + @classmethod + def INPUT_TYPES(s): + return {"required": {"positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "vae": ("VAE",), + "image": ("IMAGE",), + "width": ("INT", {"default": 768, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 32}), + "height": ("INT", {"default": 512, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 32}), + "length": ("INT", {"default": 97, "min": 9, "max": nodes.MAX_RESOLUTION, "step": 8}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096}), + "image_noise_scale": ("FLOAT", {"default": 0.15, "min": 0, "max": 1.0, "step": 0.01, "tooltip": "Amount of noise to apply on conditioning image latent."}) + }} + + RETURN_TYPES = ("CONDITIONING", "CONDITIONING", "LATENT") + RETURN_NAMES = ("positive", "negative", "latent") + + CATEGORY = "conditioning/video_models" + FUNCTION = "generate" + + def generate(self, positive, negative, image, vae, width, height, length, batch_size, image_noise_scale): + pixels = comfy.utils.common_upscale(image.movedim(-1, 1), width, height, "bilinear", "center").movedim(1, -1) + encode_pixels = pixels[:, :, :, :3] + t = vae.encode(encode_pixels) + positive = node_helpers.conditioning_set_values(positive, {"guiding_latent": t, "guiding_latent_noise_scale": image_noise_scale}) + negative = node_helpers.conditioning_set_values(negative, {"guiding_latent": t, "guiding_latent_noise_scale": image_noise_scale}) + + latent = torch.zeros([batch_size, 128, ((length - 1) // 8) + 1, height // 32, width // 32], device=comfy.model_management.intermediate_device()) + latent[:, :, :t.shape[2]] = t + return (positive, negative, {"samples": latent}, ) + + +class LTXVConditioning: + @classmethod + def INPUT_TYPES(s): + return {"required": {"positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "frame_rate": ("FLOAT", {"default": 25.0, "min": 0.0, "max": 1000.0, "step": 0.01}), + }} + RETURN_TYPES = ("CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("positive", "negative") + FUNCTION = "append" + + CATEGORY = "conditioning/video_models" + + def append(self, positive, negative, frame_rate): + positive = node_helpers.conditioning_set_values(positive, {"frame_rate": frame_rate}) + negative = node_helpers.conditioning_set_values(negative, {"frame_rate": frame_rate}) + return (positive, negative) + + +class ModelSamplingLTXV: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "max_shift": ("FLOAT", {"default": 2.05, "min": 0.0, "max": 100.0, "step":0.01}), + "base_shift": ("FLOAT", {"default": 0.95, "min": 0.0, "max": 100.0, "step":0.01}), + }, + "optional": {"latent": ("LATENT",), } + } + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "advanced/model" + + def patch(self, model, max_shift, base_shift, latent=None): + m = model.clone() + + if latent is None: + tokens = 4096 + else: + tokens = math.prod(latent["samples"].shape[2:]) + + x1 = 1024 + x2 = 4096 + mm = (max_shift - base_shift) / (x2 - x1) + b = base_shift - mm * x1 + shift = (tokens) * mm + b + + sampling_base = comfy.model_sampling.ModelSamplingFlux + sampling_type = comfy.model_sampling.CONST + + class ModelSamplingAdvanced(sampling_base, sampling_type): + pass + + model_sampling = ModelSamplingAdvanced(model.model.model_config) + model_sampling.set_parameters(shift=shift) + m.add_object_patch("model_sampling", model_sampling) + + return (m, ) + + +class LTXVScheduler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "max_shift": ("FLOAT", {"default": 2.05, "min": 0.0, "max": 100.0, "step":0.01}), + "base_shift": ("FLOAT", {"default": 0.95, "min": 0.0, "max": 100.0, "step":0.01}), + "stretch": ("BOOLEAN", { + "default": True, + "tooltip": "Stretch the sigmas to be in the range [terminal, 1]." + }), + "terminal": ( + "FLOAT", + { + "default": 0.1, "min": 0.0, "max": 0.99, "step": 0.01, + "tooltip": "The terminal value of the sigmas after stretching." + }, + ), + }, + "optional": {"latent": ("LATENT",), } + } + + RETURN_TYPES = ("SIGMAS",) + CATEGORY = "sampling/custom_sampling/schedulers" + + FUNCTION = "get_sigmas" + + def get_sigmas(self, steps, max_shift, base_shift, stretch, terminal, latent=None): + if latent is None: + tokens = 4096 + else: + tokens = math.prod(latent["samples"].shape[2:]) + + sigmas = torch.linspace(1.0, 0.0, steps + 1) + + x1 = 1024 + x2 = 4096 + mm = (max_shift - base_shift) / (x2 - x1) + b = base_shift - mm * x1 + sigma_shift = (tokens) * mm + b + + power = 1 + sigmas = torch.where( + sigmas != 0, + math.exp(sigma_shift) / (math.exp(sigma_shift) + (1 / sigmas - 1) ** power), + 0, + ) + + # Stretch sigmas so that its final value matches the given terminal value. + if stretch: + non_zero_mask = sigmas != 0 + non_zero_sigmas = sigmas[non_zero_mask] + one_minus_z = 1.0 - non_zero_sigmas + scale_factor = one_minus_z[-1] / (1.0 - terminal) + stretched = 1.0 - (one_minus_z / scale_factor) + sigmas[non_zero_mask] = stretched + + return (sigmas,) + + +NODE_CLASS_MAPPINGS = { + "EmptyLTXVLatentVideo": EmptyLTXVLatentVideo, + "LTXVImgToVideo": LTXVImgToVideo, + "ModelSamplingLTXV": ModelSamplingLTXV, + "LTXVConditioning": LTXVConditioning, + "LTXVScheduler": LTXVScheduler, +} diff --git a/comfy_extras/nodes_mahiro.py b/comfy_extras/nodes_mahiro.py new file mode 100644 index 0000000000000000000000000000000000000000..8fcdfba759f97515e5f64d3a130b0d892005cff2 --- /dev/null +++ b/comfy_extras/nodes_mahiro.py @@ -0,0 +1,41 @@ +import torch +import torch.nn.functional as F + +class Mahiro: + @classmethod + def INPUT_TYPES(s): + return {"required": {"model": ("MODEL",), + }} + RETURN_TYPES = ("MODEL",) + RETURN_NAMES = ("patched_model",) + FUNCTION = "patch" + CATEGORY = "_for_testing" + DESCRIPTION = "Modify the guidance to scale more on the 'direction' of the positive prompt rather than the difference between the negative prompt." + def patch(self, model): + m = model.clone() + def mahiro_normd(args): + scale: float = args['cond_scale'] + cond_p: torch.Tensor = args['cond_denoised'] + uncond_p: torch.Tensor = args['uncond_denoised'] + #naive leap + leap = cond_p * scale + #sim with uncond leap + u_leap = uncond_p * scale + cfg = args["denoised"] + merge = (leap + cfg) / 2 + normu = torch.sqrt(u_leap.abs()) * u_leap.sign() + normm = torch.sqrt(merge.abs()) * merge.sign() + sim = F.cosine_similarity(normu, normm).mean() + simsc = 2 * (sim+1) + wm = (simsc*cfg + (4-simsc)*leap) / 4 + return wm + m.set_model_sampler_post_cfg_function(mahiro_normd) + return (m, ) + +NODE_CLASS_MAPPINGS = { + "Mahiro": Mahiro +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "Mahiro": "Mahiro is so cute that she deserves a better guidance function!! (。・ω・。)", +} diff --git a/comfy_extras/nodes_mask.py b/comfy_extras/nodes_mask.py new file mode 100644 index 0000000000000000000000000000000000000000..63fd13b9a9b1452565dcdbe448fe4892188a7530 --- /dev/null +++ b/comfy_extras/nodes_mask.py @@ -0,0 +1,382 @@ +import numpy as np +import scipy.ndimage +import torch +import comfy.utils + +from nodes import MAX_RESOLUTION + +def composite(destination, source, x, y, mask = None, multiplier = 8, resize_source = False): + source = source.to(destination.device) + if resize_source: + source = torch.nn.functional.interpolate(source, size=(destination.shape[2], destination.shape[3]), mode="bilinear") + + source = comfy.utils.repeat_to_batch_size(source, destination.shape[0]) + + x = max(-source.shape[3] * multiplier, min(x, destination.shape[3] * multiplier)) + y = max(-source.shape[2] * multiplier, min(y, destination.shape[2] * multiplier)) + + left, top = (x // multiplier, y // multiplier) + right, bottom = (left + source.shape[3], top + source.shape[2],) + + if mask is None: + mask = torch.ones_like(source) + else: + mask = mask.to(destination.device, copy=True) + mask = torch.nn.functional.interpolate(mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])), size=(source.shape[2], source.shape[3]), mode="bilinear") + mask = comfy.utils.repeat_to_batch_size(mask, source.shape[0]) + + # calculate the bounds of the source that will be overlapping the destination + # this prevents the source trying to overwrite latent pixels that are out of bounds + # of the destination + visible_width, visible_height = (destination.shape[3] - left + min(0, x), destination.shape[2] - top + min(0, y),) + + mask = mask[:, :, :visible_height, :visible_width] + inverse_mask = torch.ones_like(mask) - mask + + source_portion = mask * source[:, :, :visible_height, :visible_width] + destination_portion = inverse_mask * destination[:, :, top:bottom, left:right] + + destination[:, :, top:bottom, left:right] = source_portion + destination_portion + return destination + +class LatentCompositeMasked: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "destination": ("LATENT",), + "source": ("LATENT",), + "x": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 8}), + "y": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 8}), + "resize_source": ("BOOLEAN", {"default": False}), + }, + "optional": { + "mask": ("MASK",), + } + } + RETURN_TYPES = ("LATENT",) + FUNCTION = "composite" + + CATEGORY = "latent" + + def composite(self, destination, source, x, y, resize_source, mask = None): + output = destination.copy() + destination = destination["samples"].clone() + source = source["samples"] + output["samples"] = composite(destination, source, x, y, mask, 8, resize_source) + return (output,) + +class ImageCompositeMasked: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "destination": ("IMAGE",), + "source": ("IMAGE",), + "x": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "y": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "resize_source": ("BOOLEAN", {"default": False}), + }, + "optional": { + "mask": ("MASK",), + } + } + RETURN_TYPES = ("IMAGE",) + FUNCTION = "composite" + + CATEGORY = "image" + + def composite(self, destination, source, x, y, resize_source, mask = None): + destination = destination.clone().movedim(-1, 1) + output = composite(destination, source.movedim(-1, 1), x, y, mask, 1, resize_source).movedim(1, -1) + return (output,) + +class MaskToImage: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "mask": ("MASK",), + } + } + + CATEGORY = "mask" + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "mask_to_image" + + def mask_to_image(self, mask): + result = mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])).movedim(1, -1).expand(-1, -1, -1, 3) + return (result,) + +class ImageToMask: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "channel": (["red", "green", "blue", "alpha"],), + } + } + + CATEGORY = "mask" + + RETURN_TYPES = ("MASK",) + FUNCTION = "image_to_mask" + + def image_to_mask(self, image, channel): + channels = ["red", "green", "blue", "alpha"] + mask = image[:, :, :, channels.index(channel)] + return (mask,) + +class ImageColorToMask: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "color": ("INT", {"default": 0, "min": 0, "max": 0xFFFFFF, "step": 1, "display": "color"}), + } + } + + CATEGORY = "mask" + + RETURN_TYPES = ("MASK",) + FUNCTION = "image_to_mask" + + def image_to_mask(self, image, color): + temp = (torch.clamp(image, 0, 1.0) * 255.0).round().to(torch.int) + temp = torch.bitwise_left_shift(temp[:,:,:,0], 16) + torch.bitwise_left_shift(temp[:,:,:,1], 8) + temp[:,:,:,2] + mask = torch.where(temp == color, 255, 0).float() + return (mask,) + +class SolidMask: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "value": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "width": ("INT", {"default": 512, "min": 1, "max": MAX_RESOLUTION, "step": 1}), + "height": ("INT", {"default": 512, "min": 1, "max": MAX_RESOLUTION, "step": 1}), + } + } + + CATEGORY = "mask" + + RETURN_TYPES = ("MASK",) + + FUNCTION = "solid" + + def solid(self, value, width, height): + out = torch.full((1, height, width), value, dtype=torch.float32, device="cpu") + return (out,) + +class InvertMask: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "mask": ("MASK",), + } + } + + CATEGORY = "mask" + + RETURN_TYPES = ("MASK",) + + FUNCTION = "invert" + + def invert(self, mask): + out = 1.0 - mask + return (out,) + +class CropMask: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "mask": ("MASK",), + "x": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "y": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "width": ("INT", {"default": 512, "min": 1, "max": MAX_RESOLUTION, "step": 1}), + "height": ("INT", {"default": 512, "min": 1, "max": MAX_RESOLUTION, "step": 1}), + } + } + + CATEGORY = "mask" + + RETURN_TYPES = ("MASK",) + + FUNCTION = "crop" + + def crop(self, mask, x, y, width, height): + mask = mask.reshape((-1, mask.shape[-2], mask.shape[-1])) + out = mask[:, y:y + height, x:x + width] + return (out,) + +class MaskComposite: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "destination": ("MASK",), + "source": ("MASK",), + "x": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "y": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "operation": (["multiply", "add", "subtract", "and", "or", "xor"],), + } + } + + CATEGORY = "mask" + + RETURN_TYPES = ("MASK",) + + FUNCTION = "combine" + + def combine(self, destination, source, x, y, operation): + output = destination.reshape((-1, destination.shape[-2], destination.shape[-1])).clone() + source = source.reshape((-1, source.shape[-2], source.shape[-1])) + + left, top = (x, y,) + right, bottom = (min(left + source.shape[-1], destination.shape[-1]), min(top + source.shape[-2], destination.shape[-2])) + visible_width, visible_height = (right - left, bottom - top,) + + source_portion = source[:, :visible_height, :visible_width] + destination_portion = destination[:, top:bottom, left:right] + + if operation == "multiply": + output[:, top:bottom, left:right] = destination_portion * source_portion + elif operation == "add": + output[:, top:bottom, left:right] = destination_portion + source_portion + elif operation == "subtract": + output[:, top:bottom, left:right] = destination_portion - source_portion + elif operation == "and": + output[:, top:bottom, left:right] = torch.bitwise_and(destination_portion.round().bool(), source_portion.round().bool()).float() + elif operation == "or": + output[:, top:bottom, left:right] = torch.bitwise_or(destination_portion.round().bool(), source_portion.round().bool()).float() + elif operation == "xor": + output[:, top:bottom, left:right] = torch.bitwise_xor(destination_portion.round().bool(), source_portion.round().bool()).float() + + output = torch.clamp(output, 0.0, 1.0) + + return (output,) + +class FeatherMask: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "mask": ("MASK",), + "left": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "top": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "right": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "bottom": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + } + } + + CATEGORY = "mask" + + RETURN_TYPES = ("MASK",) + + FUNCTION = "feather" + + def feather(self, mask, left, top, right, bottom): + output = mask.reshape((-1, mask.shape[-2], mask.shape[-1])).clone() + + left = min(left, output.shape[-1]) + right = min(right, output.shape[-1]) + top = min(top, output.shape[-2]) + bottom = min(bottom, output.shape[-2]) + + for x in range(left): + feather_rate = (x + 1.0) / left + output[:, :, x] *= feather_rate + + for x in range(right): + feather_rate = (x + 1) / right + output[:, :, -x] *= feather_rate + + for y in range(top): + feather_rate = (y + 1) / top + output[:, y, :] *= feather_rate + + for y in range(bottom): + feather_rate = (y + 1) / bottom + output[:, -y, :] *= feather_rate + + return (output,) + +class GrowMask: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "mask": ("MASK",), + "expand": ("INT", {"default": 0, "min": -MAX_RESOLUTION, "max": MAX_RESOLUTION, "step": 1}), + "tapered_corners": ("BOOLEAN", {"default": True}), + }, + } + + CATEGORY = "mask" + + RETURN_TYPES = ("MASK",) + + FUNCTION = "expand_mask" + + def expand_mask(self, mask, expand, tapered_corners): + c = 0 if tapered_corners else 1 + kernel = np.array([[c, 1, c], + [1, 1, 1], + [c, 1, c]]) + mask = mask.reshape((-1, mask.shape[-2], mask.shape[-1])) + out = [] + for m in mask: + output = m.numpy() + for _ in range(abs(expand)): + if expand < 0: + output = scipy.ndimage.grey_erosion(output, footprint=kernel) + else: + output = scipy.ndimage.grey_dilation(output, footprint=kernel) + output = torch.from_numpy(output) + out.append(output) + return (torch.stack(out, dim=0),) + +class ThresholdMask: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "mask": ("MASK",), + "value": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + } + } + + CATEGORY = "mask" + + RETURN_TYPES = ("MASK",) + FUNCTION = "image_to_mask" + + def image_to_mask(self, mask, value): + mask = (mask > value).float() + return (mask,) + + +NODE_CLASS_MAPPINGS = { + "LatentCompositeMasked": LatentCompositeMasked, + "ImageCompositeMasked": ImageCompositeMasked, + "MaskToImage": MaskToImage, + "ImageToMask": ImageToMask, + "ImageColorToMask": ImageColorToMask, + "SolidMask": SolidMask, + "InvertMask": InvertMask, + "CropMask": CropMask, + "MaskComposite": MaskComposite, + "FeatherMask": FeatherMask, + "GrowMask": GrowMask, + "ThresholdMask": ThresholdMask, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "ImageToMask": "Convert Image to Mask", + "MaskToImage": "Convert Mask to Image", +} diff --git a/comfy_extras/nodes_mochi.py b/comfy_extras/nodes_mochi.py new file mode 100644 index 0000000000000000000000000000000000000000..1c474faa94eac8dc48f778460c0d833bee94dcf9 --- /dev/null +++ b/comfy_extras/nodes_mochi.py @@ -0,0 +1,23 @@ +import nodes +import torch +import comfy.model_management + +class EmptyMochiLatentVideo: + @classmethod + def INPUT_TYPES(s): + return {"required": { "width": ("INT", {"default": 848, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "height": ("INT", {"default": 480, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "length": ("INT", {"default": 25, "min": 7, "max": nodes.MAX_RESOLUTION, "step": 6}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096})}} + RETURN_TYPES = ("LATENT",) + FUNCTION = "generate" + + CATEGORY = "latent/video" + + def generate(self, width, height, length, batch_size=1): + latent = torch.zeros([batch_size, 12, ((length - 1) // 6) + 1, height // 8, width // 8], device=comfy.model_management.intermediate_device()) + return ({"samples":latent}, ) + +NODE_CLASS_MAPPINGS = { + "EmptyMochiLatentVideo": EmptyMochiLatentVideo, +} diff --git a/comfy_extras/nodes_model_advanced.py b/comfy_extras/nodes_model_advanced.py new file mode 100644 index 0000000000000000000000000000000000000000..33f3face19d3573d74b9ca1bf3b53a1bb9d3f094 --- /dev/null +++ b/comfy_extras/nodes_model_advanced.py @@ -0,0 +1,306 @@ +import comfy.sd +import comfy.model_sampling +import comfy.latent_formats +import nodes +import torch + +class LCM(comfy.model_sampling.EPS): + def calculate_denoised(self, sigma, model_output, model_input): + timestep = self.timestep(sigma).view(sigma.shape[:1] + (1,) * (model_output.ndim - 1)) + sigma = sigma.view(sigma.shape[:1] + (1,) * (model_output.ndim - 1)) + x0 = model_input - model_output * sigma + + sigma_data = 0.5 + scaled_timestep = timestep * 10.0 #timestep_scaling + + c_skip = sigma_data**2 / (scaled_timestep**2 + sigma_data**2) + c_out = scaled_timestep / (scaled_timestep**2 + sigma_data**2) ** 0.5 + + return c_out * x0 + c_skip * model_input + +class X0(comfy.model_sampling.EPS): + def calculate_denoised(self, sigma, model_output, model_input): + return model_output + +class ModelSamplingDiscreteDistilled(comfy.model_sampling.ModelSamplingDiscrete): + original_timesteps = 50 + + def __init__(self, model_config=None, zsnr=None): + super().__init__(model_config, zsnr=zsnr) + + self.skip_steps = self.num_timesteps // self.original_timesteps + + sigmas_valid = torch.zeros((self.original_timesteps), dtype=torch.float32) + for x in range(self.original_timesteps): + sigmas_valid[self.original_timesteps - 1 - x] = self.sigmas[self.num_timesteps - 1 - x * self.skip_steps] + + self.set_sigmas(sigmas_valid) + + def timestep(self, sigma): + log_sigma = sigma.log() + dists = log_sigma.to(self.log_sigmas.device) - self.log_sigmas[:, None] + return (dists.abs().argmin(dim=0).view(sigma.shape) * self.skip_steps + (self.skip_steps - 1)).to(sigma.device) + + def sigma(self, timestep): + t = torch.clamp(((timestep.float().to(self.log_sigmas.device) - (self.skip_steps - 1)) / self.skip_steps).float(), min=0, max=(len(self.sigmas) - 1)) + low_idx = t.floor().long() + high_idx = t.ceil().long() + w = t.frac() + log_sigma = (1 - w) * self.log_sigmas[low_idx] + w * self.log_sigmas[high_idx] + return log_sigma.exp().to(timestep.device) + + +class ModelSamplingDiscrete: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "sampling": (["eps", "v_prediction", "lcm", "x0"],), + "zsnr": ("BOOLEAN", {"default": False}), + }} + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "advanced/model" + + def patch(self, model, sampling, zsnr): + m = model.clone() + + sampling_base = comfy.model_sampling.ModelSamplingDiscrete + if sampling == "eps": + sampling_type = comfy.model_sampling.EPS + elif sampling == "v_prediction": + sampling_type = comfy.model_sampling.V_PREDICTION + elif sampling == "lcm": + sampling_type = LCM + sampling_base = ModelSamplingDiscreteDistilled + elif sampling == "x0": + sampling_type = X0 + + class ModelSamplingAdvanced(sampling_base, sampling_type): + pass + + model_sampling = ModelSamplingAdvanced(model.model.model_config, zsnr=zsnr) + + m.add_object_patch("model_sampling", model_sampling) + return (m, ) + +class ModelSamplingStableCascade: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "shift": ("FLOAT", {"default": 2.0, "min": 0.0, "max": 100.0, "step":0.01}), + }} + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "advanced/model" + + def patch(self, model, shift): + m = model.clone() + + sampling_base = comfy.model_sampling.StableCascadeSampling + sampling_type = comfy.model_sampling.EPS + + class ModelSamplingAdvanced(sampling_base, sampling_type): + pass + + model_sampling = ModelSamplingAdvanced(model.model.model_config) + model_sampling.set_parameters(shift) + m.add_object_patch("model_sampling", model_sampling) + return (m, ) + +class ModelSamplingSD3: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "shift": ("FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0, "step":0.01}), + }} + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "advanced/model" + + def patch(self, model, shift, multiplier=1000): + m = model.clone() + + sampling_base = comfy.model_sampling.ModelSamplingDiscreteFlow + sampling_type = comfy.model_sampling.CONST + + class ModelSamplingAdvanced(sampling_base, sampling_type): + pass + + model_sampling = ModelSamplingAdvanced(model.model.model_config) + model_sampling.set_parameters(shift=shift, multiplier=multiplier) + m.add_object_patch("model_sampling", model_sampling) + return (m, ) + +class ModelSamplingAuraFlow(ModelSamplingSD3): + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "shift": ("FLOAT", {"default": 1.73, "min": 0.0, "max": 100.0, "step":0.01}), + }} + + FUNCTION = "patch_aura" + + def patch_aura(self, model, shift): + return self.patch(model, shift, multiplier=1.0) + +class ModelSamplingFlux: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "max_shift": ("FLOAT", {"default": 1.15, "min": 0.0, "max": 100.0, "step":0.01}), + "base_shift": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 100.0, "step":0.01}), + "width": ("INT", {"default": 1024, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 8}), + "height": ("INT", {"default": 1024, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 8}), + }} + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "advanced/model" + + def patch(self, model, max_shift, base_shift, width, height): + m = model.clone() + + x1 = 256 + x2 = 4096 + mm = (max_shift - base_shift) / (x2 - x1) + b = base_shift - mm * x1 + shift = (width * height / (8 * 8 * 2 * 2)) * mm + b + + sampling_base = comfy.model_sampling.ModelSamplingFlux + sampling_type = comfy.model_sampling.CONST + + class ModelSamplingAdvanced(sampling_base, sampling_type): + pass + + model_sampling = ModelSamplingAdvanced(model.model.model_config) + model_sampling.set_parameters(shift=shift) + m.add_object_patch("model_sampling", model_sampling) + return (m, ) + + +class ModelSamplingContinuousEDM: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "sampling": (["v_prediction", "edm", "edm_playground_v2.5", "eps"],), + "sigma_max": ("FLOAT", {"default": 120.0, "min": 0.0, "max": 1000.0, "step":0.001, "round": False}), + "sigma_min": ("FLOAT", {"default": 0.002, "min": 0.0, "max": 1000.0, "step":0.001, "round": False}), + }} + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "advanced/model" + + def patch(self, model, sampling, sigma_max, sigma_min): + m = model.clone() + + latent_format = None + sigma_data = 1.0 + if sampling == "eps": + sampling_type = comfy.model_sampling.EPS + elif sampling == "edm": + sampling_type = comfy.model_sampling.EDM + sigma_data = 0.5 + elif sampling == "v_prediction": + sampling_type = comfy.model_sampling.V_PREDICTION + elif sampling == "edm_playground_v2.5": + sampling_type = comfy.model_sampling.EDM + sigma_data = 0.5 + latent_format = comfy.latent_formats.SDXL_Playground_2_5() + + class ModelSamplingAdvanced(comfy.model_sampling.ModelSamplingContinuousEDM, sampling_type): + pass + + model_sampling = ModelSamplingAdvanced(model.model.model_config) + model_sampling.set_parameters(sigma_min, sigma_max, sigma_data) + m.add_object_patch("model_sampling", model_sampling) + if latent_format is not None: + m.add_object_patch("latent_format", latent_format) + return (m, ) + +class ModelSamplingContinuousV: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "sampling": (["v_prediction"],), + "sigma_max": ("FLOAT", {"default": 500.0, "min": 0.0, "max": 1000.0, "step":0.001, "round": False}), + "sigma_min": ("FLOAT", {"default": 0.03, "min": 0.0, "max": 1000.0, "step":0.001, "round": False}), + }} + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "advanced/model" + + def patch(self, model, sampling, sigma_max, sigma_min): + m = model.clone() + + sigma_data = 1.0 + if sampling == "v_prediction": + sampling_type = comfy.model_sampling.V_PREDICTION + + class ModelSamplingAdvanced(comfy.model_sampling.ModelSamplingContinuousV, sampling_type): + pass + + model_sampling = ModelSamplingAdvanced(model.model.model_config) + model_sampling.set_parameters(sigma_min, sigma_max, sigma_data) + m.add_object_patch("model_sampling", model_sampling) + return (m, ) + +class RescaleCFG: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "multiplier": ("FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "advanced/model" + + def patch(self, model, multiplier): + def rescale_cfg(args): + cond = args["cond"] + uncond = args["uncond"] + cond_scale = args["cond_scale"] + sigma = args["sigma"] + sigma = sigma.view(sigma.shape[:1] + (1,) * (cond.ndim - 1)) + x_orig = args["input"] + + #rescale cfg has to be done on v-pred model output + x = x_orig / (sigma * sigma + 1.0) + cond = ((x - (x_orig - cond)) * (sigma ** 2 + 1.0) ** 0.5) / (sigma) + uncond = ((x - (x_orig - uncond)) * (sigma ** 2 + 1.0) ** 0.5) / (sigma) + + #rescalecfg + x_cfg = uncond + cond_scale * (cond - uncond) + ro_pos = torch.std(cond, dim=(1,2,3), keepdim=True) + ro_cfg = torch.std(x_cfg, dim=(1,2,3), keepdim=True) + + x_rescaled = x_cfg * (ro_pos / ro_cfg) + x_final = multiplier * x_rescaled + (1.0 - multiplier) * x_cfg + + return x_orig - (x - x_final * sigma / (sigma * sigma + 1.0) ** 0.5) + + m = model.clone() + m.set_model_sampler_cfg_function(rescale_cfg) + return (m, ) + +NODE_CLASS_MAPPINGS = { + "ModelSamplingDiscrete": ModelSamplingDiscrete, + "ModelSamplingContinuousEDM": ModelSamplingContinuousEDM, + "ModelSamplingContinuousV": ModelSamplingContinuousV, + "ModelSamplingStableCascade": ModelSamplingStableCascade, + "ModelSamplingSD3": ModelSamplingSD3, + "ModelSamplingAuraFlow": ModelSamplingAuraFlow, + "ModelSamplingFlux": ModelSamplingFlux, + "RescaleCFG": RescaleCFG, +} diff --git a/comfy_extras/nodes_model_downscale.py b/comfy_extras/nodes_model_downscale.py new file mode 100644 index 0000000000000000000000000000000000000000..49420dee9260ced4e0d08c196be937354c5e1d4e --- /dev/null +++ b/comfy_extras/nodes_model_downscale.py @@ -0,0 +1,53 @@ +import comfy.utils + +class PatchModelAddDownscale: + upscale_methods = ["bicubic", "nearest-exact", "bilinear", "area", "bislerp"] + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "block_number": ("INT", {"default": 3, "min": 1, "max": 32, "step": 1}), + "downscale_factor": ("FLOAT", {"default": 2.0, "min": 0.1, "max": 9.0, "step": 0.001}), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 0.35, "min": 0.0, "max": 1.0, "step": 0.001}), + "downscale_after_skip": ("BOOLEAN", {"default": True}), + "downscale_method": (s.upscale_methods,), + "upscale_method": (s.upscale_methods,), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "model_patches/unet" + + def patch(self, model, block_number, downscale_factor, start_percent, end_percent, downscale_after_skip, downscale_method, upscale_method): + model_sampling = model.get_model_object("model_sampling") + sigma_start = model_sampling.percent_to_sigma(start_percent) + sigma_end = model_sampling.percent_to_sigma(end_percent) + + def input_block_patch(h, transformer_options): + if transformer_options["block"][1] == block_number: + sigma = transformer_options["sigmas"][0].item() + if sigma <= sigma_start and sigma >= sigma_end: + h = comfy.utils.common_upscale(h, round(h.shape[-1] * (1.0 / downscale_factor)), round(h.shape[-2] * (1.0 / downscale_factor)), downscale_method, "disabled") + return h + + def output_block_patch(h, hsp, transformer_options): + if h.shape[2] != hsp.shape[2]: + h = comfy.utils.common_upscale(h, hsp.shape[-1], hsp.shape[-2], upscale_method, "disabled") + return h, hsp + + m = model.clone() + if downscale_after_skip: + m.set_model_input_block_patch_after_skip(input_block_patch) + else: + m.set_model_input_block_patch(input_block_patch) + m.set_model_output_block_patch(output_block_patch) + return (m, ) + +NODE_CLASS_MAPPINGS = { + "PatchModelAddDownscale": PatchModelAddDownscale, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + # Sampling + "PatchModelAddDownscale": "PatchModelAddDownscale (Kohya Deep Shrink)", +} diff --git a/comfy_extras/nodes_model_merging.py b/comfy_extras/nodes_model_merging.py new file mode 100644 index 0000000000000000000000000000000000000000..ccf601158d59ab707d07f1e438c739d4dbced131 --- /dev/null +++ b/comfy_extras/nodes_model_merging.py @@ -0,0 +1,371 @@ +import comfy.sd +import comfy.utils +import comfy.model_base +import comfy.model_management +import comfy.model_sampling + +import torch +import folder_paths +import json +import os + +from comfy.cli_args import args + +class ModelMergeSimple: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model1": ("MODEL",), + "model2": ("MODEL",), + "ratio": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "merge" + + CATEGORY = "advanced/model_merging" + + def merge(self, model1, model2, ratio): + m = model1.clone() + kp = model2.get_key_patches("diffusion_model.") + for k in kp: + m.add_patches({k: kp[k]}, 1.0 - ratio, ratio) + return (m, ) + +class ModelSubtract: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model1": ("MODEL",), + "model2": ("MODEL",), + "multiplier": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "merge" + + CATEGORY = "advanced/model_merging" + + def merge(self, model1, model2, multiplier): + m = model1.clone() + kp = model2.get_key_patches("diffusion_model.") + for k in kp: + m.add_patches({k: kp[k]}, - multiplier, multiplier) + return (m, ) + +class ModelAdd: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model1": ("MODEL",), + "model2": ("MODEL",), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "merge" + + CATEGORY = "advanced/model_merging" + + def merge(self, model1, model2): + m = model1.clone() + kp = model2.get_key_patches("diffusion_model.") + for k in kp: + m.add_patches({k: kp[k]}, 1.0, 1.0) + return (m, ) + + +class CLIPMergeSimple: + @classmethod + def INPUT_TYPES(s): + return {"required": { "clip1": ("CLIP",), + "clip2": ("CLIP",), + "ratio": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + }} + RETURN_TYPES = ("CLIP",) + FUNCTION = "merge" + + CATEGORY = "advanced/model_merging" + + def merge(self, clip1, clip2, ratio): + m = clip1.clone() + kp = clip2.get_key_patches() + for k in kp: + if k.endswith(".position_ids") or k.endswith(".logit_scale"): + continue + m.add_patches({k: kp[k]}, 1.0 - ratio, ratio) + return (m, ) + + +class CLIPSubtract: + @classmethod + def INPUT_TYPES(s): + return {"required": { "clip1": ("CLIP",), + "clip2": ("CLIP",), + "multiplier": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), + }} + RETURN_TYPES = ("CLIP",) + FUNCTION = "merge" + + CATEGORY = "advanced/model_merging" + + def merge(self, clip1, clip2, multiplier): + m = clip1.clone() + kp = clip2.get_key_patches() + for k in kp: + if k.endswith(".position_ids") or k.endswith(".logit_scale"): + continue + m.add_patches({k: kp[k]}, - multiplier, multiplier) + return (m, ) + + +class CLIPAdd: + @classmethod + def INPUT_TYPES(s): + return {"required": { "clip1": ("CLIP",), + "clip2": ("CLIP",), + }} + RETURN_TYPES = ("CLIP",) + FUNCTION = "merge" + + CATEGORY = "advanced/model_merging" + + def merge(self, clip1, clip2): + m = clip1.clone() + kp = clip2.get_key_patches() + for k in kp: + if k.endswith(".position_ids") or k.endswith(".logit_scale"): + continue + m.add_patches({k: kp[k]}, 1.0, 1.0) + return (m, ) + + +class ModelMergeBlocks: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model1": ("MODEL",), + "model2": ("MODEL",), + "input": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "middle": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "out": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "merge" + + CATEGORY = "advanced/model_merging" + + def merge(self, model1, model2, **kwargs): + m = model1.clone() + kp = model2.get_key_patches("diffusion_model.") + default_ratio = next(iter(kwargs.values())) + + for k in kp: + ratio = default_ratio + k_unet = k[len("diffusion_model."):] + + last_arg_size = 0 + for arg in kwargs: + if k_unet.startswith(arg) and last_arg_size < len(arg): + ratio = kwargs[arg] + last_arg_size = len(arg) + + m.add_patches({k: kp[k]}, 1.0 - ratio, ratio) + return (m, ) + +def save_checkpoint(model, clip=None, vae=None, clip_vision=None, filename_prefix=None, output_dir=None, prompt=None, extra_pnginfo=None): + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, output_dir) + prompt_info = "" + if prompt is not None: + prompt_info = json.dumps(prompt) + + metadata = {} + + enable_modelspec = True + if isinstance(model.model, comfy.model_base.SDXL): + if isinstance(model.model, comfy.model_base.SDXL_instructpix2pix): + metadata["modelspec.architecture"] = "stable-diffusion-xl-v1-edit" + else: + metadata["modelspec.architecture"] = "stable-diffusion-xl-v1-base" + elif isinstance(model.model, comfy.model_base.SDXLRefiner): + metadata["modelspec.architecture"] = "stable-diffusion-xl-v1-refiner" + elif isinstance(model.model, comfy.model_base.SVD_img2vid): + metadata["modelspec.architecture"] = "stable-video-diffusion-img2vid-v1" + elif isinstance(model.model, comfy.model_base.SD3): + metadata["modelspec.architecture"] = "stable-diffusion-v3-medium" #TODO: other SD3 variants + else: + enable_modelspec = False + + if enable_modelspec: + metadata["modelspec.sai_model_spec"] = "1.0.0" + metadata["modelspec.implementation"] = "sgm" + metadata["modelspec.title"] = "{} {}".format(filename, counter) + + #TODO: + # "stable-diffusion-v1", "stable-diffusion-v1-inpainting", "stable-diffusion-v2-512", + # "stable-diffusion-v2-768-v", "stable-diffusion-v2-unclip-l", "stable-diffusion-v2-unclip-h", + # "v2-inpainting" + + extra_keys = {} + model_sampling = model.get_model_object("model_sampling") + if isinstance(model_sampling, comfy.model_sampling.ModelSamplingContinuousEDM): + if isinstance(model_sampling, comfy.model_sampling.V_PREDICTION): + extra_keys["edm_vpred.sigma_max"] = torch.tensor(model_sampling.sigma_max).float() + extra_keys["edm_vpred.sigma_min"] = torch.tensor(model_sampling.sigma_min).float() + + if model.model.model_type == comfy.model_base.ModelType.EPS: + metadata["modelspec.predict_key"] = "epsilon" + elif model.model.model_type == comfy.model_base.ModelType.V_PREDICTION: + metadata["modelspec.predict_key"] = "v" + + if not args.disable_metadata: + metadata["prompt"] = prompt_info + if extra_pnginfo is not None: + for x in extra_pnginfo: + metadata[x] = json.dumps(extra_pnginfo[x]) + + output_checkpoint = f"{filename}_{counter:05}_.safetensors" + output_checkpoint = os.path.join(full_output_folder, output_checkpoint) + + comfy.sd.save_checkpoint(output_checkpoint, model, clip, vae, clip_vision, metadata=metadata, extra_keys=extra_keys) + +class CheckpointSave: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "clip": ("CLIP",), + "vae": ("VAE",), + "filename_prefix": ("STRING", {"default": "checkpoints/ComfyUI"}),}, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},} + RETURN_TYPES = () + FUNCTION = "save" + OUTPUT_NODE = True + + CATEGORY = "advanced/model_merging" + + def save(self, model, clip, vae, filename_prefix, prompt=None, extra_pnginfo=None): + save_checkpoint(model, clip=clip, vae=vae, filename_prefix=filename_prefix, output_dir=self.output_dir, prompt=prompt, extra_pnginfo=extra_pnginfo) + return {} + +class CLIPSave: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + + @classmethod + def INPUT_TYPES(s): + return {"required": { "clip": ("CLIP",), + "filename_prefix": ("STRING", {"default": "clip/ComfyUI"}),}, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},} + RETURN_TYPES = () + FUNCTION = "save" + OUTPUT_NODE = True + + CATEGORY = "advanced/model_merging" + + def save(self, clip, filename_prefix, prompt=None, extra_pnginfo=None): + prompt_info = "" + if prompt is not None: + prompt_info = json.dumps(prompt) + + metadata = {} + if not args.disable_metadata: + metadata["format"] = "pt" + metadata["prompt"] = prompt_info + if extra_pnginfo is not None: + for x in extra_pnginfo: + metadata[x] = json.dumps(extra_pnginfo[x]) + + comfy.model_management.load_models_gpu([clip.load_model()], force_patch_weights=True) + clip_sd = clip.get_sd() + + for prefix in ["clip_l.", "clip_g.", ""]: + k = list(filter(lambda a: a.startswith(prefix), clip_sd.keys())) + current_clip_sd = {} + for x in k: + current_clip_sd[x] = clip_sd.pop(x) + if len(current_clip_sd) == 0: + continue + + p = prefix[:-1] + replace_prefix = {} + filename_prefix_ = filename_prefix + if len(p) > 0: + filename_prefix_ = "{}_{}".format(filename_prefix_, p) + replace_prefix[prefix] = "" + replace_prefix["transformer."] = "" + + full_output_folder, filename, counter, subfolder, filename_prefix_ = folder_paths.get_save_image_path(filename_prefix_, self.output_dir) + + output_checkpoint = f"{filename}_{counter:05}_.safetensors" + output_checkpoint = os.path.join(full_output_folder, output_checkpoint) + + current_clip_sd = comfy.utils.state_dict_prefix_replace(current_clip_sd, replace_prefix) + + comfy.utils.save_torch_file(current_clip_sd, output_checkpoint, metadata=metadata) + return {} + +class VAESave: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + + @classmethod + def INPUT_TYPES(s): + return {"required": { "vae": ("VAE",), + "filename_prefix": ("STRING", {"default": "vae/ComfyUI_vae"}),}, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},} + RETURN_TYPES = () + FUNCTION = "save" + OUTPUT_NODE = True + + CATEGORY = "advanced/model_merging" + + def save(self, vae, filename_prefix, prompt=None, extra_pnginfo=None): + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir) + prompt_info = "" + if prompt is not None: + prompt_info = json.dumps(prompt) + + metadata = {} + if not args.disable_metadata: + metadata["prompt"] = prompt_info + if extra_pnginfo is not None: + for x in extra_pnginfo: + metadata[x] = json.dumps(extra_pnginfo[x]) + + output_checkpoint = f"{filename}_{counter:05}_.safetensors" + output_checkpoint = os.path.join(full_output_folder, output_checkpoint) + + comfy.utils.save_torch_file(vae.get_sd(), output_checkpoint, metadata=metadata) + return {} + +class ModelSave: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "filename_prefix": ("STRING", {"default": "diffusion_models/ComfyUI"}),}, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},} + RETURN_TYPES = () + FUNCTION = "save" + OUTPUT_NODE = True + + CATEGORY = "advanced/model_merging" + + def save(self, model, filename_prefix, prompt=None, extra_pnginfo=None): + save_checkpoint(model, filename_prefix=filename_prefix, output_dir=self.output_dir, prompt=prompt, extra_pnginfo=extra_pnginfo) + return {} + +NODE_CLASS_MAPPINGS = { + "ModelMergeSimple": ModelMergeSimple, + "ModelMergeBlocks": ModelMergeBlocks, + "ModelMergeSubtract": ModelSubtract, + "ModelMergeAdd": ModelAdd, + "CheckpointSave": CheckpointSave, + "CLIPMergeSimple": CLIPMergeSimple, + "CLIPMergeSubtract": CLIPSubtract, + "CLIPMergeAdd": CLIPAdd, + "CLIPSave": CLIPSave, + "VAESave": VAESave, + "ModelSave": ModelSave, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "CheckpointSave": "Save Checkpoint", +} diff --git a/comfy_extras/nodes_model_merging_model_specific.py b/comfy_extras/nodes_model_merging_model_specific.py new file mode 100644 index 0000000000000000000000000000000000000000..7cd8f98b2b421cf2b951dcc12bc2647c9b620b35 --- /dev/null +++ b/comfy_extras/nodes_model_merging_model_specific.py @@ -0,0 +1,209 @@ +import comfy_extras.nodes_model_merging + +class ModelMergeSD1(comfy_extras.nodes_model_merging.ModelMergeBlocks): + CATEGORY = "advanced/model_merging/model_specific" + @classmethod + def INPUT_TYPES(s): + arg_dict = { "model1": ("MODEL",), + "model2": ("MODEL",)} + + argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + + arg_dict["time_embed."] = argument + arg_dict["label_emb."] = argument + + for i in range(12): + arg_dict["input_blocks.{}.".format(i)] = argument + + for i in range(3): + arg_dict["middle_block.{}.".format(i)] = argument + + for i in range(12): + arg_dict["output_blocks.{}.".format(i)] = argument + + arg_dict["out."] = argument + + return {"required": arg_dict} + + +class ModelMergeSDXL(comfy_extras.nodes_model_merging.ModelMergeBlocks): + CATEGORY = "advanced/model_merging/model_specific" + + @classmethod + def INPUT_TYPES(s): + arg_dict = { "model1": ("MODEL",), + "model2": ("MODEL",)} + + argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + + arg_dict["time_embed."] = argument + arg_dict["label_emb."] = argument + + for i in range(9): + arg_dict["input_blocks.{}".format(i)] = argument + + for i in range(3): + arg_dict["middle_block.{}".format(i)] = argument + + for i in range(9): + arg_dict["output_blocks.{}".format(i)] = argument + + arg_dict["out."] = argument + + return {"required": arg_dict} + +class ModelMergeSD3_2B(comfy_extras.nodes_model_merging.ModelMergeBlocks): + CATEGORY = "advanced/model_merging/model_specific" + + @classmethod + def INPUT_TYPES(s): + arg_dict = { "model1": ("MODEL",), + "model2": ("MODEL",)} + + argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + + arg_dict["pos_embed."] = argument + arg_dict["x_embedder."] = argument + arg_dict["context_embedder."] = argument + arg_dict["y_embedder."] = argument + arg_dict["t_embedder."] = argument + + for i in range(24): + arg_dict["joint_blocks.{}.".format(i)] = argument + + arg_dict["final_layer."] = argument + + return {"required": arg_dict} + + +class ModelMergeAuraflow(comfy_extras.nodes_model_merging.ModelMergeBlocks): + CATEGORY = "advanced/model_merging/model_specific" + + @classmethod + def INPUT_TYPES(s): + arg_dict = { "model1": ("MODEL",), + "model2": ("MODEL",)} + + argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + + arg_dict["init_x_linear."] = argument + arg_dict["positional_encoding"] = argument + arg_dict["cond_seq_linear."] = argument + arg_dict["register_tokens"] = argument + arg_dict["t_embedder."] = argument + + for i in range(4): + arg_dict["double_layers.{}.".format(i)] = argument + + for i in range(32): + arg_dict["single_layers.{}.".format(i)] = argument + + arg_dict["modF."] = argument + arg_dict["final_linear."] = argument + + return {"required": arg_dict} + +class ModelMergeFlux1(comfy_extras.nodes_model_merging.ModelMergeBlocks): + CATEGORY = "advanced/model_merging/model_specific" + + @classmethod + def INPUT_TYPES(s): + arg_dict = { "model1": ("MODEL",), + "model2": ("MODEL",)} + + argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + + arg_dict["img_in."] = argument + arg_dict["time_in."] = argument + arg_dict["guidance_in"] = argument + arg_dict["vector_in."] = argument + arg_dict["txt_in."] = argument + + for i in range(19): + arg_dict["double_blocks.{}.".format(i)] = argument + + for i in range(38): + arg_dict["single_blocks.{}.".format(i)] = argument + + arg_dict["final_layer."] = argument + + return {"required": arg_dict} + +class ModelMergeSD35_Large(comfy_extras.nodes_model_merging.ModelMergeBlocks): + CATEGORY = "advanced/model_merging/model_specific" + + @classmethod + def INPUT_TYPES(s): + arg_dict = { "model1": ("MODEL",), + "model2": ("MODEL",)} + + argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + + arg_dict["pos_embed."] = argument + arg_dict["x_embedder."] = argument + arg_dict["context_embedder."] = argument + arg_dict["y_embedder."] = argument + arg_dict["t_embedder."] = argument + + for i in range(38): + arg_dict["joint_blocks.{}.".format(i)] = argument + + arg_dict["final_layer."] = argument + + return {"required": arg_dict} + +class ModelMergeMochiPreview(comfy_extras.nodes_model_merging.ModelMergeBlocks): + CATEGORY = "advanced/model_merging/model_specific" + + @classmethod + def INPUT_TYPES(s): + arg_dict = { "model1": ("MODEL",), + "model2": ("MODEL",)} + + argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + + arg_dict["pos_frequencies."] = argument + arg_dict["t_embedder."] = argument + arg_dict["t5_y_embedder."] = argument + arg_dict["t5_yproj."] = argument + + for i in range(48): + arg_dict["blocks.{}.".format(i)] = argument + + arg_dict["final_layer."] = argument + + return {"required": arg_dict} + +class ModelMergeLTXV(comfy_extras.nodes_model_merging.ModelMergeBlocks): + CATEGORY = "advanced/model_merging/model_specific" + + @classmethod + def INPUT_TYPES(s): + arg_dict = { "model1": ("MODEL",), + "model2": ("MODEL",)} + + argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}) + + arg_dict["patchify_proj."] = argument + arg_dict["adaln_single."] = argument + arg_dict["caption_projection."] = argument + + for i in range(28): + arg_dict["transformer_blocks.{}.".format(i)] = argument + + arg_dict["scale_shift_table"] = argument + arg_dict["proj_out."] = argument + + return {"required": arg_dict} + +NODE_CLASS_MAPPINGS = { + "ModelMergeSD1": ModelMergeSD1, + "ModelMergeSD2": ModelMergeSD1, #SD1 and SD2 have the same blocks + "ModelMergeSDXL": ModelMergeSDXL, + "ModelMergeSD3_2B": ModelMergeSD3_2B, + "ModelMergeAuraflow": ModelMergeAuraflow, + "ModelMergeFlux1": ModelMergeFlux1, + "ModelMergeSD35_Large": ModelMergeSD35_Large, + "ModelMergeMochiPreview": ModelMergeMochiPreview, + "ModelMergeLTXV": ModelMergeLTXV, +} diff --git a/comfy_extras/nodes_morphology.py b/comfy_extras/nodes_morphology.py new file mode 100644 index 0000000000000000000000000000000000000000..b1372b8ce64d5ccbdb74b8f81865a270a8d2e03c --- /dev/null +++ b/comfy_extras/nodes_morphology.py @@ -0,0 +1,49 @@ +import torch +import comfy.model_management + +from kornia.morphology import dilation, erosion, opening, closing, gradient, top_hat, bottom_hat + + +class Morphology: + @classmethod + def INPUT_TYPES(s): + return {"required": {"image": ("IMAGE",), + "operation": (["erode", "dilate", "open", "close", "gradient", "bottom_hat", "top_hat"],), + "kernel_size": ("INT", {"default": 3, "min": 3, "max": 999, "step": 1}), + }} + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "process" + + CATEGORY = "image/postprocessing" + + def process(self, image, operation, kernel_size): + device = comfy.model_management.get_torch_device() + kernel = torch.ones(kernel_size, kernel_size, device=device) + image_k = image.to(device).movedim(-1, 1) + if operation == "erode": + output = erosion(image_k, kernel) + elif operation == "dilate": + output = dilation(image_k, kernel) + elif operation == "open": + output = opening(image_k, kernel) + elif operation == "close": + output = closing(image_k, kernel) + elif operation == "gradient": + output = gradient(image_k, kernel) + elif operation == "top_hat": + output = top_hat(image_k, kernel) + elif operation == "bottom_hat": + output = bottom_hat(image_k, kernel) + else: + raise ValueError(f"Invalid operation {operation} for morphology. Must be one of 'erode', 'dilate', 'open', 'close', 'gradient', 'tophat', 'bottomhat'") + img_out = output.to(comfy.model_management.intermediate_device()).movedim(1, -1) + return (img_out,) + +NODE_CLASS_MAPPINGS = { + "Morphology": Morphology, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "Morphology": "ImageMorphology", +} diff --git a/comfy_extras/nodes_pag.py b/comfy_extras/nodes_pag.py new file mode 100644 index 0000000000000000000000000000000000000000..eb28196f41c56fd45fda051a42d0814b96558fb8 --- /dev/null +++ b/comfy_extras/nodes_pag.py @@ -0,0 +1,56 @@ +#Modified/simplified version of the node from: https://github.com/pamparamm/sd-perturbed-attention +#If you want the one with more options see the above repo. + +#My modified one here is more basic but has less chances of breaking with ComfyUI updates. + +import comfy.model_patcher +import comfy.samplers + +class PerturbedAttentionGuidance: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "scale": ("FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0, "step": 0.01, "round": 0.01}), + } + } + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "model_patches/unet" + + def patch(self, model, scale): + unet_block = "middle" + unet_block_id = 0 + m = model.clone() + + def perturbed_attention(q, k, v, extra_options, mask=None): + return v + + def post_cfg_function(args): + model = args["model"] + cond_pred = args["cond_denoised"] + cond = args["cond"] + cfg_result = args["denoised"] + sigma = args["sigma"] + model_options = args["model_options"].copy() + x = args["input"] + + if scale == 0: + return cfg_result + + # Replace Self-attention with PAG + model_options = comfy.model_patcher.set_model_options_patch_replace(model_options, perturbed_attention, "attn1", unet_block, unet_block_id) + (pag,) = comfy.samplers.calc_cond_batch(model, [cond], x, sigma, model_options) + + return cfg_result + (cond_pred - pag) * scale + + m.set_model_sampler_post_cfg_function(post_cfg_function) + + return (m,) + +NODE_CLASS_MAPPINGS = { + "PerturbedAttentionGuidance": PerturbedAttentionGuidance, +} diff --git a/comfy_extras/nodes_perpneg.py b/comfy_extras/nodes_perpneg.py new file mode 100644 index 0000000000000000000000000000000000000000..6c6f71767a3c3a42b5ab27d471ab3bca037315aa --- /dev/null +++ b/comfy_extras/nodes_perpneg.py @@ -0,0 +1,129 @@ +import torch +import comfy.model_management +import comfy.sampler_helpers +import comfy.samplers +import comfy.utils +import node_helpers + +def perp_neg(x, noise_pred_pos, noise_pred_neg, noise_pred_nocond, neg_scale, cond_scale): + pos = noise_pred_pos - noise_pred_nocond + neg = noise_pred_neg - noise_pred_nocond + + perp = neg - ((torch.mul(neg, pos).sum())/(torch.norm(pos)**2)) * pos + perp_neg = perp * neg_scale + cfg_result = noise_pred_nocond + cond_scale*(pos - perp_neg) + return cfg_result + +#TODO: This node should be removed, it has been replaced with PerpNegGuider +class PerpNeg: + @classmethod + def INPUT_TYPES(s): + return {"required": {"model": ("MODEL", ), + "empty_conditioning": ("CONDITIONING", ), + "neg_scale": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "_for_testing" + DEPRECATED = True + + def patch(self, model, empty_conditioning, neg_scale): + m = model.clone() + nocond = comfy.sampler_helpers.convert_cond(empty_conditioning) + + def cfg_function(args): + model = args["model"] + noise_pred_pos = args["cond_denoised"] + noise_pred_neg = args["uncond_denoised"] + cond_scale = args["cond_scale"] + x = args["input"] + sigma = args["sigma"] + model_options = args["model_options"] + nocond_processed = comfy.samplers.encode_model_conds(model.extra_conds, nocond, x, x.device, "negative") + + (noise_pred_nocond,) = comfy.samplers.calc_cond_batch(model, [nocond_processed], x, sigma, model_options) + + cfg_result = x - perp_neg(x, noise_pred_pos, noise_pred_neg, noise_pred_nocond, neg_scale, cond_scale) + return cfg_result + + m.set_model_sampler_cfg_function(cfg_function) + + return (m, ) + + +class Guider_PerpNeg(comfy.samplers.CFGGuider): + def set_conds(self, positive, negative, empty_negative_prompt): + empty_negative_prompt = node_helpers.conditioning_set_values(empty_negative_prompt, {"prompt_type": "negative"}) + self.inner_set_conds({"positive": positive, "empty_negative_prompt": empty_negative_prompt, "negative": negative}) + + def set_cfg(self, cfg, neg_scale): + self.cfg = cfg + self.neg_scale = neg_scale + + def predict_noise(self, x, timestep, model_options={}, seed=None): + # in CFGGuider.predict_noise, we call sampling_function(), which uses cfg_function() to compute pos & neg + # but we'd rather do a single batch of sampling pos, neg, and empty, so we call calc_cond_batch([pos,neg,empty]) directly + + positive_cond = self.conds.get("positive", None) + negative_cond = self.conds.get("negative", None) + empty_cond = self.conds.get("empty_negative_prompt", None) + + (noise_pred_pos, noise_pred_neg, noise_pred_empty) = \ + comfy.samplers.calc_cond_batch(self.inner_model, [positive_cond, negative_cond, empty_cond], x, timestep, model_options) + cfg_result = perp_neg(x, noise_pred_pos, noise_pred_neg, noise_pred_empty, self.neg_scale, self.cfg) + + # normally this would be done in cfg_function, but we skipped + # that for efficiency: we can compute the noise predictions in + # a single call to calc_cond_batch() (rather than two) + # so we replicate the hook here + for fn in model_options.get("sampler_post_cfg_function", []): + args = { + "denoised": cfg_result, + "cond": positive_cond, + "uncond": negative_cond, + "model": self.inner_model, + "uncond_denoised": noise_pred_neg, + "cond_denoised": noise_pred_pos, + "sigma": timestep, + "model_options": model_options, + "input": x, + # not in the original call in samplers.py:cfg_function, but made available for future hooks + "empty_cond": empty_cond, + "empty_cond_denoised": noise_pred_empty,} + cfg_result = fn(args) + + return cfg_result + +class PerpNegGuider: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model": ("MODEL",), + "positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "empty_conditioning": ("CONDITIONING", ), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step":0.1, "round": 0.01}), + "neg_scale": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.01}), + } + } + + RETURN_TYPES = ("GUIDER",) + + FUNCTION = "get_guider" + CATEGORY = "_for_testing" + + def get_guider(self, model, positive, negative, empty_conditioning, cfg, neg_scale): + guider = Guider_PerpNeg(model) + guider.set_conds(positive, negative, empty_conditioning) + guider.set_cfg(cfg, neg_scale) + return (guider,) + +NODE_CLASS_MAPPINGS = { + "PerpNeg": PerpNeg, + "PerpNegGuider": PerpNegGuider, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "PerpNeg": "Perp-Neg (DEPRECATED by PerpNegGuider)", +} diff --git a/comfy_extras/nodes_photomaker.py b/comfy_extras/nodes_photomaker.py new file mode 100644 index 0000000000000000000000000000000000000000..d358ed6d5b75a37f9195e1f0c663a188eb8aedc3 --- /dev/null +++ b/comfy_extras/nodes_photomaker.py @@ -0,0 +1,188 @@ +import torch +import torch.nn as nn +import folder_paths +import comfy.clip_model +import comfy.clip_vision +import comfy.ops + +# code for model from: https://github.com/TencentARC/PhotoMaker/blob/main/photomaker/model.py under Apache License Version 2.0 +VISION_CONFIG_DICT = { + "hidden_size": 1024, + "image_size": 224, + "intermediate_size": 4096, + "num_attention_heads": 16, + "num_channels": 3, + "num_hidden_layers": 24, + "patch_size": 14, + "projection_dim": 768, + "hidden_act": "quick_gelu", + "model_type": "clip_vision_model", +} + +class MLP(nn.Module): + def __init__(self, in_dim, out_dim, hidden_dim, use_residual=True, operations=comfy.ops): + super().__init__() + if use_residual: + assert in_dim == out_dim + self.layernorm = operations.LayerNorm(in_dim) + self.fc1 = operations.Linear(in_dim, hidden_dim) + self.fc2 = operations.Linear(hidden_dim, out_dim) + self.use_residual = use_residual + self.act_fn = nn.GELU() + + def forward(self, x): + residual = x + x = self.layernorm(x) + x = self.fc1(x) + x = self.act_fn(x) + x = self.fc2(x) + if self.use_residual: + x = x + residual + return x + + +class FuseModule(nn.Module): + def __init__(self, embed_dim, operations): + super().__init__() + self.mlp1 = MLP(embed_dim * 2, embed_dim, embed_dim, use_residual=False, operations=operations) + self.mlp2 = MLP(embed_dim, embed_dim, embed_dim, use_residual=True, operations=operations) + self.layer_norm = operations.LayerNorm(embed_dim) + + def fuse_fn(self, prompt_embeds, id_embeds): + stacked_id_embeds = torch.cat([prompt_embeds, id_embeds], dim=-1) + stacked_id_embeds = self.mlp1(stacked_id_embeds) + prompt_embeds + stacked_id_embeds = self.mlp2(stacked_id_embeds) + stacked_id_embeds = self.layer_norm(stacked_id_embeds) + return stacked_id_embeds + + def forward( + self, + prompt_embeds, + id_embeds, + class_tokens_mask, + ) -> torch.Tensor: + # id_embeds shape: [b, max_num_inputs, 1, 2048] + id_embeds = id_embeds.to(prompt_embeds.dtype) + num_inputs = class_tokens_mask.sum().unsqueeze(0) # TODO: check for training case + batch_size, max_num_inputs = id_embeds.shape[:2] + # seq_length: 77 + seq_length = prompt_embeds.shape[1] + # flat_id_embeds shape: [b*max_num_inputs, 1, 2048] + flat_id_embeds = id_embeds.view( + -1, id_embeds.shape[-2], id_embeds.shape[-1] + ) + # valid_id_mask [b*max_num_inputs] + valid_id_mask = ( + torch.arange(max_num_inputs, device=flat_id_embeds.device)[None, :] + < num_inputs[:, None] + ) + valid_id_embeds = flat_id_embeds[valid_id_mask.flatten()] + + prompt_embeds = prompt_embeds.view(-1, prompt_embeds.shape[-1]) + class_tokens_mask = class_tokens_mask.view(-1) + valid_id_embeds = valid_id_embeds.view(-1, valid_id_embeds.shape[-1]) + # slice out the image token embeddings + image_token_embeds = prompt_embeds[class_tokens_mask] + stacked_id_embeds = self.fuse_fn(image_token_embeds, valid_id_embeds) + assert class_tokens_mask.sum() == stacked_id_embeds.shape[0], f"{class_tokens_mask.sum()} != {stacked_id_embeds.shape[0]}" + prompt_embeds.masked_scatter_(class_tokens_mask[:, None], stacked_id_embeds.to(prompt_embeds.dtype)) + updated_prompt_embeds = prompt_embeds.view(batch_size, seq_length, -1) + return updated_prompt_embeds + +class PhotoMakerIDEncoder(comfy.clip_model.CLIPVisionModelProjection): + def __init__(self): + self.load_device = comfy.model_management.text_encoder_device() + offload_device = comfy.model_management.text_encoder_offload_device() + dtype = comfy.model_management.text_encoder_dtype(self.load_device) + + super().__init__(VISION_CONFIG_DICT, dtype, offload_device, comfy.ops.manual_cast) + self.visual_projection_2 = comfy.ops.manual_cast.Linear(1024, 1280, bias=False) + self.fuse_module = FuseModule(2048, comfy.ops.manual_cast) + + def forward(self, id_pixel_values, prompt_embeds, class_tokens_mask): + b, num_inputs, c, h, w = id_pixel_values.shape + id_pixel_values = id_pixel_values.view(b * num_inputs, c, h, w) + + shared_id_embeds = self.vision_model(id_pixel_values)[2] + id_embeds = self.visual_projection(shared_id_embeds) + id_embeds_2 = self.visual_projection_2(shared_id_embeds) + + id_embeds = id_embeds.view(b, num_inputs, 1, -1) + id_embeds_2 = id_embeds_2.view(b, num_inputs, 1, -1) + + id_embeds = torch.cat((id_embeds, id_embeds_2), dim=-1) + updated_prompt_embeds = self.fuse_module(prompt_embeds, id_embeds, class_tokens_mask) + + return updated_prompt_embeds + + +class PhotoMakerLoader: + @classmethod + def INPUT_TYPES(s): + return {"required": { "photomaker_model_name": (folder_paths.get_filename_list("photomaker"), )}} + + RETURN_TYPES = ("PHOTOMAKER",) + FUNCTION = "load_photomaker_model" + + CATEGORY = "_for_testing/photomaker" + + def load_photomaker_model(self, photomaker_model_name): + photomaker_model_path = folder_paths.get_full_path_or_raise("photomaker", photomaker_model_name) + photomaker_model = PhotoMakerIDEncoder() + data = comfy.utils.load_torch_file(photomaker_model_path, safe_load=True) + if "id_encoder" in data: + data = data["id_encoder"] + photomaker_model.load_state_dict(data) + return (photomaker_model,) + + +class PhotoMakerEncode: + @classmethod + def INPUT_TYPES(s): + return {"required": { "photomaker": ("PHOTOMAKER",), + "image": ("IMAGE",), + "clip": ("CLIP", ), + "text": ("STRING", {"multiline": True, "dynamicPrompts": True, "default": "photograph of photomaker"}), + }} + + RETURN_TYPES = ("CONDITIONING",) + FUNCTION = "apply_photomaker" + + CATEGORY = "_for_testing/photomaker" + + def apply_photomaker(self, photomaker, image, clip, text): + special_token = "photomaker" + pixel_values = comfy.clip_vision.clip_preprocess(image.to(photomaker.load_device)).float() + try: + index = text.split(" ").index(special_token) + 1 + except ValueError: + index = -1 + tokens = clip.tokenize(text, return_word_ids=True) + out_tokens = {} + for k in tokens: + out_tokens[k] = [] + for t in tokens[k]: + f = list(filter(lambda x: x[2] != index, t)) + while len(f) < len(t): + f.append(t[-1]) + out_tokens[k].append(f) + + cond, pooled = clip.encode_from_tokens(out_tokens, return_pooled=True) + + if index > 0: + token_index = index - 1 + num_id_images = 1 + class_tokens_mask = [True if token_index <= i < token_index+num_id_images else False for i in range(77)] + out = photomaker(id_pixel_values=pixel_values.unsqueeze(0), prompt_embeds=cond.to(photomaker.load_device), + class_tokens_mask=torch.tensor(class_tokens_mask, dtype=torch.bool, device=photomaker.load_device).unsqueeze(0)) + else: + out = cond + + return ([[out, {"pooled_output": pooled}]], ) + + +NODE_CLASS_MAPPINGS = { + "PhotoMakerLoader": PhotoMakerLoader, + "PhotoMakerEncode": PhotoMakerEncode, +} + diff --git a/comfy_extras/nodes_pixart.py b/comfy_extras/nodes_pixart.py new file mode 100644 index 0000000000000000000000000000000000000000..c7209c46850d42c134f830ef5634de58652dee5f --- /dev/null +++ b/comfy_extras/nodes_pixart.py @@ -0,0 +1,24 @@ +from nodes import MAX_RESOLUTION + +class CLIPTextEncodePixArtAlpha: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "width": ("INT", {"default": 1024.0, "min": 0, "max": MAX_RESOLUTION}), + "height": ("INT", {"default": 1024.0, "min": 0, "max": MAX_RESOLUTION}), + # "aspect_ratio": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "text": ("STRING", {"multiline": True, "dynamicPrompts": True}), "clip": ("CLIP", ), + }} + + RETURN_TYPES = ("CONDITIONING",) + FUNCTION = "encode" + CATEGORY = "advanced/conditioning" + DESCRIPTION = "Encodes text and sets the resolution conditioning for PixArt Alpha. Does not apply to PixArt Sigma." + + def encode(self, clip, width, height, text): + tokens = clip.tokenize(text) + return (clip.encode_from_tokens_scheduled(tokens, add_dict={"width": width, "height": height}),) + +NODE_CLASS_MAPPINGS = { + "CLIPTextEncodePixArtAlpha": CLIPTextEncodePixArtAlpha, +} diff --git a/comfy_extras/nodes_post_processing.py b/comfy_extras/nodes_post_processing.py new file mode 100644 index 0000000000000000000000000000000000000000..68f6ef51e791c78c16c179a292b70ee4ad39b656 --- /dev/null +++ b/comfy_extras/nodes_post_processing.py @@ -0,0 +1,279 @@ +import numpy as np +import torch +import torch.nn.functional as F +from PIL import Image +import math + +import comfy.utils +import comfy.model_management + + +class Blend: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image1": ("IMAGE",), + "image2": ("IMAGE",), + "blend_factor": ("FLOAT", { + "default": 0.5, + "min": 0.0, + "max": 1.0, + "step": 0.01 + }), + "blend_mode": (["normal", "multiply", "screen", "overlay", "soft_light", "difference"],), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "blend_images" + + CATEGORY = "image/postprocessing" + + def blend_images(self, image1: torch.Tensor, image2: torch.Tensor, blend_factor: float, blend_mode: str): + image2 = image2.to(image1.device) + if image1.shape != image2.shape: + image2 = image2.permute(0, 3, 1, 2) + image2 = comfy.utils.common_upscale(image2, image1.shape[2], image1.shape[1], upscale_method='bicubic', crop='center') + image2 = image2.permute(0, 2, 3, 1) + + blended_image = self.blend_mode(image1, image2, blend_mode) + blended_image = image1 * (1 - blend_factor) + blended_image * blend_factor + blended_image = torch.clamp(blended_image, 0, 1) + return (blended_image,) + + def blend_mode(self, img1, img2, mode): + if mode == "normal": + return img2 + elif mode == "multiply": + return img1 * img2 + elif mode == "screen": + return 1 - (1 - img1) * (1 - img2) + elif mode == "overlay": + return torch.where(img1 <= 0.5, 2 * img1 * img2, 1 - 2 * (1 - img1) * (1 - img2)) + elif mode == "soft_light": + return torch.where(img2 <= 0.5, img1 - (1 - 2 * img2) * img1 * (1 - img1), img1 + (2 * img2 - 1) * (self.g(img1) - img1)) + elif mode == "difference": + return img1 - img2 + else: + raise ValueError(f"Unsupported blend mode: {mode}") + + def g(self, x): + return torch.where(x <= 0.25, ((16 * x - 12) * x + 4) * x, torch.sqrt(x)) + +def gaussian_kernel(kernel_size: int, sigma: float, device=None): + x, y = torch.meshgrid(torch.linspace(-1, 1, kernel_size, device=device), torch.linspace(-1, 1, kernel_size, device=device), indexing="ij") + d = torch.sqrt(x * x + y * y) + g = torch.exp(-(d * d) / (2.0 * sigma * sigma)) + return g / g.sum() + +class Blur: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "blur_radius": ("INT", { + "default": 1, + "min": 1, + "max": 31, + "step": 1 + }), + "sigma": ("FLOAT", { + "default": 1.0, + "min": 0.1, + "max": 10.0, + "step": 0.1 + }), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "blur" + + CATEGORY = "image/postprocessing" + + def blur(self, image: torch.Tensor, blur_radius: int, sigma: float): + if blur_radius == 0: + return (image,) + + image = image.to(comfy.model_management.get_torch_device()) + batch_size, height, width, channels = image.shape + + kernel_size = blur_radius * 2 + 1 + kernel = gaussian_kernel(kernel_size, sigma, device=image.device).repeat(channels, 1, 1).unsqueeze(1) + + image = image.permute(0, 3, 1, 2) # Torch wants (B, C, H, W) we use (B, H, W, C) + padded_image = F.pad(image, (blur_radius,blur_radius,blur_radius,blur_radius), 'reflect') + blurred = F.conv2d(padded_image, kernel, padding=kernel_size // 2, groups=channels)[:,:,blur_radius:-blur_radius, blur_radius:-blur_radius] + blurred = blurred.permute(0, 2, 3, 1) + + return (blurred.to(comfy.model_management.intermediate_device()),) + +class Quantize: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "colors": ("INT", { + "default": 256, + "min": 1, + "max": 256, + "step": 1 + }), + "dither": (["none", "floyd-steinberg", "bayer-2", "bayer-4", "bayer-8", "bayer-16"],), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "quantize" + + CATEGORY = "image/postprocessing" + + def bayer(im, pal_im, order): + def normalized_bayer_matrix(n): + if n == 0: + return np.zeros((1,1), "float32") + else: + q = 4 ** n + m = q * normalized_bayer_matrix(n - 1) + return np.bmat(((m-1.5, m+0.5), (m+1.5, m-0.5))) / q + + num_colors = len(pal_im.getpalette()) // 3 + spread = 2 * 256 / num_colors + bayer_n = int(math.log2(order)) + bayer_matrix = torch.from_numpy(spread * normalized_bayer_matrix(bayer_n) + 0.5) + + result = torch.from_numpy(np.array(im).astype(np.float32)) + tw = math.ceil(result.shape[0] / bayer_matrix.shape[0]) + th = math.ceil(result.shape[1] / bayer_matrix.shape[1]) + tiled_matrix = bayer_matrix.tile(tw, th).unsqueeze(-1) + result.add_(tiled_matrix[:result.shape[0],:result.shape[1]]).clamp_(0, 255) + result = result.to(dtype=torch.uint8) + + im = Image.fromarray(result.cpu().numpy()) + im = im.quantize(palette=pal_im, dither=Image.Dither.NONE) + return im + + def quantize(self, image: torch.Tensor, colors: int, dither: str): + batch_size, height, width, _ = image.shape + result = torch.zeros_like(image) + + for b in range(batch_size): + im = Image.fromarray((image[b] * 255).to(torch.uint8).numpy(), mode='RGB') + + pal_im = im.quantize(colors=colors) # Required as described in https://github.com/python-pillow/Pillow/issues/5836 + + if dither == "none": + quantized_image = im.quantize(palette=pal_im, dither=Image.Dither.NONE) + elif dither == "floyd-steinberg": + quantized_image = im.quantize(palette=pal_im, dither=Image.Dither.FLOYDSTEINBERG) + elif dither.startswith("bayer"): + order = int(dither.split('-')[-1]) + quantized_image = Quantize.bayer(im, pal_im, order) + + quantized_array = torch.tensor(np.array(quantized_image.convert("RGB"))).float() / 255 + result[b] = quantized_array + + return (result,) + +class Sharpen: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "sharpen_radius": ("INT", { + "default": 1, + "min": 1, + "max": 31, + "step": 1 + }), + "sigma": ("FLOAT", { + "default": 1.0, + "min": 0.1, + "max": 10.0, + "step": 0.01 + }), + "alpha": ("FLOAT", { + "default": 1.0, + "min": 0.0, + "max": 5.0, + "step": 0.01 + }), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "sharpen" + + CATEGORY = "image/postprocessing" + + def sharpen(self, image: torch.Tensor, sharpen_radius: int, sigma:float, alpha: float): + if sharpen_radius == 0: + return (image,) + + batch_size, height, width, channels = image.shape + image = image.to(comfy.model_management.get_torch_device()) + + kernel_size = sharpen_radius * 2 + 1 + kernel = gaussian_kernel(kernel_size, sigma, device=image.device) * -(alpha*10) + center = kernel_size // 2 + kernel[center, center] = kernel[center, center] - kernel.sum() + 1.0 + kernel = kernel.repeat(channels, 1, 1).unsqueeze(1) + + tensor_image = image.permute(0, 3, 1, 2) # Torch wants (B, C, H, W) we use (B, H, W, C) + tensor_image = F.pad(tensor_image, (sharpen_radius,sharpen_radius,sharpen_radius,sharpen_radius), 'reflect') + sharpened = F.conv2d(tensor_image, kernel, padding=center, groups=channels)[:,:,sharpen_radius:-sharpen_radius, sharpen_radius:-sharpen_radius] + sharpened = sharpened.permute(0, 2, 3, 1) + + result = torch.clamp(sharpened, 0, 1) + + return (result.to(comfy.model_management.intermediate_device()),) + +class ImageScaleToTotalPixels: + upscale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"] + crop_methods = ["disabled", "center"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { "image": ("IMAGE",), "upscale_method": (s.upscale_methods,), + "megapixels": ("FLOAT", {"default": 1.0, "min": 0.01, "max": 16.0, "step": 0.01}), + }} + RETURN_TYPES = ("IMAGE",) + FUNCTION = "upscale" + + CATEGORY = "image/upscaling" + + def upscale(self, image, upscale_method, megapixels): + samples = image.movedim(-1,1) + total = int(megapixels * 1024 * 1024) + + scale_by = math.sqrt(total / (samples.shape[3] * samples.shape[2])) + width = round(samples.shape[3] * scale_by) + height = round(samples.shape[2] * scale_by) + + s = comfy.utils.common_upscale(samples, width, height, upscale_method, "disabled") + s = s.movedim(1,-1) + return (s,) + +NODE_CLASS_MAPPINGS = { + "ImageBlend": Blend, + "ImageBlur": Blur, + "ImageQuantize": Quantize, + "ImageSharpen": Sharpen, + "ImageScaleToTotalPixels": ImageScaleToTotalPixels, +} diff --git a/comfy_extras/nodes_rebatch.py b/comfy_extras/nodes_rebatch.py new file mode 100644 index 0000000000000000000000000000000000000000..e29cb9ed10dae329ac2bea313df72f2387bd7ade --- /dev/null +++ b/comfy_extras/nodes_rebatch.py @@ -0,0 +1,138 @@ +import torch + +class LatentRebatch: + @classmethod + def INPUT_TYPES(s): + return {"required": { "latents": ("LATENT",), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096}), + }} + RETURN_TYPES = ("LATENT",) + INPUT_IS_LIST = True + OUTPUT_IS_LIST = (True, ) + + FUNCTION = "rebatch" + + CATEGORY = "latent/batch" + + @staticmethod + def get_batch(latents, list_ind, offset): + '''prepare a batch out of the list of latents''' + samples = latents[list_ind]['samples'] + shape = samples.shape + mask = latents[list_ind]['noise_mask'] if 'noise_mask' in latents[list_ind] else torch.ones((shape[0], 1, shape[2]*8, shape[3]*8), device='cpu') + if mask.shape[-1] != shape[-1] * 8 or mask.shape[-2] != shape[-2]: + torch.nn.functional.interpolate(mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])), size=(shape[-2]*8, shape[-1]*8), mode="bilinear") + if mask.shape[0] < samples.shape[0]: + mask = mask.repeat((shape[0] - 1) // mask.shape[0] + 1, 1, 1, 1)[:shape[0]] + if 'batch_index' in latents[list_ind]: + batch_inds = latents[list_ind]['batch_index'] + else: + batch_inds = [x+offset for x in range(shape[0])] + return samples, mask, batch_inds + + @staticmethod + def get_slices(indexable, num, batch_size): + '''divides an indexable object into num slices of length batch_size, and a remainder''' + slices = [] + for i in range(num): + slices.append(indexable[i*batch_size:(i+1)*batch_size]) + if num * batch_size < len(indexable): + return slices, indexable[num * batch_size:] + else: + return slices, None + + @staticmethod + def slice_batch(batch, num, batch_size): + result = [LatentRebatch.get_slices(x, num, batch_size) for x in batch] + return list(zip(*result)) + + @staticmethod + def cat_batch(batch1, batch2): + if batch1[0] is None: + return batch2 + result = [torch.cat((b1, b2)) if torch.is_tensor(b1) else b1 + b2 for b1, b2 in zip(batch1, batch2)] + return result + + def rebatch(self, latents, batch_size): + batch_size = batch_size[0] + + output_list = [] + current_batch = (None, None, None) + processed = 0 + + for i in range(len(latents)): + # fetch new entry of list + #samples, masks, indices = self.get_batch(latents, i) + next_batch = self.get_batch(latents, i, processed) + processed += len(next_batch[2]) + # set to current if current is None + if current_batch[0] is None: + current_batch = next_batch + # add previous to list if dimensions do not match + elif next_batch[0].shape[-1] != current_batch[0].shape[-1] or next_batch[0].shape[-2] != current_batch[0].shape[-2]: + sliced, _ = self.slice_batch(current_batch, 1, batch_size) + output_list.append({'samples': sliced[0][0], 'noise_mask': sliced[1][0], 'batch_index': sliced[2][0]}) + current_batch = next_batch + # cat if everything checks out + else: + current_batch = self.cat_batch(current_batch, next_batch) + + # add to list if dimensions gone above target batch size + if current_batch[0].shape[0] > batch_size: + num = current_batch[0].shape[0] // batch_size + sliced, remainder = self.slice_batch(current_batch, num, batch_size) + + for i in range(num): + output_list.append({'samples': sliced[0][i], 'noise_mask': sliced[1][i], 'batch_index': sliced[2][i]}) + + current_batch = remainder + + #add remainder + if current_batch[0] is not None: + sliced, _ = self.slice_batch(current_batch, 1, batch_size) + output_list.append({'samples': sliced[0][0], 'noise_mask': sliced[1][0], 'batch_index': sliced[2][0]}) + + #get rid of empty masks + for s in output_list: + if s['noise_mask'].mean() == 1.0: + del s['noise_mask'] + + return (output_list,) + +class ImageRebatch: + @classmethod + def INPUT_TYPES(s): + return {"required": { "images": ("IMAGE",), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096}), + }} + RETURN_TYPES = ("IMAGE",) + INPUT_IS_LIST = True + OUTPUT_IS_LIST = (True, ) + + FUNCTION = "rebatch" + + CATEGORY = "image/batch" + + def rebatch(self, images, batch_size): + batch_size = batch_size[0] + + output_list = [] + all_images = [] + for img in images: + for i in range(img.shape[0]): + all_images.append(img[i:i+1]) + + for i in range(0, len(all_images), batch_size): + output_list.append(torch.cat(all_images[i:i+batch_size], dim=0)) + + return (output_list,) + +NODE_CLASS_MAPPINGS = { + "RebatchLatents": LatentRebatch, + "RebatchImages": ImageRebatch, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "RebatchLatents": "Rebatch Latents", + "RebatchImages": "Rebatch Images", +} diff --git a/comfy_extras/nodes_sag.py b/comfy_extras/nodes_sag.py new file mode 100644 index 0000000000000000000000000000000000000000..1bd8d7364fdde4bd8ce9b11f342dfce71d3a4214 --- /dev/null +++ b/comfy_extras/nodes_sag.py @@ -0,0 +1,181 @@ +import torch +from torch import einsum +import torch.nn.functional as F +import math + +from einops import rearrange, repeat +from comfy.ldm.modules.attention import optimized_attention +import comfy.samplers + +# from comfy/ldm/modules/attention.py +# but modified to return attention scores as well as output +def attention_basic_with_sim(q, k, v, heads, mask=None, attn_precision=None): + b, _, dim_head = q.shape + dim_head //= heads + scale = dim_head ** -0.5 + + h = heads + q, k, v = map( + lambda t: t.unsqueeze(3) + .reshape(b, -1, heads, dim_head) + .permute(0, 2, 1, 3) + .reshape(b * heads, -1, dim_head) + .contiguous(), + (q, k, v), + ) + + # force cast to fp32 to avoid overflowing + if attn_precision == torch.float32: + sim = einsum('b i d, b j d -> b i j', q.float(), k.float()) * scale + else: + sim = einsum('b i d, b j d -> b i j', q, k) * scale + + del q, k + + if mask is not None: + mask = rearrange(mask, 'b ... -> b (...)') + max_neg_value = -torch.finfo(sim.dtype).max + mask = repeat(mask, 'b j -> (b h) () j', h=h) + sim.masked_fill_(~mask, max_neg_value) + + # attention, what we cannot get enough of + sim = sim.softmax(dim=-1) + + out = einsum('b i j, b j d -> b i d', sim.to(v.dtype), v) + out = ( + out.unsqueeze(0) + .reshape(b, heads, -1, dim_head) + .permute(0, 2, 1, 3) + .reshape(b, -1, heads * dim_head) + ) + return (out, sim) + +def create_blur_map(x0, attn, sigma=3.0, threshold=1.0): + # reshape and GAP the attention map + _, hw1, hw2 = attn.shape + b, _, lh, lw = x0.shape + attn = attn.reshape(b, -1, hw1, hw2) + # Global Average Pool + mask = attn.mean(1, keepdim=False).sum(1, keepdim=False) > threshold + + total = mask.shape[-1] + x = round(math.sqrt((lh / lw) * total)) + xx = None + for i in range(0, math.floor(math.sqrt(total) / 2)): + for j in [(x + i), max(1, x - i)]: + if total % j == 0: + xx = j + break + if xx is not None: + break + + x = xx + y = total // x + + # Reshape + mask = ( + mask.reshape(b, x, y) + .unsqueeze(1) + .type(attn.dtype) + ) + # Upsample + mask = F.interpolate(mask, (lh, lw)) + + blurred = gaussian_blur_2d(x0, kernel_size=9, sigma=sigma) + blurred = blurred * mask + x0 * (1 - mask) + return blurred + +def gaussian_blur_2d(img, kernel_size, sigma): + ksize_half = (kernel_size - 1) * 0.5 + + x = torch.linspace(-ksize_half, ksize_half, steps=kernel_size) + + pdf = torch.exp(-0.5 * (x / sigma).pow(2)) + + x_kernel = pdf / pdf.sum() + x_kernel = x_kernel.to(device=img.device, dtype=img.dtype) + + kernel2d = torch.mm(x_kernel[:, None], x_kernel[None, :]) + kernel2d = kernel2d.expand(img.shape[-3], 1, kernel2d.shape[0], kernel2d.shape[1]) + + padding = [kernel_size // 2, kernel_size // 2, kernel_size // 2, kernel_size // 2] + + img = F.pad(img, padding, mode="reflect") + img = F.conv2d(img, kernel2d, groups=img.shape[-3]) + return img + +class SelfAttentionGuidance: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "scale": ("FLOAT", {"default": 0.5, "min": -2.0, "max": 5.0, "step": 0.01}), + "blur_sigma": ("FLOAT", {"default": 2.0, "min": 0.0, "max": 10.0, "step": 0.1}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "_for_testing" + + def patch(self, model, scale, blur_sigma): + m = model.clone() + + attn_scores = None + + # TODO: make this work properly with chunked batches + # currently, we can only save the attn from one UNet call + def attn_and_record(q, k, v, extra_options): + nonlocal attn_scores + # if uncond, save the attention scores + heads = extra_options["n_heads"] + cond_or_uncond = extra_options["cond_or_uncond"] + b = q.shape[0] // len(cond_or_uncond) + if 1 in cond_or_uncond: + uncond_index = cond_or_uncond.index(1) + # do the entire attention operation, but save the attention scores to attn_scores + (out, sim) = attention_basic_with_sim(q, k, v, heads=heads, attn_precision=extra_options["attn_precision"]) + # when using a higher batch size, I BELIEVE the result batch dimension is [uc1, ... ucn, c1, ... cn] + n_slices = heads * b + attn_scores = sim[n_slices * uncond_index:n_slices * (uncond_index+1)] + return out + else: + return optimized_attention(q, k, v, heads=heads, attn_precision=extra_options["attn_precision"]) + + def post_cfg_function(args): + nonlocal attn_scores + uncond_attn = attn_scores + + sag_scale = scale + sag_sigma = blur_sigma + sag_threshold = 1.0 + model = args["model"] + uncond_pred = args["uncond_denoised"] + uncond = args["uncond"] + cfg_result = args["denoised"] + sigma = args["sigma"] + model_options = args["model_options"] + x = args["input"] + if min(cfg_result.shape[2:]) <= 4: #skip when too small to add padding + return cfg_result + + # create the adversarially blurred image + degraded = create_blur_map(uncond_pred, uncond_attn, sag_sigma, sag_threshold) + degraded_noised = degraded + x - uncond_pred + # call into the UNet + (sag,) = comfy.samplers.calc_cond_batch(model, [uncond], degraded_noised, sigma, model_options) + return cfg_result + (degraded - sag) * sag_scale + + m.set_model_sampler_post_cfg_function(post_cfg_function, disable_cfg1_optimization=True) + + # from diffusers: + # unet.mid_block.attentions[0].transformer_blocks[0].attn1.patch + m.set_model_attn1_replace(attn_and_record, "middle", 0, 0) + + return (m, ) + +NODE_CLASS_MAPPINGS = { + "SelfAttentionGuidance": SelfAttentionGuidance, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "SelfAttentionGuidance": "Self-Attention Guidance", +} diff --git a/comfy_extras/nodes_sd3.py b/comfy_extras/nodes_sd3.py new file mode 100644 index 0000000000000000000000000000000000000000..d75b29e606feaf1e0eb125bd63f4abe2bc03b2f5 --- /dev/null +++ b/comfy_extras/nodes_sd3.py @@ -0,0 +1,138 @@ +import folder_paths +import comfy.sd +import comfy.model_management +import nodes +import torch +import comfy_extras.nodes_slg + + +class TripleCLIPLoader: + @classmethod + def INPUT_TYPES(s): + return {"required": { "clip_name1": (folder_paths.get_filename_list("text_encoders"), ), "clip_name2": (folder_paths.get_filename_list("text_encoders"), ), "clip_name3": (folder_paths.get_filename_list("text_encoders"), ) + }} + RETURN_TYPES = ("CLIP",) + FUNCTION = "load_clip" + + CATEGORY = "advanced/loaders" + + DESCRIPTION = "[Recipes]\n\nsd3: clip-l, clip-g, t5" + + def load_clip(self, clip_name1, clip_name2, clip_name3): + clip_path1 = folder_paths.get_full_path_or_raise("text_encoders", clip_name1) + clip_path2 = folder_paths.get_full_path_or_raise("text_encoders", clip_name2) + clip_path3 = folder_paths.get_full_path_or_raise("text_encoders", clip_name3) + clip = comfy.sd.load_clip(ckpt_paths=[clip_path1, clip_path2, clip_path3], embedding_directory=folder_paths.get_folder_paths("embeddings")) + return (clip,) + + +class EmptySD3LatentImage: + def __init__(self): + self.device = comfy.model_management.intermediate_device() + + @classmethod + def INPUT_TYPES(s): + return {"required": { "width": ("INT", {"default": 1024, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "height": ("INT", {"default": 1024, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 16}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096})}} + RETURN_TYPES = ("LATENT",) + FUNCTION = "generate" + + CATEGORY = "latent/sd3" + + def generate(self, width, height, batch_size=1): + latent = torch.zeros([batch_size, 16, height // 8, width // 8], device=self.device) + return ({"samples":latent}, ) + + +class CLIPTextEncodeSD3: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "clip": ("CLIP", ), + "clip_l": ("STRING", {"multiline": True, "dynamicPrompts": True}), + "clip_g": ("STRING", {"multiline": True, "dynamicPrompts": True}), + "t5xxl": ("STRING", {"multiline": True, "dynamicPrompts": True}), + "empty_padding": (["none", "empty_prompt"], ) + }} + RETURN_TYPES = ("CONDITIONING",) + FUNCTION = "encode" + + CATEGORY = "advanced/conditioning" + + def encode(self, clip, clip_l, clip_g, t5xxl, empty_padding): + no_padding = empty_padding == "none" + + tokens = clip.tokenize(clip_g) + if len(clip_g) == 0 and no_padding: + tokens["g"] = [] + + if len(clip_l) == 0 and no_padding: + tokens["l"] = [] + else: + tokens["l"] = clip.tokenize(clip_l)["l"] + + if len(t5xxl) == 0 and no_padding: + tokens["t5xxl"] = [] + else: + tokens["t5xxl"] = clip.tokenize(t5xxl)["t5xxl"] + if len(tokens["l"]) != len(tokens["g"]): + empty = clip.tokenize("") + while len(tokens["l"]) < len(tokens["g"]): + tokens["l"] += empty["l"] + while len(tokens["l"]) > len(tokens["g"]): + tokens["g"] += empty["g"] + return (clip.encode_from_tokens_scheduled(tokens), ) + + +class ControlNetApplySD3(nodes.ControlNetApplyAdvanced): + @classmethod + def INPUT_TYPES(s): + return {"required": {"positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "control_net": ("CONTROL_NET", ), + "vae": ("VAE", ), + "image": ("IMAGE", ), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}) + }} + CATEGORY = "conditioning/controlnet" + DEPRECATED = True + + +class SkipLayerGuidanceSD3(comfy_extras.nodes_slg.SkipLayerGuidanceDiT): + ''' + Enhance guidance towards detailed dtructure by having another set of CFG negative with skipped layers. + Inspired by Perturbed Attention Guidance (https://arxiv.org/abs/2403.17377) + Experimental implementation by Dango233@StabilityAI. + ''' + @classmethod + def INPUT_TYPES(s): + return {"required": {"model": ("MODEL", ), + "layers": ("STRING", {"default": "7, 8, 9", "multiline": False}), + "scale": ("FLOAT", {"default": 3.0, "min": 0.0, "max": 10.0, "step": 0.1}), + "start_percent": ("FLOAT", {"default": 0.01, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 0.15, "min": 0.0, "max": 1.0, "step": 0.001}) + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "skip_guidance_sd3" + + CATEGORY = "advanced/guidance" + + def skip_guidance_sd3(self, model, layers, scale, start_percent, end_percent): + return self.skip_guidance(model=model, scale=scale, start_percent=start_percent, end_percent=end_percent, double_layers=layers) + + +NODE_CLASS_MAPPINGS = { + "TripleCLIPLoader": TripleCLIPLoader, + "EmptySD3LatentImage": EmptySD3LatentImage, + "CLIPTextEncodeSD3": CLIPTextEncodeSD3, + "ControlNetApplySD3": ControlNetApplySD3, + "SkipLayerGuidanceSD3": SkipLayerGuidanceSD3, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + # Sampling + "ControlNetApplySD3": "Apply Controlnet with VAE", +} diff --git a/comfy_extras/nodes_sdupscale.py b/comfy_extras/nodes_sdupscale.py new file mode 100644 index 0000000000000000000000000000000000000000..bba67e8ddff8064a90ec0f8e71e953ca4e56c4c6 --- /dev/null +++ b/comfy_extras/nodes_sdupscale.py @@ -0,0 +1,46 @@ +import torch +import comfy.utils + +class SD_4XUpscale_Conditioning: + @classmethod + def INPUT_TYPES(s): + return {"required": { "images": ("IMAGE",), + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + "scale_ratio": ("FLOAT", {"default": 4.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "noise_augmentation": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + }} + RETURN_TYPES = ("CONDITIONING", "CONDITIONING", "LATENT") + RETURN_NAMES = ("positive", "negative", "latent") + + FUNCTION = "encode" + + CATEGORY = "conditioning/upscale_diffusion" + + def encode(self, images, positive, negative, scale_ratio, noise_augmentation): + width = max(1, round(images.shape[-2] * scale_ratio)) + height = max(1, round(images.shape[-3] * scale_ratio)) + + pixels = comfy.utils.common_upscale((images.movedim(-1,1) * 2.0) - 1.0, width // 4, height // 4, "bilinear", "center") + + out_cp = [] + out_cn = [] + + for t in positive: + n = [t[0], t[1].copy()] + n[1]['concat_image'] = pixels + n[1]['noise_augmentation'] = noise_augmentation + out_cp.append(n) + + for t in negative: + n = [t[0], t[1].copy()] + n[1]['concat_image'] = pixels + n[1]['noise_augmentation'] = noise_augmentation + out_cn.append(n) + + latent = torch.zeros([images.shape[0], 4, height // 4, width // 4]) + return (out_cp, out_cn, {"samples":latent}) + +NODE_CLASS_MAPPINGS = { + "SD_4XUpscale_Conditioning": SD_4XUpscale_Conditioning, +} diff --git a/comfy_extras/nodes_slg.py b/comfy_extras/nodes_slg.py new file mode 100644 index 0000000000000000000000000000000000000000..2fa09e2505ec8e075ab6100ae4a6f6e5b0634830 --- /dev/null +++ b/comfy_extras/nodes_slg.py @@ -0,0 +1,84 @@ +import comfy.model_patcher +import comfy.samplers +import re + + +class SkipLayerGuidanceDiT: + ''' + Enhance guidance towards detailed dtructure by having another set of CFG negative with skipped layers. + Inspired by Perturbed Attention Guidance (https://arxiv.org/abs/2403.17377) + Original experimental implementation for SD3 by Dango233@StabilityAI. + ''' + @classmethod + def INPUT_TYPES(s): + return {"required": {"model": ("MODEL", ), + "double_layers": ("STRING", {"default": "7, 8, 9", "multiline": False}), + "single_layers": ("STRING", {"default": "7, 8, 9", "multiline": False}), + "scale": ("FLOAT", {"default": 3.0, "min": 0.0, "max": 10.0, "step": 0.1}), + "start_percent": ("FLOAT", {"default": 0.01, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 0.15, "min": 0.0, "max": 1.0, "step": 0.001}), + "rescaling_scale": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "skip_guidance" + EXPERIMENTAL = True + + DESCRIPTION = "Generic version of SkipLayerGuidance node that can be used on every DiT model." + + CATEGORY = "advanced/guidance" + + def skip_guidance(self, model, scale, start_percent, end_percent, double_layers="", single_layers="", rescaling_scale=0): + # check if layer is comma separated integers + def skip(args, extra_args): + return args + + model_sampling = model.get_model_object("model_sampling") + sigma_start = model_sampling.percent_to_sigma(start_percent) + sigma_end = model_sampling.percent_to_sigma(end_percent) + + double_layers = re.findall(r'\d+', double_layers) + double_layers = [int(i) for i in double_layers] + + single_layers = re.findall(r'\d+', single_layers) + single_layers = [int(i) for i in single_layers] + + if len(double_layers) == 0 and len(single_layers) == 0: + return (model, ) + + def post_cfg_function(args): + model = args["model"] + cond_pred = args["cond_denoised"] + cond = args["cond"] + cfg_result = args["denoised"] + sigma = args["sigma"] + x = args["input"] + model_options = args["model_options"].copy() + + for layer in double_layers: + model_options = comfy.model_patcher.set_model_options_patch_replace(model_options, skip, "dit", "double_block", layer) + + for layer in single_layers: + model_options = comfy.model_patcher.set_model_options_patch_replace(model_options, skip, "dit", "single_block", layer) + + model_sampling.percent_to_sigma(start_percent) + + sigma_ = sigma[0].item() + if scale > 0 and sigma_ >= sigma_end and sigma_ <= sigma_start: + (slg,) = comfy.samplers.calc_cond_batch(model, [cond], x, sigma, model_options) + cfg_result = cfg_result + (cond_pred - slg) * scale + if rescaling_scale != 0: + factor = cond_pred.std() / cfg_result.std() + factor = rescaling_scale * factor + (1 - rescaling_scale) + cfg_result *= factor + + return cfg_result + + m = model.clone() + m.set_model_sampler_post_cfg_function(post_cfg_function) + + return (m, ) + + +NODE_CLASS_MAPPINGS = { + "SkipLayerGuidanceDiT": SkipLayerGuidanceDiT, +} diff --git a/comfy_extras/nodes_stable3d.py b/comfy_extras/nodes_stable3d.py new file mode 100644 index 0000000000000000000000000000000000000000..be2e34c28f49f160a21703c313305193ed00546f --- /dev/null +++ b/comfy_extras/nodes_stable3d.py @@ -0,0 +1,143 @@ +import torch +import nodes +import comfy.utils + +def camera_embeddings(elevation, azimuth): + elevation = torch.as_tensor([elevation]) + azimuth = torch.as_tensor([azimuth]) + embeddings = torch.stack( + [ + torch.deg2rad( + (90 - elevation) - (90) + ), # Zero123 polar is 90-elevation + torch.sin(torch.deg2rad(azimuth)), + torch.cos(torch.deg2rad(azimuth)), + torch.deg2rad( + 90 - torch.full_like(elevation, 0) + ), + ], dim=-1).unsqueeze(1) + + return embeddings + + +class StableZero123_Conditioning: + @classmethod + def INPUT_TYPES(s): + return {"required": { "clip_vision": ("CLIP_VISION",), + "init_image": ("IMAGE",), + "vae": ("VAE",), + "width": ("INT", {"default": 256, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 8}), + "height": ("INT", {"default": 256, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 8}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096}), + "elevation": ("FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": False}), + "azimuth": ("FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": False}), + }} + RETURN_TYPES = ("CONDITIONING", "CONDITIONING", "LATENT") + RETURN_NAMES = ("positive", "negative", "latent") + + FUNCTION = "encode" + + CATEGORY = "conditioning/3d_models" + + def encode(self, clip_vision, init_image, vae, width, height, batch_size, elevation, azimuth): + output = clip_vision.encode_image(init_image) + pooled = output.image_embeds.unsqueeze(0) + pixels = comfy.utils.common_upscale(init_image.movedim(-1,1), width, height, "bilinear", "center").movedim(1,-1) + encode_pixels = pixels[:,:,:,:3] + t = vae.encode(encode_pixels) + cam_embeds = camera_embeddings(elevation, azimuth) + cond = torch.cat([pooled, cam_embeds.to(pooled.device).repeat((pooled.shape[0], 1, 1))], dim=-1) + + positive = [[cond, {"concat_latent_image": t}]] + negative = [[torch.zeros_like(pooled), {"concat_latent_image": torch.zeros_like(t)}]] + latent = torch.zeros([batch_size, 4, height // 8, width // 8]) + return (positive, negative, {"samples":latent}) + +class StableZero123_Conditioning_Batched: + @classmethod + def INPUT_TYPES(s): + return {"required": { "clip_vision": ("CLIP_VISION",), + "init_image": ("IMAGE",), + "vae": ("VAE",), + "width": ("INT", {"default": 256, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 8}), + "height": ("INT", {"default": 256, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 8}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096}), + "elevation": ("FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": False}), + "azimuth": ("FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": False}), + "elevation_batch_increment": ("FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": False}), + "azimuth_batch_increment": ("FLOAT", {"default": 0.0, "min": -180.0, "max": 180.0, "step": 0.1, "round": False}), + }} + RETURN_TYPES = ("CONDITIONING", "CONDITIONING", "LATENT") + RETURN_NAMES = ("positive", "negative", "latent") + + FUNCTION = "encode" + + CATEGORY = "conditioning/3d_models" + + def encode(self, clip_vision, init_image, vae, width, height, batch_size, elevation, azimuth, elevation_batch_increment, azimuth_batch_increment): + output = clip_vision.encode_image(init_image) + pooled = output.image_embeds.unsqueeze(0) + pixels = comfy.utils.common_upscale(init_image.movedim(-1,1), width, height, "bilinear", "center").movedim(1,-1) + encode_pixels = pixels[:,:,:,:3] + t = vae.encode(encode_pixels) + + cam_embeds = [] + for i in range(batch_size): + cam_embeds.append(camera_embeddings(elevation, azimuth)) + elevation += elevation_batch_increment + azimuth += azimuth_batch_increment + + cam_embeds = torch.cat(cam_embeds, dim=0) + cond = torch.cat([comfy.utils.repeat_to_batch_size(pooled, batch_size), cam_embeds], dim=-1) + + positive = [[cond, {"concat_latent_image": t}]] + negative = [[torch.zeros_like(pooled), {"concat_latent_image": torch.zeros_like(t)}]] + latent = torch.zeros([batch_size, 4, height // 8, width // 8]) + return (positive, negative, {"samples":latent, "batch_index": [0] * batch_size}) + +class SV3D_Conditioning: + @classmethod + def INPUT_TYPES(s): + return {"required": { "clip_vision": ("CLIP_VISION",), + "init_image": ("IMAGE",), + "vae": ("VAE",), + "width": ("INT", {"default": 576, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 8}), + "height": ("INT", {"default": 576, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 8}), + "video_frames": ("INT", {"default": 21, "min": 1, "max": 4096}), + "elevation": ("FLOAT", {"default": 0.0, "min": -90.0, "max": 90.0, "step": 0.1, "round": False}), + }} + RETURN_TYPES = ("CONDITIONING", "CONDITIONING", "LATENT") + RETURN_NAMES = ("positive", "negative", "latent") + + FUNCTION = "encode" + + CATEGORY = "conditioning/3d_models" + + def encode(self, clip_vision, init_image, vae, width, height, video_frames, elevation): + output = clip_vision.encode_image(init_image) + pooled = output.image_embeds.unsqueeze(0) + pixels = comfy.utils.common_upscale(init_image.movedim(-1,1), width, height, "bilinear", "center").movedim(1,-1) + encode_pixels = pixels[:,:,:,:3] + t = vae.encode(encode_pixels) + + azimuth = 0 + azimuth_increment = 360 / (max(video_frames, 2) - 1) + + elevations = [] + azimuths = [] + for i in range(video_frames): + elevations.append(elevation) + azimuths.append(azimuth) + azimuth += azimuth_increment + + positive = [[pooled, {"concat_latent_image": t, "elevation": elevations, "azimuth": azimuths}]] + negative = [[torch.zeros_like(pooled), {"concat_latent_image": torch.zeros_like(t), "elevation": elevations, "azimuth": azimuths}]] + latent = torch.zeros([video_frames, 4, height // 8, width // 8]) + return (positive, negative, {"samples":latent}) + + +NODE_CLASS_MAPPINGS = { + "StableZero123_Conditioning": StableZero123_Conditioning, + "StableZero123_Conditioning_Batched": StableZero123_Conditioning_Batched, + "SV3D_Conditioning": SV3D_Conditioning, +} diff --git a/comfy_extras/nodes_stable_cascade.py b/comfy_extras/nodes_stable_cascade.py new file mode 100644 index 0000000000000000000000000000000000000000..0034032150e6eac48d18bb6bd35819114a01fe8d --- /dev/null +++ b/comfy_extras/nodes_stable_cascade.py @@ -0,0 +1,141 @@ +""" + This file is part of ComfyUI. + Copyright (C) 2024 Stability AI + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" + +import torch +import nodes +import comfy.utils + + +class StableCascade_EmptyLatentImage: + def __init__(self, device="cpu"): + self.device = device + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "width": ("INT", {"default": 1024, "min": 256, "max": nodes.MAX_RESOLUTION, "step": 8}), + "height": ("INT", {"default": 1024, "min": 256, "max": nodes.MAX_RESOLUTION, "step": 8}), + "compression": ("INT", {"default": 42, "min": 4, "max": 128, "step": 1}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096}) + }} + RETURN_TYPES = ("LATENT", "LATENT") + RETURN_NAMES = ("stage_c", "stage_b") + FUNCTION = "generate" + + CATEGORY = "latent/stable_cascade" + + def generate(self, width, height, compression, batch_size=1): + c_latent = torch.zeros([batch_size, 16, height // compression, width // compression]) + b_latent = torch.zeros([batch_size, 4, height // 4, width // 4]) + return ({ + "samples": c_latent, + }, { + "samples": b_latent, + }) + +class StableCascade_StageC_VAEEncode: + def __init__(self, device="cpu"): + self.device = device + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE",), + "vae": ("VAE", ), + "compression": ("INT", {"default": 42, "min": 4, "max": 128, "step": 1}), + }} + RETURN_TYPES = ("LATENT", "LATENT") + RETURN_NAMES = ("stage_c", "stage_b") + FUNCTION = "generate" + + CATEGORY = "latent/stable_cascade" + + def generate(self, image, vae, compression): + width = image.shape[-2] + height = image.shape[-3] + out_width = (width // compression) * vae.downscale_ratio + out_height = (height // compression) * vae.downscale_ratio + + s = comfy.utils.common_upscale(image.movedim(-1,1), out_width, out_height, "bicubic", "center").movedim(1,-1) + + c_latent = vae.encode(s[:,:,:,:3]) + b_latent = torch.zeros([c_latent.shape[0], 4, (height // 8) * 2, (width // 8) * 2]) + return ({ + "samples": c_latent, + }, { + "samples": b_latent, + }) + +class StableCascade_StageB_Conditioning: + @classmethod + def INPUT_TYPES(s): + return {"required": { "conditioning": ("CONDITIONING",), + "stage_c": ("LATENT",), + }} + RETURN_TYPES = ("CONDITIONING",) + + FUNCTION = "set_prior" + + CATEGORY = "conditioning/stable_cascade" + + def set_prior(self, conditioning, stage_c): + c = [] + for t in conditioning: + d = t[1].copy() + d['stable_cascade_prior'] = stage_c['samples'] + n = [t[0], d] + c.append(n) + return (c, ) + +class StableCascade_SuperResolutionControlnet: + def __init__(self, device="cpu"): + self.device = device + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE",), + "vae": ("VAE", ), + }} + RETURN_TYPES = ("IMAGE", "LATENT", "LATENT") + RETURN_NAMES = ("controlnet_input", "stage_c", "stage_b") + FUNCTION = "generate" + + EXPERIMENTAL = True + CATEGORY = "_for_testing/stable_cascade" + + def generate(self, image, vae): + width = image.shape[-2] + height = image.shape[-3] + batch_size = image.shape[0] + controlnet_input = vae.encode(image[:,:,:,:3]).movedim(1, -1) + + c_latent = torch.zeros([batch_size, 16, height // 16, width // 16]) + b_latent = torch.zeros([batch_size, 4, height // 2, width // 2]) + return (controlnet_input, { + "samples": c_latent, + }, { + "samples": b_latent, + }) + +NODE_CLASS_MAPPINGS = { + "StableCascade_EmptyLatentImage": StableCascade_EmptyLatentImage, + "StableCascade_StageB_Conditioning": StableCascade_StageB_Conditioning, + "StableCascade_StageC_VAEEncode": StableCascade_StageC_VAEEncode, + "StableCascade_SuperResolutionControlnet": StableCascade_SuperResolutionControlnet, +} diff --git a/comfy_extras/nodes_tomesd.py b/comfy_extras/nodes_tomesd.py new file mode 100644 index 0000000000000000000000000000000000000000..9f77c06fcb12a2dafbb891cbceb50ba8addaa81a --- /dev/null +++ b/comfy_extras/nodes_tomesd.py @@ -0,0 +1,176 @@ +#Taken from: https://github.com/dbolya/tomesd + +import torch +from typing import Tuple, Callable +import math + +def do_nothing(x: torch.Tensor, mode:str=None): + return x + + +def mps_gather_workaround(input, dim, index): + if input.shape[-1] == 1: + return torch.gather( + input.unsqueeze(-1), + dim - 1 if dim < 0 else dim, + index.unsqueeze(-1) + ).squeeze(-1) + else: + return torch.gather(input, dim, index) + + +def bipartite_soft_matching_random2d(metric: torch.Tensor, + w: int, h: int, sx: int, sy: int, r: int, + no_rand: bool = False) -> Tuple[Callable, Callable]: + """ + Partitions the tokens into src and dst and merges r tokens from src to dst. + Dst tokens are partitioned by choosing one randomy in each (sx, sy) region. + Args: + - metric [B, N, C]: metric to use for similarity + - w: image width in tokens + - h: image height in tokens + - sx: stride in the x dimension for dst, must divide w + - sy: stride in the y dimension for dst, must divide h + - r: number of tokens to remove (by merging) + - no_rand: if true, disable randomness (use top left corner only) + """ + B, N, _ = metric.shape + + if r <= 0 or w == 1 or h == 1: + return do_nothing, do_nothing + + gather = mps_gather_workaround if metric.device.type == "mps" else torch.gather + + with torch.no_grad(): + hsy, wsx = h // sy, w // sx + + # For each sy by sx kernel, randomly assign one token to be dst and the rest src + if no_rand: + rand_idx = torch.zeros(hsy, wsx, 1, device=metric.device, dtype=torch.int64) + else: + rand_idx = torch.randint(sy*sx, size=(hsy, wsx, 1), device=metric.device) + + # The image might not divide sx and sy, so we need to work on a view of the top left if the idx buffer instead + idx_buffer_view = torch.zeros(hsy, wsx, sy*sx, device=metric.device, dtype=torch.int64) + idx_buffer_view.scatter_(dim=2, index=rand_idx, src=-torch.ones_like(rand_idx, dtype=rand_idx.dtype)) + idx_buffer_view = idx_buffer_view.view(hsy, wsx, sy, sx).transpose(1, 2).reshape(hsy * sy, wsx * sx) + + # Image is not divisible by sx or sy so we need to move it into a new buffer + if (hsy * sy) < h or (wsx * sx) < w: + idx_buffer = torch.zeros(h, w, device=metric.device, dtype=torch.int64) + idx_buffer[:(hsy * sy), :(wsx * sx)] = idx_buffer_view + else: + idx_buffer = idx_buffer_view + + # We set dst tokens to be -1 and src to be 0, so an argsort gives us dst|src indices + rand_idx = idx_buffer.reshape(1, -1, 1).argsort(dim=1) + + # We're finished with these + del idx_buffer, idx_buffer_view + + # rand_idx is currently dst|src, so split them + num_dst = hsy * wsx + a_idx = rand_idx[:, num_dst:, :] # src + b_idx = rand_idx[:, :num_dst, :] # dst + + def split(x): + C = x.shape[-1] + src = gather(x, dim=1, index=a_idx.expand(B, N - num_dst, C)) + dst = gather(x, dim=1, index=b_idx.expand(B, num_dst, C)) + return src, dst + + # Cosine similarity between A and B + metric = metric / metric.norm(dim=-1, keepdim=True) + a, b = split(metric) + scores = a @ b.transpose(-1, -2) + + # Can't reduce more than the # tokens in src + r = min(a.shape[1], r) + + # Find the most similar greedily + node_max, node_idx = scores.max(dim=-1) + edge_idx = node_max.argsort(dim=-1, descending=True)[..., None] + + unm_idx = edge_idx[..., r:, :] # Unmerged Tokens + src_idx = edge_idx[..., :r, :] # Merged Tokens + dst_idx = gather(node_idx[..., None], dim=-2, index=src_idx) + + def merge(x: torch.Tensor, mode="mean") -> torch.Tensor: + src, dst = split(x) + n, t1, c = src.shape + + unm = gather(src, dim=-2, index=unm_idx.expand(n, t1 - r, c)) + src = gather(src, dim=-2, index=src_idx.expand(n, r, c)) + dst = dst.scatter_reduce(-2, dst_idx.expand(n, r, c), src, reduce=mode) + + return torch.cat([unm, dst], dim=1) + + def unmerge(x: torch.Tensor) -> torch.Tensor: + unm_len = unm_idx.shape[1] + unm, dst = x[..., :unm_len, :], x[..., unm_len:, :] + _, _, c = unm.shape + + src = gather(dst, dim=-2, index=dst_idx.expand(B, r, c)) + + # Combine back to the original shape + out = torch.zeros(B, N, c, device=x.device, dtype=x.dtype) + out.scatter_(dim=-2, index=b_idx.expand(B, num_dst, c), src=dst) + out.scatter_(dim=-2, index=gather(a_idx.expand(B, a_idx.shape[1], 1), dim=1, index=unm_idx).expand(B, unm_len, c), src=unm) + out.scatter_(dim=-2, index=gather(a_idx.expand(B, a_idx.shape[1], 1), dim=1, index=src_idx).expand(B, r, c), src=src) + + return out + + return merge, unmerge + + +def get_functions(x, ratio, original_shape): + b, c, original_h, original_w = original_shape + original_tokens = original_h * original_w + downsample = int(math.ceil(math.sqrt(original_tokens // x.shape[1]))) + stride_x = 2 + stride_y = 2 + max_downsample = 1 + + if downsample <= max_downsample: + w = int(math.ceil(original_w / downsample)) + h = int(math.ceil(original_h / downsample)) + r = int(x.shape[1] * ratio) + no_rand = False + m, u = bipartite_soft_matching_random2d(x, w, h, stride_x, stride_y, r, no_rand) + return m, u + + nothing = lambda y: y + return nothing, nothing + + + +class TomePatchModel: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "ratio": ("FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "model_patches/unet" + + def patch(self, model, ratio): + self.u = None + def tomesd_m(q, k, v, extra_options): + #NOTE: In the reference code get_functions takes x (input of the transformer block) as the argument instead of q + #however from my basic testing it seems that using q instead gives better results + m, self.u = get_functions(q, ratio, extra_options["original_shape"]) + return m(q), k, v + def tomesd_u(n, extra_options): + return self.u(n) + + m = model.clone() + m.set_model_attn1_patch(tomesd_m) + m.set_model_attn1_output_patch(tomesd_u) + return (m, ) + + +NODE_CLASS_MAPPINGS = { + "TomePatchModel": TomePatchModel, +} diff --git a/comfy_extras/nodes_torch_compile.py b/comfy_extras/nodes_torch_compile.py new file mode 100644 index 0000000000000000000000000000000000000000..1fe6f42c725f193b1e1147846b5793437dbbfd57 --- /dev/null +++ b/comfy_extras/nodes_torch_compile.py @@ -0,0 +1,22 @@ +import torch + +class TorchCompileModel: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "backend": (["inductor", "cudagraphs"],), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "_for_testing" + EXPERIMENTAL = True + + def patch(self, model, backend): + m = model.clone() + m.add_object_patch("diffusion_model", torch.compile(model=m.get_model_object("diffusion_model"), backend=backend)) + return (m, ) + +NODE_CLASS_MAPPINGS = { + "TorchCompileModel": TorchCompileModel, +} diff --git a/comfy_extras/nodes_upscale_model.py b/comfy_extras/nodes_upscale_model.py new file mode 100644 index 0000000000000000000000000000000000000000..04c948341296dfa7e385141498973977c17c906a --- /dev/null +++ b/comfy_extras/nodes_upscale_model.py @@ -0,0 +1,83 @@ +import logging +from spandrel import ModelLoader, ImageModelDescriptor +from comfy import model_management +import torch +import comfy.utils +import folder_paths + +try: + from spandrel_extra_arches import EXTRA_REGISTRY + from spandrel import MAIN_REGISTRY + MAIN_REGISTRY.add(*EXTRA_REGISTRY) + logging.info("Successfully imported spandrel_extra_arches: support for non commercial upscale models.") +except: + pass + +class UpscaleModelLoader: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model_name": (folder_paths.get_filename_list("upscale_models"), ), + }} + RETURN_TYPES = ("UPSCALE_MODEL",) + FUNCTION = "load_model" + + CATEGORY = "loaders" + + def load_model(self, model_name): + model_path = folder_paths.get_full_path_or_raise("upscale_models", model_name) + sd = comfy.utils.load_torch_file(model_path, safe_load=True) + if "module.layers.0.residual_group.blocks.0.norm1.weight" in sd: + sd = comfy.utils.state_dict_prefix_replace(sd, {"module.":""}) + out = ModelLoader().load_from_state_dict(sd).eval() + + if not isinstance(out, ImageModelDescriptor): + raise Exception("Upscale model must be a single-image model.") + + return (out, ) + + +class ImageUpscaleWithModel: + @classmethod + def INPUT_TYPES(s): + return {"required": { "upscale_model": ("UPSCALE_MODEL",), + "image": ("IMAGE",), + }} + RETURN_TYPES = ("IMAGE",) + FUNCTION = "upscale" + + CATEGORY = "image/upscaling" + + def upscale(self, upscale_model, image): + device = model_management.get_torch_device() + + memory_required = model_management.module_size(upscale_model.model) + memory_required += (512 * 512 * 3) * image.element_size() * max(upscale_model.scale, 1.0) * 384.0 #The 384.0 is an estimate of how much some of these models take, TODO: make it more accurate + memory_required += image.nelement() * image.element_size() + model_management.free_memory(memory_required, device) + + upscale_model.to(device) + in_img = image.movedim(-1,-3).to(device) + + tile = 512 + overlap = 32 + + oom = True + while oom: + try: + steps = in_img.shape[0] * comfy.utils.get_tiled_scale_steps(in_img.shape[3], in_img.shape[2], tile_x=tile, tile_y=tile, overlap=overlap) + pbar = comfy.utils.ProgressBar(steps) + s = comfy.utils.tiled_scale(in_img, lambda a: upscale_model(a), tile_x=tile, tile_y=tile, overlap=overlap, upscale_amount=upscale_model.scale, pbar=pbar) + oom = False + except model_management.OOM_EXCEPTION as e: + tile //= 2 + if tile < 128: + raise e + + upscale_model.to("cpu") + s = torch.clamp(s.movedim(-3,-1), min=0, max=1.0) + return (s,) + +NODE_CLASS_MAPPINGS = { + "UpscaleModelLoader": UpscaleModelLoader, + "ImageUpscaleWithModel": ImageUpscaleWithModel +} diff --git a/comfy_extras/nodes_video_model.py b/comfy_extras/nodes_video_model.py new file mode 100644 index 0000000000000000000000000000000000000000..e7a7ec181fca8ebb5662b394cffaf55a953b5f28 --- /dev/null +++ b/comfy_extras/nodes_video_model.py @@ -0,0 +1,134 @@ +import nodes +import torch +import comfy.utils +import comfy.sd +import folder_paths +import comfy_extras.nodes_model_merging + + +class ImageOnlyCheckpointLoader: + @classmethod + def INPUT_TYPES(s): + return {"required": { "ckpt_name": (folder_paths.get_filename_list("checkpoints"), ), + }} + RETURN_TYPES = ("MODEL", "CLIP_VISION", "VAE") + FUNCTION = "load_checkpoint" + + CATEGORY = "loaders/video_models" + + def load_checkpoint(self, ckpt_name, output_vae=True, output_clip=True): + ckpt_path = folder_paths.get_full_path_or_raise("checkpoints", ckpt_name) + out = comfy.sd.load_checkpoint_guess_config(ckpt_path, output_vae=True, output_clip=False, output_clipvision=True, embedding_directory=folder_paths.get_folder_paths("embeddings")) + return (out[0], out[3], out[2]) + + +class SVD_img2vid_Conditioning: + @classmethod + def INPUT_TYPES(s): + return {"required": { "clip_vision": ("CLIP_VISION",), + "init_image": ("IMAGE",), + "vae": ("VAE",), + "width": ("INT", {"default": 1024, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 8}), + "height": ("INT", {"default": 576, "min": 16, "max": nodes.MAX_RESOLUTION, "step": 8}), + "video_frames": ("INT", {"default": 14, "min": 1, "max": 4096}), + "motion_bucket_id": ("INT", {"default": 127, "min": 1, "max": 1023}), + "fps": ("INT", {"default": 6, "min": 1, "max": 1024}), + "augmentation_level": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 10.0, "step": 0.01}) + }} + RETURN_TYPES = ("CONDITIONING", "CONDITIONING", "LATENT") + RETURN_NAMES = ("positive", "negative", "latent") + + FUNCTION = "encode" + + CATEGORY = "conditioning/video_models" + + def encode(self, clip_vision, init_image, vae, width, height, video_frames, motion_bucket_id, fps, augmentation_level): + output = clip_vision.encode_image(init_image) + pooled = output.image_embeds.unsqueeze(0) + pixels = comfy.utils.common_upscale(init_image.movedim(-1,1), width, height, "bilinear", "center").movedim(1,-1) + encode_pixels = pixels[:,:,:,:3] + if augmentation_level > 0: + encode_pixels += torch.randn_like(pixels) * augmentation_level + t = vae.encode(encode_pixels) + positive = [[pooled, {"motion_bucket_id": motion_bucket_id, "fps": fps, "augmentation_level": augmentation_level, "concat_latent_image": t}]] + negative = [[torch.zeros_like(pooled), {"motion_bucket_id": motion_bucket_id, "fps": fps, "augmentation_level": augmentation_level, "concat_latent_image": torch.zeros_like(t)}]] + latent = torch.zeros([video_frames, 4, height // 8, width // 8]) + return (positive, negative, {"samples":latent}) + +class VideoLinearCFGGuidance: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "min_cfg": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.5, "round": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "sampling/video_models" + + def patch(self, model, min_cfg): + def linear_cfg(args): + cond = args["cond"] + uncond = args["uncond"] + cond_scale = args["cond_scale"] + + scale = torch.linspace(min_cfg, cond_scale, cond.shape[0], device=cond.device).reshape((cond.shape[0], 1, 1, 1)) + return uncond + scale * (cond - uncond) + + m = model.clone() + m.set_model_sampler_cfg_function(linear_cfg) + return (m, ) + +class VideoTriangleCFGGuidance: + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "min_cfg": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step":0.5, "round": 0.01}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "sampling/video_models" + + def patch(self, model, min_cfg): + def linear_cfg(args): + cond = args["cond"] + uncond = args["uncond"] + cond_scale = args["cond_scale"] + period = 1.0 + values = torch.linspace(0, 1, cond.shape[0], device=cond.device) + values = 2 * (values / period - torch.floor(values / period + 0.5)).abs() + scale = (values * (cond_scale - min_cfg) + min_cfg).reshape((cond.shape[0], 1, 1, 1)) + + return uncond + scale * (cond - uncond) + + m = model.clone() + m.set_model_sampler_cfg_function(linear_cfg) + return (m, ) + +class ImageOnlyCheckpointSave(comfy_extras.nodes_model_merging.CheckpointSave): + CATEGORY = "advanced/model_merging" + + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "clip_vision": ("CLIP_VISION",), + "vae": ("VAE",), + "filename_prefix": ("STRING", {"default": "checkpoints/ComfyUI"}),}, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},} + + def save(self, model, clip_vision, vae, filename_prefix, prompt=None, extra_pnginfo=None): + comfy_extras.nodes_model_merging.save_checkpoint(model, clip_vision=clip_vision, vae=vae, filename_prefix=filename_prefix, output_dir=self.output_dir, prompt=prompt, extra_pnginfo=extra_pnginfo) + return {} + +NODE_CLASS_MAPPINGS = { + "ImageOnlyCheckpointLoader": ImageOnlyCheckpointLoader, + "SVD_img2vid_Conditioning": SVD_img2vid_Conditioning, + "VideoLinearCFGGuidance": VideoLinearCFGGuidance, + "VideoTriangleCFGGuidance": VideoTriangleCFGGuidance, + "ImageOnlyCheckpointSave": ImageOnlyCheckpointSave, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "ImageOnlyCheckpointLoader": "Image Only Checkpoint Loader (img2vid model)", +} diff --git a/comfy_extras/nodes_webcam.py b/comfy_extras/nodes_webcam.py new file mode 100644 index 0000000000000000000000000000000000000000..31eddb2d691de342afebf36a509381d110c813f4 --- /dev/null +++ b/comfy_extras/nodes_webcam.py @@ -0,0 +1,33 @@ +import nodes +import folder_paths + +MAX_RESOLUTION = nodes.MAX_RESOLUTION + + +class WebcamCapture(nodes.LoadImage): + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("WEBCAM", {}), + "width": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "height": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "capture_on_queue": ("BOOLEAN", {"default": True}), + } + } + RETURN_TYPES = ("IMAGE",) + FUNCTION = "load_capture" + + CATEGORY = "image" + + def load_capture(s, image, **kwargs): + return super().load_image(folder_paths.get_annotated_filepath(image)) + + +NODE_CLASS_MAPPINGS = { + "WebcamCapture": WebcamCapture, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "WebcamCapture": "Webcam Capture", +} diff --git a/comfyui_version.py b/comfyui_version.py new file mode 100644 index 0000000000000000000000000000000000000000..ca3c0f5812f321245ca895b68a9fafaf2ac1473d --- /dev/null +++ b/comfyui_version.py @@ -0,0 +1,3 @@ +# This file is automatically generated by the build process when version is +# updated in pyproject.toml. +__version__ = "0.3.13" diff --git a/custom_nodes/example_node.py.example b/custom_nodes/example_node.py.example new file mode 100644 index 0000000000000000000000000000000000000000..29ab2aa72319354b147b7dd79e1c3179e54d3d06 --- /dev/null +++ b/custom_nodes/example_node.py.example @@ -0,0 +1,155 @@ +class Example: + """ + A example node + + Class methods + ------------- + INPUT_TYPES (dict): + Tell the main program input parameters of nodes. + IS_CHANGED: + optional method to control when the node is re executed. + + Attributes + ---------- + RETURN_TYPES (`tuple`): + The type of each element in the output tuple. + RETURN_NAMES (`tuple`): + Optional: The name of each output in the output tuple. + FUNCTION (`str`): + The name of the entry-point method. For example, if `FUNCTION = "execute"` then it will run Example().execute() + OUTPUT_NODE ([`bool`]): + If this node is an output node that outputs a result/image from the graph. The SaveImage node is an example. + The backend iterates on these output nodes and tries to execute all their parents if their parent graph is properly connected. + Assumed to be False if not present. + CATEGORY (`str`): + The category the node should appear in the UI. + DEPRECATED (`bool`): + Indicates whether the node is deprecated. Deprecated nodes are hidden by default in the UI, but remain + functional in existing workflows that use them. + EXPERIMENTAL (`bool`): + Indicates whether the node is experimental. Experimental nodes are marked as such in the UI and may be subject to + significant changes or removal in future versions. Use with caution in production workflows. + execute(s) -> tuple || None: + The entry point method. The name of this method must be the same as the value of property `FUNCTION`. + For example, if `FUNCTION = "execute"` then this method's name must be `execute`, if `FUNCTION = "foo"` then it must be `foo`. + """ + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + """ + Return a dictionary which contains config for all input fields. + Some types (string): "MODEL", "VAE", "CLIP", "CONDITIONING", "LATENT", "IMAGE", "INT", "STRING", "FLOAT". + Input types "INT", "STRING" or "FLOAT" are special values for fields on the node. + The type can be a list for selection. + + Returns: `dict`: + - Key input_fields_group (`string`): Can be either required, hidden or optional. A node class must have property `required` + - Value input_fields (`dict`): Contains input fields config: + * Key field_name (`string`): Name of a entry-point method's argument + * Value field_config (`tuple`): + + First value is a string indicate the type of field or a list for selection. + + Second value is a config for type "INT", "STRING" or "FLOAT". + """ + return { + "required": { + "image": ("IMAGE",), + "int_field": ("INT", { + "default": 0, + "min": 0, #Minimum value + "max": 4096, #Maximum value + "step": 64, #Slider's step + "display": "number", # Cosmetic only: display as "number" or "slider" + "lazy": True # Will only be evaluated if check_lazy_status requires it + }), + "float_field": ("FLOAT", { + "default": 1.0, + "min": 0.0, + "max": 10.0, + "step": 0.01, + "round": 0.001, #The value representing the precision to round to, will be set to the step value by default. Can be set to False to disable rounding. + "display": "number", + "lazy": True + }), + "print_to_screen": (["enable", "disable"],), + "string_field": ("STRING", { + "multiline": False, #True if you want the field to look like the one on the ClipTextEncode node + "default": "Hello World!", + "lazy": True + }), + }, + } + + RETURN_TYPES = ("IMAGE",) + #RETURN_NAMES = ("image_output_name",) + + FUNCTION = "test" + + #OUTPUT_NODE = False + + CATEGORY = "Example" + + def check_lazy_status(self, image, string_field, int_field, float_field, print_to_screen): + """ + Return a list of input names that need to be evaluated. + + This function will be called if there are any lazy inputs which have not yet been + evaluated. As long as you return at least one field which has not yet been evaluated + (and more exist), this function will be called again once the value of the requested + field is available. + + Any evaluated inputs will be passed as arguments to this function. Any unevaluated + inputs will have the value None. + """ + if print_to_screen == "enable": + return ["int_field", "float_field", "string_field"] + else: + return [] + + def test(self, image, string_field, int_field, float_field, print_to_screen): + if print_to_screen == "enable": + print(f"""Your input contains: + string_field aka input text: {string_field} + int_field: {int_field} + float_field: {float_field} + """) + #do some processing on the image, in this example I just invert it + image = 1.0 - image + return (image,) + + """ + The node will always be re executed if any of the inputs change but + this method can be used to force the node to execute again even when the inputs don't change. + You can make this node return a number or a string. This value will be compared to the one returned the last time the node was + executed, if it is different the node will be executed again. + This method is used in the core repo for the LoadImage node where they return the image hash as a string, if the image hash + changes between executions the LoadImage node is executed again. + """ + #@classmethod + #def IS_CHANGED(s, image, string_field, int_field, float_field, print_to_screen): + # return "" + +# Set the web directory, any .js file in that directory will be loaded by the frontend as a frontend extension +# WEB_DIRECTORY = "./somejs" + + +# Add custom API routes, using router +from aiohttp import web +from server import PromptServer + +@PromptServer.instance.routes.get("/hello") +async def get_hello(request): + return web.json_response("hello") + + +# A dictionary that contains all nodes you want to export with their names +# NOTE: names should be globally unique +NODE_CLASS_MAPPINGS = { + "Example": Example +} + +# A dictionary that contains the friendly/humanly readable titles for the nodes +NODE_DISPLAY_NAME_MAPPINGS = { + "Example": "Example Node" +} diff --git a/custom_nodes/websocket_image_save.py b/custom_nodes/websocket_image_save.py new file mode 100644 index 0000000000000000000000000000000000000000..15f87f9f56175f33df18c6142f9e13c4503b1186 --- /dev/null +++ b/custom_nodes/websocket_image_save.py @@ -0,0 +1,44 @@ +from PIL import Image +import numpy as np +import comfy.utils +import time + +#You can use this node to save full size images through the websocket, the +#images will be sent in exactly the same format as the image previews: as +#binary images on the websocket with a 8 byte header indicating the type +#of binary message (first 4 bytes) and the image format (next 4 bytes). + +#Note that no metadata will be put in the images saved with this node. + +class SaveImageWebsocket: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"images": ("IMAGE", ),} + } + + RETURN_TYPES = () + FUNCTION = "save_images" + + OUTPUT_NODE = True + + CATEGORY = "api/image" + + def save_images(self, images): + pbar = comfy.utils.ProgressBar(images.shape[0]) + step = 0 + for image in images: + i = 255. * image.cpu().numpy() + img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8)) + pbar.update_absolute(step, images.shape[0], ("PNG", img, None)) + step += 1 + + return {} + + @classmethod + def IS_CHANGED(s, images): + return time.time() + +NODE_CLASS_MAPPINGS = { + "SaveImageWebsocket": SaveImageWebsocket, +} diff --git a/fix_torch.py b/fix_torch.py new file mode 100644 index 0000000000000000000000000000000000000000..ce117b6399194e93ee633973a2ecbc07c947cbc4 --- /dev/null +++ b/fix_torch.py @@ -0,0 +1,28 @@ +import importlib.util +import shutil +import os +import ctypes +import logging + + +def fix_pytorch_libomp(): + """ + Fix PyTorch libomp DLL issue on Windows by copying the correct DLL file if needed. + """ + torch_spec = importlib.util.find_spec("torch") + for folder in torch_spec.submodule_search_locations: + lib_folder = os.path.join(folder, "lib") + test_file = os.path.join(lib_folder, "fbgemm.dll") + dest = os.path.join(lib_folder, "libomp140.x86_64.dll") + if os.path.exists(dest): + break + + with open(test_file, "rb") as f: + contents = f.read() + if b"libomp140.x86_64.dll" not in contents: + break + try: + ctypes.cdll.LoadLibrary(test_file) + except FileNotFoundError: + logging.warning("Detected pytorch version with libomp issue, patching.") + shutil.copyfile(os.path.join(lib_folder, "libiomp5md.dll"), dest) diff --git a/input/example.png b/input/example.png new file mode 100644 index 0000000000000000000000000000000000000000..7b7f3c9cbbe6d8750c4a9eaf65d6ae4d2f108f79 Binary files /dev/null and b/input/example.png differ diff --git a/models/checkpoints/put_checkpoints_here b/models/checkpoints/put_checkpoints_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/clip/put_clip_or_text_encoder_models_here b/models/clip/put_clip_or_text_encoder_models_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/clip_vision/put_clip_vision_models_here b/models/clip_vision/put_clip_vision_models_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/configs/anything_v3.yaml b/models/configs/anything_v3.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8bcfe584ae73d60e2c7a6f89b3f7befbd487ea34 --- /dev/null +++ b/models/configs/anything_v3.yaml @@ -0,0 +1,73 @@ +model: + base_learning_rate: 1.0e-04 + target: ldm.models.diffusion.ddpm.LatentDiffusion + params: + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false # Note: different from the one we trained before + conditioning_key: crossattn + monitor: val/loss_simple_ema + scale_factor: 0.18215 + use_ema: False + + scheduler_config: # 10000 warmup steps + target: ldm.lr_scheduler.LambdaLinearScheduler + params: + warm_up_steps: [ 10000 ] + cycle_lengths: [ 10000000000000 ] # incredibly large number to prevent corner cases + f_start: [ 1.e-6 ] + f_max: [ 1. ] + f_min: [ 1. ] + + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + image_size: 32 # unused + in_channels: 4 + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_heads: 8 + use_spatial_transformer: True + transformer_depth: 1 + context_dim: 768 + use_checkpoint: True + legacy: False + + first_stage_config: + target: ldm.models.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: ldm.modules.encoders.modules.FrozenCLIPEmbedder + params: + layer: "hidden" + layer_idx: -2 diff --git a/models/configs/v1-inference.yaml b/models/configs/v1-inference.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d4effe569e897369918625f9d8be5603a0e6a0d6 --- /dev/null +++ b/models/configs/v1-inference.yaml @@ -0,0 +1,70 @@ +model: + base_learning_rate: 1.0e-04 + target: ldm.models.diffusion.ddpm.LatentDiffusion + params: + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false # Note: different from the one we trained before + conditioning_key: crossattn + monitor: val/loss_simple_ema + scale_factor: 0.18215 + use_ema: False + + scheduler_config: # 10000 warmup steps + target: ldm.lr_scheduler.LambdaLinearScheduler + params: + warm_up_steps: [ 10000 ] + cycle_lengths: [ 10000000000000 ] # incredibly large number to prevent corner cases + f_start: [ 1.e-6 ] + f_max: [ 1. ] + f_min: [ 1. ] + + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + image_size: 32 # unused + in_channels: 4 + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_heads: 8 + use_spatial_transformer: True + transformer_depth: 1 + context_dim: 768 + use_checkpoint: True + legacy: False + + first_stage_config: + target: ldm.models.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: ldm.modules.encoders.modules.FrozenCLIPEmbedder diff --git a/models/configs/v1-inference_clip_skip_2.yaml b/models/configs/v1-inference_clip_skip_2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8bcfe584ae73d60e2c7a6f89b3f7befbd487ea34 --- /dev/null +++ b/models/configs/v1-inference_clip_skip_2.yaml @@ -0,0 +1,73 @@ +model: + base_learning_rate: 1.0e-04 + target: ldm.models.diffusion.ddpm.LatentDiffusion + params: + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false # Note: different from the one we trained before + conditioning_key: crossattn + monitor: val/loss_simple_ema + scale_factor: 0.18215 + use_ema: False + + scheduler_config: # 10000 warmup steps + target: ldm.lr_scheduler.LambdaLinearScheduler + params: + warm_up_steps: [ 10000 ] + cycle_lengths: [ 10000000000000 ] # incredibly large number to prevent corner cases + f_start: [ 1.e-6 ] + f_max: [ 1. ] + f_min: [ 1. ] + + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + image_size: 32 # unused + in_channels: 4 + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_heads: 8 + use_spatial_transformer: True + transformer_depth: 1 + context_dim: 768 + use_checkpoint: True + legacy: False + + first_stage_config: + target: ldm.models.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: ldm.modules.encoders.modules.FrozenCLIPEmbedder + params: + layer: "hidden" + layer_idx: -2 diff --git a/models/configs/v1-inference_clip_skip_2_fp16.yaml b/models/configs/v1-inference_clip_skip_2_fp16.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7eca31c7b5e571c2b1348e94ed9d69978ebd2d52 --- /dev/null +++ b/models/configs/v1-inference_clip_skip_2_fp16.yaml @@ -0,0 +1,74 @@ +model: + base_learning_rate: 1.0e-04 + target: ldm.models.diffusion.ddpm.LatentDiffusion + params: + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false # Note: different from the one we trained before + conditioning_key: crossattn + monitor: val/loss_simple_ema + scale_factor: 0.18215 + use_ema: False + + scheduler_config: # 10000 warmup steps + target: ldm.lr_scheduler.LambdaLinearScheduler + params: + warm_up_steps: [ 10000 ] + cycle_lengths: [ 10000000000000 ] # incredibly large number to prevent corner cases + f_start: [ 1.e-6 ] + f_max: [ 1. ] + f_min: [ 1. ] + + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + use_fp16: True + image_size: 32 # unused + in_channels: 4 + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_heads: 8 + use_spatial_transformer: True + transformer_depth: 1 + context_dim: 768 + use_checkpoint: True + legacy: False + + first_stage_config: + target: ldm.models.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: ldm.modules.encoders.modules.FrozenCLIPEmbedder + params: + layer: "hidden" + layer_idx: -2 diff --git a/models/configs/v1-inference_fp16.yaml b/models/configs/v1-inference_fp16.yaml new file mode 100644 index 0000000000000000000000000000000000000000..147f42b17b835cc839338156f99e8f971df5c1aa --- /dev/null +++ b/models/configs/v1-inference_fp16.yaml @@ -0,0 +1,71 @@ +model: + base_learning_rate: 1.0e-04 + target: ldm.models.diffusion.ddpm.LatentDiffusion + params: + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false # Note: different from the one we trained before + conditioning_key: crossattn + monitor: val/loss_simple_ema + scale_factor: 0.18215 + use_ema: False + + scheduler_config: # 10000 warmup steps + target: ldm.lr_scheduler.LambdaLinearScheduler + params: + warm_up_steps: [ 10000 ] + cycle_lengths: [ 10000000000000 ] # incredibly large number to prevent corner cases + f_start: [ 1.e-6 ] + f_max: [ 1. ] + f_min: [ 1. ] + + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + use_fp16: True + image_size: 32 # unused + in_channels: 4 + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_heads: 8 + use_spatial_transformer: True + transformer_depth: 1 + context_dim: 768 + use_checkpoint: True + legacy: False + + first_stage_config: + target: ldm.models.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: ldm.modules.encoders.modules.FrozenCLIPEmbedder diff --git a/models/configs/v1-inpainting-inference.yaml b/models/configs/v1-inpainting-inference.yaml new file mode 100644 index 0000000000000000000000000000000000000000..45f3f82d461cd8c6109f26ec3b1da75366eda0b0 --- /dev/null +++ b/models/configs/v1-inpainting-inference.yaml @@ -0,0 +1,71 @@ +model: + base_learning_rate: 7.5e-05 + target: ldm.models.diffusion.ddpm.LatentInpaintDiffusion + params: + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false # Note: different from the one we trained before + conditioning_key: hybrid # important + monitor: val/loss_simple_ema + scale_factor: 0.18215 + finetune_keys: null + + scheduler_config: # 10000 warmup steps + target: ldm.lr_scheduler.LambdaLinearScheduler + params: + warm_up_steps: [ 2500 ] # NOTE for resuming. use 10000 if starting from scratch + cycle_lengths: [ 10000000000000 ] # incredibly large number to prevent corner cases + f_start: [ 1.e-6 ] + f_max: [ 1. ] + f_min: [ 1. ] + + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + image_size: 32 # unused + in_channels: 9 # 4 data + 4 downscaled image + 1 mask + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_heads: 8 + use_spatial_transformer: True + transformer_depth: 1 + context_dim: 768 + use_checkpoint: True + legacy: False + + first_stage_config: + target: ldm.models.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: ldm.modules.encoders.modules.FrozenCLIPEmbedder + diff --git a/models/configs/v2-inference-v.yaml b/models/configs/v2-inference-v.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8ec8dfbfefe94ae8522c93017668fea78d580acf --- /dev/null +++ b/models/configs/v2-inference-v.yaml @@ -0,0 +1,68 @@ +model: + base_learning_rate: 1.0e-4 + target: ldm.models.diffusion.ddpm.LatentDiffusion + params: + parameterization: "v" + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false + conditioning_key: crossattn + monitor: val/loss_simple_ema + scale_factor: 0.18215 + use_ema: False # we set this to false because this is an inference only config + + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + use_checkpoint: True + use_fp16: True + image_size: 32 # unused + in_channels: 4 + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_head_channels: 64 # need to fix for flash-attn + use_spatial_transformer: True + use_linear_in_transformer: True + transformer_depth: 1 + context_dim: 1024 + legacy: False + + first_stage_config: + target: ldm.models.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + #attn_type: "vanilla-xformers" + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: ldm.modules.encoders.modules.FrozenOpenCLIPEmbedder + params: + freeze: True + layer: "penultimate" diff --git a/models/configs/v2-inference-v_fp32.yaml b/models/configs/v2-inference-v_fp32.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d5c9b9cb29ca162ade44a7c922f59e75d7d57813 --- /dev/null +++ b/models/configs/v2-inference-v_fp32.yaml @@ -0,0 +1,68 @@ +model: + base_learning_rate: 1.0e-4 + target: ldm.models.diffusion.ddpm.LatentDiffusion + params: + parameterization: "v" + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false + conditioning_key: crossattn + monitor: val/loss_simple_ema + scale_factor: 0.18215 + use_ema: False # we set this to false because this is an inference only config + + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + use_checkpoint: True + use_fp16: False + image_size: 32 # unused + in_channels: 4 + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_head_channels: 64 # need to fix for flash-attn + use_spatial_transformer: True + use_linear_in_transformer: True + transformer_depth: 1 + context_dim: 1024 + legacy: False + + first_stage_config: + target: ldm.models.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + #attn_type: "vanilla-xformers" + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: ldm.modules.encoders.modules.FrozenOpenCLIPEmbedder + params: + freeze: True + layer: "penultimate" diff --git a/models/configs/v2-inference.yaml b/models/configs/v2-inference.yaml new file mode 100644 index 0000000000000000000000000000000000000000..152c4f3c2b36c3b246a9cb10eb8166134b0d2e1c --- /dev/null +++ b/models/configs/v2-inference.yaml @@ -0,0 +1,67 @@ +model: + base_learning_rate: 1.0e-4 + target: ldm.models.diffusion.ddpm.LatentDiffusion + params: + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false + conditioning_key: crossattn + monitor: val/loss_simple_ema + scale_factor: 0.18215 + use_ema: False # we set this to false because this is an inference only config + + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + use_checkpoint: True + use_fp16: True + image_size: 32 # unused + in_channels: 4 + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_head_channels: 64 # need to fix for flash-attn + use_spatial_transformer: True + use_linear_in_transformer: True + transformer_depth: 1 + context_dim: 1024 + legacy: False + + first_stage_config: + target: ldm.models.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + #attn_type: "vanilla-xformers" + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: ldm.modules.encoders.modules.FrozenOpenCLIPEmbedder + params: + freeze: True + layer: "penultimate" diff --git a/models/configs/v2-inference_fp32.yaml b/models/configs/v2-inference_fp32.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0d03231f3f2c2e8ef8fbe0d781e5f3d65409ef3a --- /dev/null +++ b/models/configs/v2-inference_fp32.yaml @@ -0,0 +1,67 @@ +model: + base_learning_rate: 1.0e-4 + target: ldm.models.diffusion.ddpm.LatentDiffusion + params: + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false + conditioning_key: crossattn + monitor: val/loss_simple_ema + scale_factor: 0.18215 + use_ema: False # we set this to false because this is an inference only config + + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + use_checkpoint: True + use_fp16: False + image_size: 32 # unused + in_channels: 4 + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_head_channels: 64 # need to fix for flash-attn + use_spatial_transformer: True + use_linear_in_transformer: True + transformer_depth: 1 + context_dim: 1024 + legacy: False + + first_stage_config: + target: ldm.models.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + #attn_type: "vanilla-xformers" + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: ldm.modules.encoders.modules.FrozenOpenCLIPEmbedder + params: + freeze: True + layer: "penultimate" diff --git a/models/configs/v2-inpainting-inference.yaml b/models/configs/v2-inpainting-inference.yaml new file mode 100644 index 0000000000000000000000000000000000000000..32a9471d71b828c51bcbbabfe34c5f6c8282c803 --- /dev/null +++ b/models/configs/v2-inpainting-inference.yaml @@ -0,0 +1,158 @@ +model: + base_learning_rate: 5.0e-05 + target: ldm.models.diffusion.ddpm.LatentInpaintDiffusion + params: + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false + conditioning_key: hybrid + scale_factor: 0.18215 + monitor: val/loss_simple_ema + finetune_keys: null + use_ema: False + + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + use_checkpoint: True + image_size: 32 # unused + in_channels: 9 + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_head_channels: 64 # need to fix for flash-attn + use_spatial_transformer: True + use_linear_in_transformer: True + transformer_depth: 1 + context_dim: 1024 + legacy: False + + first_stage_config: + target: ldm.models.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + #attn_type: "vanilla-xformers" + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [ ] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: ldm.modules.encoders.modules.FrozenOpenCLIPEmbedder + params: + freeze: True + layer: "penultimate" + + +data: + target: ldm.data.laion.WebDataModuleFromConfig + params: + tar_base: null # for concat as in LAION-A + p_unsafe_threshold: 0.1 + filter_word_list: "data/filters.yaml" + max_pwatermark: 0.45 + batch_size: 8 + num_workers: 6 + multinode: True + min_size: 512 + train: + shards: + - "pipe:aws s3 cp s3://stability-aws/laion-a-native/part-0/{00000..18699}.tar -" + - "pipe:aws s3 cp s3://stability-aws/laion-a-native/part-1/{00000..18699}.tar -" + - "pipe:aws s3 cp s3://stability-aws/laion-a-native/part-2/{00000..18699}.tar -" + - "pipe:aws s3 cp s3://stability-aws/laion-a-native/part-3/{00000..18699}.tar -" + - "pipe:aws s3 cp s3://stability-aws/laion-a-native/part-4/{00000..18699}.tar -" #{00000-94333}.tar" + shuffle: 10000 + image_key: jpg + image_transforms: + - target: torchvision.transforms.Resize + params: + size: 512 + interpolation: 3 + - target: torchvision.transforms.RandomCrop + params: + size: 512 + postprocess: + target: ldm.data.laion.AddMask + params: + mode: "512train-large" + p_drop: 0.25 + # NOTE use enough shards to avoid empty validation loops in workers + validation: + shards: + - "pipe:aws s3 cp s3://deep-floyd-s3/datasets/laion_cleaned-part5/{93001..94333}.tar - " + shuffle: 0 + image_key: jpg + image_transforms: + - target: torchvision.transforms.Resize + params: + size: 512 + interpolation: 3 + - target: torchvision.transforms.CenterCrop + params: + size: 512 + postprocess: + target: ldm.data.laion.AddMask + params: + mode: "512train-large" + p_drop: 0.25 + +lightning: + find_unused_parameters: True + modelcheckpoint: + params: + every_n_train_steps: 5000 + + callbacks: + metrics_over_trainsteps_checkpoint: + params: + every_n_train_steps: 10000 + + image_logger: + target: main.ImageLogger + params: + enable_autocast: False + disabled: False + batch_frequency: 1000 + max_images: 4 + increase_log_steps: False + log_first_step: False + log_images_kwargs: + use_ema_scope: False + inpaint: False + plot_progressive_rows: False + plot_diffusion_rows: False + N: 4 + unconditional_guidance_scale: 5.0 + unconditional_guidance_label: [""] + ddim_steps: 50 # todo check these out for depth2img, + ddim_eta: 0.0 # todo check these out for depth2img, + + trainer: + benchmark: True + val_check_interval: 5000000 + num_sanity_val_steps: 0 + accumulate_grad_batches: 1 diff --git a/models/controlnet/put_controlnets_and_t2i_here b/models/controlnet/put_controlnets_and_t2i_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/diffusers/put_diffusers_models_here b/models/diffusers/put_diffusers_models_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/diffusion_models/put_diffusion_model_files_here b/models/diffusion_models/put_diffusion_model_files_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/embeddings/put_embeddings_or_textual_inversion_concepts_here b/models/embeddings/put_embeddings_or_textual_inversion_concepts_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/gligen/put_gligen_models_here b/models/gligen/put_gligen_models_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/hypernetworks/put_hypernetworks_here b/models/hypernetworks/put_hypernetworks_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/loras/put_loras_here b/models/loras/put_loras_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/photomaker/put_photomaker_models_here b/models/photomaker/put_photomaker_models_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/style_models/put_t2i_style_model_here b/models/style_models/put_t2i_style_model_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/text_encoders/put_text_encoder_files_here b/models/text_encoders/put_text_encoder_files_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/unet/put_unet_files_here b/models/unet/put_unet_files_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/upscale_models/put_esrgan_and_other_upscale_models_here b/models/upscale_models/put_esrgan_and_other_upscale_models_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/vae/put_vae_here b/models/vae/put_vae_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/vae_approx/put_taesd_encoder_pth_and_taesd_decoder_pth_here b/models/vae_approx/put_taesd_encoder_pth_and_taesd_decoder_pth_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/new_updater.py b/new_updater.py new file mode 100644 index 0000000000000000000000000000000000000000..9a203acdd71f62b3b1122cb879c75344f5859c5d --- /dev/null +++ b/new_updater.py @@ -0,0 +1,35 @@ +import os +import shutil + +base_path = os.path.dirname(os.path.realpath(__file__)) + + +def update_windows_updater(): + top_path = os.path.dirname(base_path) + updater_path = os.path.join(base_path, ".ci/update_windows/update.py") + bat_path = os.path.join(base_path, ".ci/update_windows/update_comfyui.bat") + + dest_updater_path = os.path.join(top_path, "update/update.py") + dest_bat_path = os.path.join(top_path, "update/update_comfyui.bat") + dest_bat_deps_path = os.path.join(top_path, "update/update_comfyui_and_python_dependencies.bat") + + try: + with open(dest_bat_path, 'rb') as f: + contents = f.read() + except: + return + + if not contents.startswith(b"..\\python_embeded\\python.exe .\\update.py"): + return + + shutil.copy(updater_path, dest_updater_path) + try: + with open(dest_bat_deps_path, 'rb') as f: + contents = f.read() + contents = contents.replace(b'..\\python_embeded\\python.exe .\\update.py ..\\ComfyUI\\', b'call update_comfyui.bat nopause') + with open(dest_bat_deps_path, 'wb') as f: + f.write(contents) + except: + pass + shutil.copy(bat_path, dest_bat_path) + print("Updated the windows standalone package updater.") # noqa: T201 diff --git a/node_helpers.py b/node_helpers.py new file mode 100644 index 0000000000000000000000000000000000000000..4b38bfff809900c81e274d506c25648d842fc8a3 --- /dev/null +++ b/node_helpers.py @@ -0,0 +1,37 @@ +import hashlib + +from comfy.cli_args import args + +from PIL import ImageFile, UnidentifiedImageError + +def conditioning_set_values(conditioning, values={}): + c = [] + for t in conditioning: + n = [t[0], t[1].copy()] + for k in values: + n[1][k] = values[k] + c.append(n) + + return c + +def pillow(fn, arg): + prev_value = None + try: + x = fn(arg) + except (OSError, UnidentifiedImageError, ValueError): #PIL issues #4472 and #2445, also fixes ComfyUI issue #3416 + prev_value = ImageFile.LOAD_TRUNCATED_IMAGES + ImageFile.LOAD_TRUNCATED_IMAGES = True + x = fn(arg) + finally: + if prev_value is not None: + ImageFile.LOAD_TRUNCATED_IMAGES = prev_value + return x + +def hasher(): + hashfuncs = { + "md5": hashlib.md5, + "sha1": hashlib.sha1, + "sha256": hashlib.sha256, + "sha512": hashlib.sha512 + } + return hashfuncs[args.default_hashing_function] diff --git a/notebooks/comfyui_colab.ipynb b/notebooks/comfyui_colab.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..5560b5ff9c3757c7531da25211f1dc496ce3eef3 --- /dev/null +++ b/notebooks/comfyui_colab.ipynb @@ -0,0 +1,322 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "aaaaaaaaaa" + }, + "source": [ + "Git clone the repo and install the requirements. (ignore the pip errors about protobuf)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "bbbbbbbbbb" + }, + "outputs": [], + "source": [ + "#@title Environment Setup\n", + "\n", + "\n", + "OPTIONS = {}\n", + "\n", + "USE_GOOGLE_DRIVE = False #@param {type:\"boolean\"}\n", + "UPDATE_COMFY_UI = True #@param {type:\"boolean\"}\n", + "WORKSPACE = 'ComfyUI'\n", + "OPTIONS['USE_GOOGLE_DRIVE'] = USE_GOOGLE_DRIVE\n", + "OPTIONS['UPDATE_COMFY_UI'] = UPDATE_COMFY_UI\n", + "\n", + "if OPTIONS['USE_GOOGLE_DRIVE']:\n", + " !echo \"Mounting Google Drive...\"\n", + " %cd /\n", + " \n", + " from google.colab import drive\n", + " drive.mount('/content/drive')\n", + "\n", + " WORKSPACE = \"/content/drive/MyDrive/ComfyUI\"\n", + " %cd /content/drive/MyDrive\n", + "\n", + "![ ! -d $WORKSPACE ] && echo -= Initial setup ComfyUI =- && git clone https://github.com/comfyanonymous/ComfyUI\n", + "%cd $WORKSPACE\n", + "\n", + "if OPTIONS['UPDATE_COMFY_UI']:\n", + " !echo -= Updating ComfyUI =-\n", + " !git pull\n", + "\n", + "!echo -= Install dependencies =-\n", + "!pip install xformers!=0.0.18 -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu121 --extra-index-url https://download.pytorch.org/whl/cu118 --extra-index-url https://download.pytorch.org/whl/cu117" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cccccccccc" + }, + "source": [ + "Download some models/checkpoints/vae or custom comfyui nodes (uncomment the commands for the ones you want)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dddddddddd" + }, + "outputs": [], + "source": [ + "# Checkpoints\n", + "\n", + "### SDXL\n", + "### I recommend these workflow examples: https://comfyanonymous.github.io/ComfyUI_examples/sdxl/\n", + "\n", + "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors -P ./models/checkpoints/\n", + "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0.safetensors -P ./models/checkpoints/\n", + "\n", + "# SDXL ReVision\n", + "#!wget -c https://huggingface.co/comfyanonymous/clip_vision_g/resolve/main/clip_vision_g.safetensors -P ./models/clip_vision/\n", + "\n", + "# SD1.5\n", + "!wget -c https://huggingface.co/Comfy-Org/stable-diffusion-v1-5-archive/resolve/main/v1-5-pruned-emaonly-fp16.safetensors -P ./models/checkpoints/\n", + "\n", + "# SD2\n", + "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-2-1-base/resolve/main/v2-1_512-ema-pruned.safetensors -P ./models/checkpoints/\n", + "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.safetensors -P ./models/checkpoints/\n", + "\n", + "# Some SD1.5 anime style\n", + "#!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix2/AbyssOrangeMix2_hard.safetensors -P ./models/checkpoints/\n", + "#!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3A1_orangemixs.safetensors -P ./models/checkpoints/\n", + "#!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3A3_orangemixs.safetensors -P ./models/checkpoints/\n", + "#!wget -c https://huggingface.co/Linaqruf/anything-v3.0/resolve/main/anything-v3-fp16-pruned.safetensors -P ./models/checkpoints/\n", + "\n", + "# Waifu Diffusion 1.5 (anime style SD2.x 768-v)\n", + "#!wget -c https://huggingface.co/waifu-diffusion/wd-1-5-beta3/resolve/main/wd-illusion-fp16.safetensors -P ./models/checkpoints/\n", + "\n", + "\n", + "# unCLIP models\n", + "#!wget -c https://huggingface.co/comfyanonymous/illuminatiDiffusionV1_v11_unCLIP/resolve/main/illuminatiDiffusionV1_v11-unclip-h-fp16.safetensors -P ./models/checkpoints/\n", + "#!wget -c https://huggingface.co/comfyanonymous/wd-1.5-beta2_unCLIP/resolve/main/wd-1-5-beta2-aesthetic-unclip-h-fp16.safetensors -P ./models/checkpoints/\n", + "\n", + "\n", + "# VAE\n", + "!wget -c https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.safetensors -P ./models/vae/\n", + "#!wget -c https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/VAEs/orangemix.vae.pt -P ./models/vae/\n", + "#!wget -c https://huggingface.co/hakurei/waifu-diffusion-v1-4/resolve/main/vae/kl-f8-anime2.ckpt -P ./models/vae/\n", + "\n", + "\n", + "# Loras\n", + "#!wget -c https://civitai.com/api/download/models/10350 -O ./models/loras/theovercomer8sContrastFix_sd21768.safetensors #theovercomer8sContrastFix SD2.x 768-v\n", + "#!wget -c https://civitai.com/api/download/models/10638 -O ./models/loras/theovercomer8sContrastFix_sd15.safetensors #theovercomer8sContrastFix SD1.x\n", + "#!wget -c https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_offset_example-lora_1.0.safetensors -P ./models/loras/ #SDXL offset noise lora\n", + "\n", + "\n", + "# T2I-Adapter\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_depth_sd14v1.pth -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_seg_sd14v1.pth -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_sketch_sd14v1.pth -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_keypose_sd14v1.pth -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_openpose_sd14v1.pth -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_color_sd14v1.pth -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_canny_sd14v1.pth -P ./models/controlnet/\n", + "\n", + "# T2I Styles Model\n", + "#!wget -c https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_style_sd14v1.pth -P ./models/style_models/\n", + "\n", + "# CLIPVision model (needed for styles model)\n", + "#!wget -c https://huggingface.co/openai/clip-vit-large-patch14/resolve/main/pytorch_model.bin -O ./models/clip_vision/clip_vit14.bin\n", + "\n", + "\n", + "# ControlNet\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11e_sd15_ip2p_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11e_sd15_shuffle_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_canny_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11f1p_sd15_depth_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_inpaint_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_lineart_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_mlsd_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_normalbae_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_openpose_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_scribble_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_seg_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15_softedge_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11p_sd15s2_lineart_anime_fp16.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11u_sd15_tile_fp16.safetensors -P ./models/controlnet/\n", + "\n", + "# ControlNet SDXL\n", + "#!wget -c https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-canny-rank256.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-depth-rank256.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-recolor-rank256.safetensors -P ./models/controlnet/\n", + "#!wget -c https://huggingface.co/stabilityai/control-lora/resolve/main/control-LoRAs-rank256/control-lora-sketch-rank256.safetensors -P ./models/controlnet/\n", + "\n", + "# Controlnet Preprocessor nodes by Fannovel16\n", + "#!cd custom_nodes && git clone https://github.com/Fannovel16/comfy_controlnet_preprocessors; cd comfy_controlnet_preprocessors && python install.py\n", + "\n", + "\n", + "# GLIGEN\n", + "#!wget -c https://huggingface.co/comfyanonymous/GLIGEN_pruned_safetensors/resolve/main/gligen_sd14_textbox_pruned_fp16.safetensors -P ./models/gligen/\n", + "\n", + "\n", + "# ESRGAN upscale model\n", + "#!wget -c https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P ./models/upscale_models/\n", + "#!wget -c https://huggingface.co/sberbank-ai/Real-ESRGAN/resolve/main/RealESRGAN_x2.pth -P ./models/upscale_models/\n", + "#!wget -c https://huggingface.co/sberbank-ai/Real-ESRGAN/resolve/main/RealESRGAN_x4.pth -P ./models/upscale_models/\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kkkkkkkkkkkkkkk" + }, + "source": [ + "### Run ComfyUI with cloudflared (Recommended Way)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jjjjjjjjjjjjjj" + }, + "outputs": [], + "source": [ + "!wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb\n", + "!dpkg -i cloudflared-linux-amd64.deb\n", + "\n", + "import subprocess\n", + "import threading\n", + "import time\n", + "import socket\n", + "import urllib.request\n", + "\n", + "def iframe_thread(port):\n", + " while True:\n", + " time.sleep(0.5)\n", + " sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n", + " result = sock.connect_ex(('127.0.0.1', port))\n", + " if result == 0:\n", + " break\n", + " sock.close()\n", + " print(\"\\nComfyUI finished loading, trying to launch cloudflared (if it gets stuck here cloudflared is having issues)\\n\")\n", + "\n", + " p = subprocess.Popen([\"cloudflared\", \"tunnel\", \"--url\", \"http://127.0.0.1:{}\".format(port)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n", + " for line in p.stderr:\n", + " l = line.decode()\n", + " if \"trycloudflare.com \" in l:\n", + " print(\"This is the URL to access ComfyUI:\", l[l.find(\"http\"):], end='')\n", + " #print(l, end='')\n", + "\n", + "\n", + "threading.Thread(target=iframe_thread, daemon=True, args=(8188,)).start()\n", + "\n", + "!python main.py --dont-print-server" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kkkkkkkkkkkkkk" + }, + "source": [ + "### Run ComfyUI with localtunnel\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jjjjjjjjjjjjj" + }, + "outputs": [], + "source": [ + "!npm install -g localtunnel\n", + "\n", + "import threading\n", + "\n", + "def iframe_thread(port):\n", + " while True:\n", + " time.sleep(0.5)\n", + " sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n", + " result = sock.connect_ex(('127.0.0.1', port))\n", + " if result == 0:\n", + " break\n", + " sock.close()\n", + " print(\"\\nComfyUI finished loading, trying to launch localtunnel (if it gets stuck here localtunnel is having issues)\\n\")\n", + "\n", + " print(\"The password/enpoint ip for localtunnel is:\", urllib.request.urlopen('https://ipv4.icanhazip.com').read().decode('utf8').strip(\"\\n\"))\n", + " p = subprocess.Popen([\"lt\", \"--port\", \"{}\".format(port)], stdout=subprocess.PIPE)\n", + " for line in p.stdout:\n", + " print(line.decode(), end='')\n", + "\n", + "\n", + "threading.Thread(target=iframe_thread, daemon=True, args=(8188,)).start()\n", + "\n", + "!python main.py --dont-print-server" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "gggggggggg" + }, + "source": [ + "### Run ComfyUI with colab iframe (use only in case the previous way with localtunnel doesn't work)\n", + "\n", + "You should see the ui appear in an iframe. If you get a 403 error, it's your firefox settings or an extension that's messing things up.\n", + "\n", + "If you want to open it in another window use the link.\n", + "\n", + "Note that some UI features like live image previews won't work because the colab iframe blocks websockets." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "hhhhhhhhhh" + }, + "outputs": [], + "source": [ + "import threading\n", + "def iframe_thread(port):\n", + " while True:\n", + " time.sleep(0.5)\n", + " sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n", + " result = sock.connect_ex(('127.0.0.1', port))\n", + " if result == 0:\n", + " break\n", + " sock.close()\n", + " from google.colab import output\n", + " output.serve_kernel_port_as_iframe(port, height=1024)\n", + " print(\"to open it in a window you can open this link here:\")\n", + " output.serve_kernel_port_as_window(port)\n", + "\n", + "threading.Thread(target=iframe_thread, daemon=True, args=(8188,)).start()\n", + "\n", + "!python main.py --dont-print-server" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "provenance": [] + }, + "gpuClass": "standard", + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/output/_output_images_will_be_put_here b/output/_output_images_will_be_put_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/script_examples/basic_api_example.py b/script_examples/basic_api_example.py new file mode 100644 index 0000000000000000000000000000000000000000..c916e6cb98909b0178b2783144c2d15693be9485 --- /dev/null +++ b/script_examples/basic_api_example.py @@ -0,0 +1,119 @@ +import json +from urllib import request + +#This is the ComfyUI api prompt format. + +#If you want it for a specific workflow you can "enable dev mode options" +#in the settings of the UI (gear beside the "Queue Size: ") this will enable +#a button on the UI to save workflows in api format. + +#keep in mind ComfyUI is pre alpha software so this format will change a bit. + +#this is the one for the default workflow +prompt_text = """ +{ + "3": { + "class_type": "KSampler", + "inputs": { + "cfg": 8, + "denoise": 1, + "latent_image": [ + "5", + 0 + ], + "model": [ + "4", + 0 + ], + "negative": [ + "7", + 0 + ], + "positive": [ + "6", + 0 + ], + "sampler_name": "euler", + "scheduler": "normal", + "seed": 8566257, + "steps": 20 + } + }, + "4": { + "class_type": "CheckpointLoaderSimple", + "inputs": { + "ckpt_name": "v1-5-pruned-emaonly.safetensors" + } + }, + "5": { + "class_type": "EmptyLatentImage", + "inputs": { + "batch_size": 1, + "height": 512, + "width": 512 + } + }, + "6": { + "class_type": "CLIPTextEncode", + "inputs": { + "clip": [ + "4", + 1 + ], + "text": "masterpiece best quality girl" + } + }, + "7": { + "class_type": "CLIPTextEncode", + "inputs": { + "clip": [ + "4", + 1 + ], + "text": "bad hands" + } + }, + "8": { + "class_type": "VAEDecode", + "inputs": { + "samples": [ + "3", + 0 + ], + "vae": [ + "4", + 2 + ] + } + }, + "9": { + "class_type": "SaveImage", + "inputs": { + "filename_prefix": "ComfyUI", + "images": [ + "8", + 0 + ] + } + } +} +""" + +def queue_prompt(prompt): + p = {"prompt": prompt} + data = json.dumps(p).encode('utf-8') + req = request.Request("http://127.0.0.1:8188/prompt", data=data) + request.urlopen(req) + + +prompt = json.loads(prompt_text) +#set the text prompt for our positive CLIPTextEncode +prompt["6"]["inputs"]["text"] = "masterpiece best quality man" + +#set the seed for our KSampler node +prompt["3"]["inputs"]["seed"] = 5 + + +queue_prompt(prompt) + + diff --git a/script_examples/websockets_api_example.py b/script_examples/websockets_api_example.py new file mode 100644 index 0000000000000000000000000000000000000000..d696d2bba2c8518808567afac751f6c25913594d --- /dev/null +++ b/script_examples/websockets_api_example.py @@ -0,0 +1,166 @@ +#This is an example that uses the websockets api to know when a prompt execution is done +#Once the prompt execution is done it downloads the images using the /history endpoint + +import websocket #NOTE: websocket-client (https://github.com/websocket-client/websocket-client) +import uuid +import json +import urllib.request +import urllib.parse + +server_address = "127.0.0.1:8188" +client_id = str(uuid.uuid4()) + +def queue_prompt(prompt): + p = {"prompt": prompt, "client_id": client_id} + data = json.dumps(p).encode('utf-8') + req = urllib.request.Request("http://{}/prompt".format(server_address), data=data) + return json.loads(urllib.request.urlopen(req).read()) + +def get_image(filename, subfolder, folder_type): + data = {"filename": filename, "subfolder": subfolder, "type": folder_type} + url_values = urllib.parse.urlencode(data) + with urllib.request.urlopen("http://{}/view?{}".format(server_address, url_values)) as response: + return response.read() + +def get_history(prompt_id): + with urllib.request.urlopen("http://{}/history/{}".format(server_address, prompt_id)) as response: + return json.loads(response.read()) + +def get_images(ws, prompt): + prompt_id = queue_prompt(prompt)['prompt_id'] + output_images = {} + while True: + out = ws.recv() + if isinstance(out, str): + message = json.loads(out) + if message['type'] == 'executing': + data = message['data'] + if data['node'] is None and data['prompt_id'] == prompt_id: + break #Execution is done + else: + # If you want to be able to decode the binary stream for latent previews, here is how you can do it: + # bytesIO = BytesIO(out[8:]) + # preview_image = Image.open(bytesIO) # This is your preview in PIL image format, store it in a global + continue #previews are binary data + + history = get_history(prompt_id)[prompt_id] + for node_id in history['outputs']: + node_output = history['outputs'][node_id] + images_output = [] + if 'images' in node_output: + for image in node_output['images']: + image_data = get_image(image['filename'], image['subfolder'], image['type']) + images_output.append(image_data) + output_images[node_id] = images_output + + return output_images + +prompt_text = """ +{ + "3": { + "class_type": "KSampler", + "inputs": { + "cfg": 8, + "denoise": 1, + "latent_image": [ + "5", + 0 + ], + "model": [ + "4", + 0 + ], + "negative": [ + "7", + 0 + ], + "positive": [ + "6", + 0 + ], + "sampler_name": "euler", + "scheduler": "normal", + "seed": 8566257, + "steps": 20 + } + }, + "4": { + "class_type": "CheckpointLoaderSimple", + "inputs": { + "ckpt_name": "v1-5-pruned-emaonly.safetensors" + } + }, + "5": { + "class_type": "EmptyLatentImage", + "inputs": { + "batch_size": 1, + "height": 512, + "width": 512 + } + }, + "6": { + "class_type": "CLIPTextEncode", + "inputs": { + "clip": [ + "4", + 1 + ], + "text": "masterpiece best quality girl" + } + }, + "7": { + "class_type": "CLIPTextEncode", + "inputs": { + "clip": [ + "4", + 1 + ], + "text": "bad hands" + } + }, + "8": { + "class_type": "VAEDecode", + "inputs": { + "samples": [ + "3", + 0 + ], + "vae": [ + "4", + 2 + ] + } + }, + "9": { + "class_type": "SaveImage", + "inputs": { + "filename_prefix": "ComfyUI", + "images": [ + "8", + 0 + ] + } + } +} +""" + +prompt = json.loads(prompt_text) +#set the text prompt for our positive CLIPTextEncode +prompt["6"]["inputs"]["text"] = "masterpiece best quality man" + +#set the seed for our KSampler node +prompt["3"]["inputs"]["seed"] = 5 + +ws = websocket.WebSocket() +ws.connect("ws://{}/ws?clientId={}".format(server_address, client_id)) +images = get_images(ws, prompt) +ws.close() # for in case this example is used in an environment where it will be repeatedly called, like in a Gradio app. otherwise, you'll randomly receive connection timeouts +#Commented out code to display the output images: + +# for node_id in images: +# for image_data in images[node_id]: +# from PIL import Image +# import io +# image = Image.open(io.BytesIO(image_data)) +# image.show() + diff --git a/script_examples/websockets_api_example_ws_images.py b/script_examples/websockets_api_example_ws_images.py new file mode 100644 index 0000000000000000000000000000000000000000..6508ecc99e732f75c2489e3cddb42229de2d356a --- /dev/null +++ b/script_examples/websockets_api_example_ws_images.py @@ -0,0 +1,159 @@ +#This is an example that uses the websockets api and the SaveImageWebsocket node to get images directly without +#them being saved to disk + +import websocket #NOTE: websocket-client (https://github.com/websocket-client/websocket-client) +import uuid +import json +import urllib.request +import urllib.parse + +server_address = "127.0.0.1:8188" +client_id = str(uuid.uuid4()) + +def queue_prompt(prompt): + p = {"prompt": prompt, "client_id": client_id} + data = json.dumps(p).encode('utf-8') + req = urllib.request.Request("http://{}/prompt".format(server_address), data=data) + return json.loads(urllib.request.urlopen(req).read()) + +def get_image(filename, subfolder, folder_type): + data = {"filename": filename, "subfolder": subfolder, "type": folder_type} + url_values = urllib.parse.urlencode(data) + with urllib.request.urlopen("http://{}/view?{}".format(server_address, url_values)) as response: + return response.read() + +def get_history(prompt_id): + with urllib.request.urlopen("http://{}/history/{}".format(server_address, prompt_id)) as response: + return json.loads(response.read()) + +def get_images(ws, prompt): + prompt_id = queue_prompt(prompt)['prompt_id'] + output_images = {} + current_node = "" + while True: + out = ws.recv() + if isinstance(out, str): + message = json.loads(out) + if message['type'] == 'executing': + data = message['data'] + if data['prompt_id'] == prompt_id: + if data['node'] is None: + break #Execution is done + else: + current_node = data['node'] + else: + if current_node == 'save_image_websocket_node': + images_output = output_images.get(current_node, []) + images_output.append(out[8:]) + output_images[current_node] = images_output + + return output_images + +prompt_text = """ +{ + "3": { + "class_type": "KSampler", + "inputs": { + "cfg": 8, + "denoise": 1, + "latent_image": [ + "5", + 0 + ], + "model": [ + "4", + 0 + ], + "negative": [ + "7", + 0 + ], + "positive": [ + "6", + 0 + ], + "sampler_name": "euler", + "scheduler": "normal", + "seed": 8566257, + "steps": 20 + } + }, + "4": { + "class_type": "CheckpointLoaderSimple", + "inputs": { + "ckpt_name": "v1-5-pruned-emaonly.safetensors" + } + }, + "5": { + "class_type": "EmptyLatentImage", + "inputs": { + "batch_size": 1, + "height": 512, + "width": 512 + } + }, + "6": { + "class_type": "CLIPTextEncode", + "inputs": { + "clip": [ + "4", + 1 + ], + "text": "masterpiece best quality girl" + } + }, + "7": { + "class_type": "CLIPTextEncode", + "inputs": { + "clip": [ + "4", + 1 + ], + "text": "bad hands" + } + }, + "8": { + "class_type": "VAEDecode", + "inputs": { + "samples": [ + "3", + 0 + ], + "vae": [ + "4", + 2 + ] + } + }, + "save_image_websocket_node": { + "class_type": "SaveImageWebsocket", + "inputs": { + "images": [ + "8", + 0 + ] + } + } +} +""" + +prompt = json.loads(prompt_text) +#set the text prompt for our positive CLIPTextEncode +prompt["6"]["inputs"]["text"] = "masterpiece best quality man" + +#set the seed for our KSampler node +prompt["3"]["inputs"]["seed"] = 5 + +ws = websocket.WebSocket() +ws.connect("ws://{}/ws?clientId={}".format(server_address, client_id)) +images = get_images(ws, prompt) +ws.close() # for in case this example is used in an environment where it will be repeatedly called, like in a Gradio app. otherwise, you'll randomly receive connection timeouts +#Commented out code to display the output images: + +# for node_id in images: +# for image_data in images[node_id]: +# from PIL import Image +# import io +# image = Image.open(io.BytesIO(image_data)) +# image.show() + diff --git a/tests-unit/README.md b/tests-unit/README.md new file mode 100644 index 0000000000000000000000000000000000000000..81692b8f1de8c74fd058e627d10dbd0fc2821257 --- /dev/null +++ b/tests-unit/README.md @@ -0,0 +1,8 @@ +# Pytest Unit Tests + +## Install test dependencies + +`pip install -r tests-unit/requirements.txt` + +## Run tests +`pytest tests-unit/` diff --git a/tests-unit/app_test/__init__.py b/tests-unit/app_test/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests-unit/app_test/custom_node_manager_test.py b/tests-unit/app_test/custom_node_manager_test.py new file mode 100644 index 0000000000000000000000000000000000000000..b61e25e54e657609b3970358d6ff3354ff8f5a8e --- /dev/null +++ b/tests-unit/app_test/custom_node_manager_test.py @@ -0,0 +1,147 @@ +import pytest +from aiohttp import web +from unittest.mock import patch +from app.custom_node_manager import CustomNodeManager +import json + +pytestmark = ( + pytest.mark.asyncio +) # This applies the asyncio mark to all test functions in the module + + +@pytest.fixture +def custom_node_manager(): + return CustomNodeManager() + + +@pytest.fixture +def app(custom_node_manager): + app = web.Application() + routes = web.RouteTableDef() + custom_node_manager.add_routes( + routes, app, [("ComfyUI-TestExtension1", "ComfyUI-TestExtension1")] + ) + app.add_routes(routes) + return app + + +async def test_get_workflow_templates(aiohttp_client, app, tmp_path): + client = await aiohttp_client(app) + # Setup temporary custom nodes file structure with 1 workflow file + custom_nodes_dir = tmp_path / "custom_nodes" + example_workflows_dir = ( + custom_nodes_dir / "ComfyUI-TestExtension1" / "example_workflows" + ) + example_workflows_dir.mkdir(parents=True) + template_file = example_workflows_dir / "workflow1.json" + template_file.write_text("") + + with patch( + "folder_paths.folder_names_and_paths", + {"custom_nodes": ([str(custom_nodes_dir)], None)}, + ): + response = await client.get("/workflow_templates") + assert response.status == 200 + workflows_dict = await response.json() + assert isinstance(workflows_dict, dict) + assert "ComfyUI-TestExtension1" in workflows_dict + assert isinstance(workflows_dict["ComfyUI-TestExtension1"], list) + assert workflows_dict["ComfyUI-TestExtension1"][0] == "workflow1" + + +async def test_build_translations_empty_when_no_locales(custom_node_manager, tmp_path): + custom_nodes_dir = tmp_path / "custom_nodes" + custom_nodes_dir.mkdir(parents=True) + + with patch("folder_paths.get_folder_paths", return_value=[str(custom_nodes_dir)]): + translations = custom_node_manager.build_translations() + assert translations == {} + + +async def test_build_translations_loads_all_files(custom_node_manager, tmp_path): + # Setup test directory structure + custom_nodes_dir = tmp_path / "custom_nodes" / "test-extension" + locales_dir = custom_nodes_dir / "locales" / "en" + locales_dir.mkdir(parents=True) + + # Create test translation files + main_content = {"title": "Test Extension"} + (locales_dir / "main.json").write_text(json.dumps(main_content)) + + node_defs = {"node1": "Node 1"} + (locales_dir / "nodeDefs.json").write_text(json.dumps(node_defs)) + + commands = {"cmd1": "Command 1"} + (locales_dir / "commands.json").write_text(json.dumps(commands)) + + settings = {"setting1": "Setting 1"} + (locales_dir / "settings.json").write_text(json.dumps(settings)) + + with patch( + "folder_paths.get_folder_paths", return_value=[tmp_path / "custom_nodes"] + ): + translations = custom_node_manager.build_translations() + + assert translations == { + "en": { + "title": "Test Extension", + "nodeDefs": {"node1": "Node 1"}, + "commands": {"cmd1": "Command 1"}, + "settings": {"setting1": "Setting 1"}, + } + } + + +async def test_build_translations_handles_invalid_json(custom_node_manager, tmp_path): + # Setup test directory structure + custom_nodes_dir = tmp_path / "custom_nodes" / "test-extension" + locales_dir = custom_nodes_dir / "locales" / "en" + locales_dir.mkdir(parents=True) + + # Create valid main.json + main_content = {"title": "Test Extension"} + (locales_dir / "main.json").write_text(json.dumps(main_content)) + + # Create invalid JSON file + (locales_dir / "nodeDefs.json").write_text("invalid json{") + + with patch( + "folder_paths.get_folder_paths", return_value=[tmp_path / "custom_nodes"] + ): + translations = custom_node_manager.build_translations() + + assert translations == { + "en": { + "title": "Test Extension", + } + } + + +async def test_build_translations_merges_multiple_extensions( + custom_node_manager, tmp_path +): + # Setup test directory structure for two extensions + custom_nodes_dir = tmp_path / "custom_nodes" + ext1_dir = custom_nodes_dir / "extension1" / "locales" / "en" + ext2_dir = custom_nodes_dir / "extension2" / "locales" / "en" + ext1_dir.mkdir(parents=True) + ext2_dir.mkdir(parents=True) + + # Create translation files for extension 1 + ext1_main = {"title": "Extension 1", "shared": "Original"} + (ext1_dir / "main.json").write_text(json.dumps(ext1_main)) + + # Create translation files for extension 2 + ext2_main = {"description": "Extension 2", "shared": "Override"} + (ext2_dir / "main.json").write_text(json.dumps(ext2_main)) + + with patch("folder_paths.get_folder_paths", return_value=[str(custom_nodes_dir)]): + translations = custom_node_manager.build_translations() + + assert translations == { + "en": { + "title": "Extension 1", + "description": "Extension 2", + "shared": "Override", # Second extension should override first + } + } diff --git a/tests-unit/app_test/frontend_manager_test.py b/tests-unit/app_test/frontend_manager_test.py new file mode 100644 index 0000000000000000000000000000000000000000..a8df5248461404d5934d3f7690bf1eeabaaf501b --- /dev/null +++ b/tests-unit/app_test/frontend_manager_test.py @@ -0,0 +1,130 @@ +import argparse +import pytest +from requests.exceptions import HTTPError +from unittest.mock import patch + +from app.frontend_management import ( + FrontendManager, + FrontEndProvider, + Release, +) +from comfy.cli_args import DEFAULT_VERSION_STRING + + +@pytest.fixture +def mock_releases(): + return [ + Release( + id=1, + tag_name="1.0.0", + name="Release 1.0.0", + prerelease=False, + created_at="2022-01-01T00:00:00Z", + published_at="2022-01-01T00:00:00Z", + body="Release notes for 1.0.0", + assets=[{"name": "dist.zip", "url": "https://example.com/dist.zip"}], + ), + Release( + id=2, + tag_name="2.0.0", + name="Release 2.0.0", + prerelease=False, + created_at="2022-02-01T00:00:00Z", + published_at="2022-02-01T00:00:00Z", + body="Release notes for 2.0.0", + assets=[{"name": "dist.zip", "url": "https://example.com/dist.zip"}], + ), + ] + + +@pytest.fixture +def mock_provider(mock_releases): + provider = FrontEndProvider( + owner="test-owner", + repo="test-repo", + ) + provider.all_releases = mock_releases + provider.latest_release = mock_releases[1] + FrontendManager.PROVIDERS = [provider] + return provider + + +def test_get_release(mock_provider, mock_releases): + version = "1.0.0" + release = mock_provider.get_release(version) + assert release == mock_releases[0] + + +def test_get_release_latest(mock_provider, mock_releases): + version = "latest" + release = mock_provider.get_release(version) + assert release == mock_releases[1] + + +def test_get_release_invalid_version(mock_provider): + version = "invalid" + with pytest.raises(ValueError): + mock_provider.get_release(version) + + +def test_init_frontend_default(): + version_string = DEFAULT_VERSION_STRING + frontend_path = FrontendManager.init_frontend(version_string) + assert frontend_path == FrontendManager.DEFAULT_FRONTEND_PATH + + +def test_init_frontend_invalid_version(): + version_string = "test-owner/test-repo@1.100.99" + with pytest.raises(HTTPError): + FrontendManager.init_frontend_unsafe(version_string) + + +def test_init_frontend_invalid_provider(): + version_string = "invalid/invalid@latest" + with pytest.raises(HTTPError): + FrontendManager.init_frontend_unsafe(version_string) + +@pytest.fixture +def mock_os_functions(): + with patch('app.frontend_management.os.makedirs') as mock_makedirs, \ + patch('app.frontend_management.os.listdir') as mock_listdir, \ + patch('app.frontend_management.os.rmdir') as mock_rmdir: + mock_listdir.return_value = [] # Simulate empty directory + yield mock_makedirs, mock_listdir, mock_rmdir + +@pytest.fixture +def mock_download(): + with patch('app.frontend_management.download_release_asset_zip') as mock: + mock.side_effect = Exception("Download failed") # Simulate download failure + yield mock + +def test_finally_block(mock_os_functions, mock_download, mock_provider): + # Arrange + mock_makedirs, mock_listdir, mock_rmdir = mock_os_functions + version_string = 'test-owner/test-repo@1.0.0' + + # Act & Assert + with pytest.raises(Exception): + FrontendManager.init_frontend_unsafe(version_string, mock_provider) + + # Assert + mock_makedirs.assert_called_once() + mock_download.assert_called_once() + mock_listdir.assert_called_once() + mock_rmdir.assert_called_once() + + +def test_parse_version_string(): + version_string = "owner/repo@1.0.0" + repo_owner, repo_name, version = FrontendManager.parse_version_string( + version_string + ) + assert repo_owner == "owner" + assert repo_name == "repo" + assert version == "1.0.0" + + +def test_parse_version_string_invalid(): + version_string = "invalid" + with pytest.raises(argparse.ArgumentTypeError): + FrontendManager.parse_version_string(version_string) diff --git a/tests-unit/app_test/model_manager_test.py b/tests-unit/app_test/model_manager_test.py new file mode 100644 index 0000000000000000000000000000000000000000..ae59206f65639ca1749b1cf7b6903ebab18fb298 --- /dev/null +++ b/tests-unit/app_test/model_manager_test.py @@ -0,0 +1,62 @@ +import pytest +import base64 +import json +import struct +from io import BytesIO +from PIL import Image +from aiohttp import web +from unittest.mock import patch +from app.model_manager import ModelFileManager + +pytestmark = ( + pytest.mark.asyncio +) # This applies the asyncio mark to all test functions in the module + +@pytest.fixture +def model_manager(): + return ModelFileManager() + +@pytest.fixture +def app(model_manager): + app = web.Application() + routes = web.RouteTableDef() + model_manager.add_routes(routes) + app.add_routes(routes) + return app + +async def test_get_model_preview_safetensors(aiohttp_client, app, tmp_path): + img = Image.new('RGB', (100, 100), 'white') + img_byte_arr = BytesIO() + img.save(img_byte_arr, format='PNG') + img_byte_arr.seek(0) + img_b64 = base64.b64encode(img_byte_arr.getvalue()).decode('utf-8') + + safetensors_file = tmp_path / "test_model.safetensors" + header_bytes = json.dumps({ + "__metadata__": { + "ssmd_cover_images": json.dumps([img_b64]) + } + }).encode('utf-8') + length_bytes = struct.pack(' bool: + if self == "*" or value == "*": + return False + if self == "LONGER_THAN_2": + return not len(value) > 2 + raise TypeError("This is a class for unit tests only.") + + +def test_ne_override(): + """Test ``__ne__`` any override""" + any = NotEqualsOverrideTest("*") + invalid_type = "INVALID_TYPE" + obj = object() + assert validate_node_input(any, any) + assert validate_node_input(any, invalid_type) + assert validate_node_input(any, obj) + assert validate_node_input(any, {}) + assert validate_node_input(any, []) + assert validate_node_input(any, [1, 2, 3]) + + +def test_ne_custom_override(): + """Test ``__ne__`` custom override""" + special = NotEqualsOverrideTest("LONGER_THAN_2") + + assert validate_node_input(special, special) + assert validate_node_input(special, "*") + assert validate_node_input(special, "INVALID_TYPE") + assert validate_node_input(special, [1, 2, 3]) + + # Should fail + assert not validate_node_input(special, [1, 2]) + assert not validate_node_input(special, "TY") + + +@pytest.mark.parametrize( + "received,input_type,strict,expected", + [ + ("STRING", "STRING", False, True), + ("STRING,INT", "STRING,INT", False, True), + ("STRING", "STRING,INT", True, True), + ("STRING,INT", "STRING", True, False), + ("BOOLEAN", "STRING,INT", False, False), + ("STRING,BOOLEAN", "STRING,INT", False, True), + ], +) +def test_parametrized_cases(received, input_type, strict, expected): + """Parametrized test cases for various scenarios""" + assert validate_node_input(received, input_type, strict) == expected diff --git a/tests-unit/folder_paths_test/__init__.py b/tests-unit/folder_paths_test/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests-unit/folder_paths_test/filter_by_content_types_test.py b/tests-unit/folder_paths_test/filter_by_content_types_test.py new file mode 100644 index 0000000000000000000000000000000000000000..423677a6009591da2137b9f82414a27c930c9c66 --- /dev/null +++ b/tests-unit/folder_paths_test/filter_by_content_types_test.py @@ -0,0 +1,52 @@ +import pytest +import os +import tempfile +from folder_paths import filter_files_content_types + +@pytest.fixture(scope="module") +def file_extensions(): + return { + 'image': ['gif', 'heif', 'ico', 'jpeg', 'jpg', 'png', 'pnm', 'ppm', 'svg', 'tiff', 'webp', 'xbm', 'xpm'], + 'audio': ['aif', 'aifc', 'aiff', 'au', 'flac', 'm4a', 'mp2', 'mp3', 'ogg', 'snd', 'wav'], + 'video': ['avi', 'm2v', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'ogv', 'qt', 'webm', 'wmv'] + } + + +@pytest.fixture(scope="module") +def mock_dir(file_extensions): + with tempfile.TemporaryDirectory() as directory: + for content_type, extensions in file_extensions.items(): + for extension in extensions: + with open(f"{directory}/sample_{content_type}.{extension}", "w") as f: + f.write(f"Sample {content_type} file in {extension} format") + yield directory + + +def test_categorizes_all_correctly(mock_dir, file_extensions): + files = os.listdir(mock_dir) + for content_type, extensions in file_extensions.items(): + filtered_files = filter_files_content_types(files, [content_type]) + for extension in extensions: + assert f"sample_{content_type}.{extension}" in filtered_files + + +def test_categorizes_all_uniquely(mock_dir, file_extensions): + files = os.listdir(mock_dir) + for content_type, extensions in file_extensions.items(): + filtered_files = filter_files_content_types(files, [content_type]) + assert len(filtered_files) == len(extensions) + + +def test_handles_bad_extensions(): + files = ["file1.txt", "file2.py", "file3.example", "file4.pdf", "file5.ini", "file6.doc", "file7.md"] + assert filter_files_content_types(files, ["image", "audio", "video"]) == [] + + +def test_handles_no_extension(): + files = ["file1", "file2", "file3", "file4", "file5", "file6", "file7"] + assert filter_files_content_types(files, ["image", "audio", "video"]) == [] + + +def test_handles_no_files(): + files = [] + assert filter_files_content_types(files, ["image", "audio", "video"]) == [] diff --git a/tests-unit/prompt_server_test/__init__.py b/tests-unit/prompt_server_test/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests-unit/prompt_server_test/user_manager_test.py b/tests-unit/prompt_server_test/user_manager_test.py new file mode 100644 index 0000000000000000000000000000000000000000..7e523cbf486c9bf650262f743369ddedda4feb9f --- /dev/null +++ b/tests-unit/prompt_server_test/user_manager_test.py @@ -0,0 +1,231 @@ +import pytest +import os +from aiohttp import web +from app.user_manager import UserManager +from unittest.mock import patch + +pytestmark = ( + pytest.mark.asyncio +) # This applies the asyncio mark to all test functions in the module + + +@pytest.fixture +def user_manager(tmp_path): + um = UserManager() + um.get_request_user_filepath = lambda req, file, **kwargs: os.path.join( + tmp_path, file + ) if file else tmp_path + return um + + +@pytest.fixture +def app(user_manager): + app = web.Application() + routes = web.RouteTableDef() + user_manager.add_routes(routes) + app.add_routes(routes) + return app + + +async def test_listuserdata_empty_directory(aiohttp_client, app, tmp_path): + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=test_dir") + assert resp.status == 404 + + +async def test_listuserdata_with_files(aiohttp_client, app, tmp_path): + os.makedirs(tmp_path / "test_dir") + with open(tmp_path / "test_dir" / "file1.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=test_dir") + assert resp.status == 200 + assert await resp.json() == ["file1.txt"] + + +async def test_listuserdata_recursive(aiohttp_client, app, tmp_path): + os.makedirs(tmp_path / "test_dir" / "subdir") + with open(tmp_path / "test_dir" / "file1.txt", "w") as f: + f.write("test content") + with open(tmp_path / "test_dir" / "subdir" / "file2.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=test_dir&recurse=true") + assert resp.status == 200 + assert set(await resp.json()) == {"file1.txt", "subdir/file2.txt"} + + +async def test_listuserdata_full_info(aiohttp_client, app, tmp_path): + os.makedirs(tmp_path / "test_dir") + with open(tmp_path / "test_dir" / "file1.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=test_dir&full_info=true") + assert resp.status == 200 + result = await resp.json() + assert len(result) == 1 + assert result[0]["path"] == "file1.txt" + assert "size" in result[0] + assert "modified" in result[0] + + +async def test_listuserdata_split_path(aiohttp_client, app, tmp_path): + os.makedirs(tmp_path / "test_dir" / "subdir") + with open(tmp_path / "test_dir" / "subdir" / "file1.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=test_dir&recurse=true&split=true") + assert resp.status == 200 + assert await resp.json() == [["subdir/file1.txt", "subdir", "file1.txt"]] + + +async def test_listuserdata_invalid_directory(aiohttp_client, app): + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=") + assert resp.status == 400 + + +async def test_listuserdata_normalized_separator(aiohttp_client, app, tmp_path): + os_sep = "\\" + with patch("os.sep", os_sep): + with patch("os.path.sep", os_sep): + os.makedirs(tmp_path / "test_dir" / "subdir") + with open(tmp_path / "test_dir" / "subdir" / "file1.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.get("/userdata?dir=test_dir&recurse=true") + assert resp.status == 200 + result = await resp.json() + assert len(result) == 1 + assert "/" in result[0] # Ensure forward slash is used + assert "\\" not in result[0] # Ensure backslash is not present + assert result[0] == "subdir/file1.txt" + + # Test with full_info + resp = await client.get( + "/userdata?dir=test_dir&recurse=true&full_info=true" + ) + assert resp.status == 200 + result = await resp.json() + assert len(result) == 1 + assert "/" in result[0]["path"] # Ensure forward slash is used + assert "\\" not in result[0]["path"] # Ensure backslash is not present + assert result[0]["path"] == "subdir/file1.txt" + + +async def test_post_userdata_new_file(aiohttp_client, app, tmp_path): + client = await aiohttp_client(app) + content = b"test content" + resp = await client.post("/userdata/test.txt", data=content) + + assert resp.status == 200 + assert await resp.text() == '"test.txt"' + + # Verify file was created with correct content + with open(tmp_path / "test.txt", "rb") as f: + assert f.read() == content + + +async def test_post_userdata_overwrite_existing(aiohttp_client, app, tmp_path): + # Create initial file + with open(tmp_path / "test.txt", "w") as f: + f.write("initial content") + + client = await aiohttp_client(app) + new_content = b"updated content" + resp = await client.post("/userdata/test.txt", data=new_content) + + assert resp.status == 200 + assert await resp.text() == '"test.txt"' + + # Verify file was overwritten + with open(tmp_path / "test.txt", "rb") as f: + assert f.read() == new_content + + +async def test_post_userdata_no_overwrite(aiohttp_client, app, tmp_path): + # Create initial file + with open(tmp_path / "test.txt", "w") as f: + f.write("initial content") + + client = await aiohttp_client(app) + resp = await client.post("/userdata/test.txt?overwrite=false", data=b"new content") + + assert resp.status == 409 + + # Verify original content unchanged + with open(tmp_path / "test.txt", "r") as f: + assert f.read() == "initial content" + + +async def test_post_userdata_full_info(aiohttp_client, app, tmp_path): + client = await aiohttp_client(app) + content = b"test content" + resp = await client.post("/userdata/test.txt?full_info=true", data=content) + + assert resp.status == 200 + result = await resp.json() + assert result["path"] == "test.txt" + assert result["size"] == len(content) + assert "modified" in result + + +async def test_move_userdata(aiohttp_client, app, tmp_path): + # Create initial file + with open(tmp_path / "source.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.post("/userdata/source.txt/move/dest.txt") + + assert resp.status == 200 + assert await resp.text() == '"dest.txt"' + + # Verify file was moved + assert not os.path.exists(tmp_path / "source.txt") + with open(tmp_path / "dest.txt", "r") as f: + assert f.read() == "test content" + + +async def test_move_userdata_no_overwrite(aiohttp_client, app, tmp_path): + # Create source and destination files + with open(tmp_path / "source.txt", "w") as f: + f.write("source content") + with open(tmp_path / "dest.txt", "w") as f: + f.write("destination content") + + client = await aiohttp_client(app) + resp = await client.post("/userdata/source.txt/move/dest.txt?overwrite=false") + + assert resp.status == 409 + + # Verify files remain unchanged + with open(tmp_path / "source.txt", "r") as f: + assert f.read() == "source content" + with open(tmp_path / "dest.txt", "r") as f: + assert f.read() == "destination content" + + +async def test_move_userdata_full_info(aiohttp_client, app, tmp_path): + # Create initial file + with open(tmp_path / "source.txt", "w") as f: + f.write("test content") + + client = await aiohttp_client(app) + resp = await client.post("/userdata/source.txt/move/dest.txt?full_info=true") + + assert resp.status == 200 + result = await resp.json() + assert result["path"] == "dest.txt" + assert result["size"] == len("test content") + assert "modified" in result + + # Verify file was moved + assert not os.path.exists(tmp_path / "source.txt") + with open(tmp_path / "dest.txt", "r") as f: + assert f.read() == "test content" diff --git a/tests-unit/requirements.txt b/tests-unit/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..d70d00f4ba2315c2c8233f5dadfc398ea87f5259 --- /dev/null +++ b/tests-unit/requirements.txt @@ -0,0 +1,3 @@ +pytest>=7.8.0 +pytest-aiohttp +pytest-asyncio diff --git a/tests-unit/server/routes/internal_routes_test.py b/tests-unit/server/routes/internal_routes_test.py new file mode 100644 index 0000000000000000000000000000000000000000..68c8466521ae4bffbb2512d67506dd994212811e --- /dev/null +++ b/tests-unit/server/routes/internal_routes_test.py @@ -0,0 +1,115 @@ +import pytest +from aiohttp import web +from unittest.mock import MagicMock, patch +from api_server.routes.internal.internal_routes import InternalRoutes +from api_server.services.file_service import FileService +from folder_paths import models_dir, user_directory, output_directory + + +@pytest.fixture +def internal_routes(): + return InternalRoutes(None) + +@pytest.fixture +def aiohttp_client_factory(aiohttp_client, internal_routes): + async def _get_client(): + app = internal_routes.get_app() + return await aiohttp_client(app) + return _get_client + +@pytest.mark.asyncio +async def test_list_files_valid_directory(aiohttp_client_factory, internal_routes): + mock_file_list = [ + {"name": "file1.txt", "path": "file1.txt", "type": "file", "size": 100}, + {"name": "dir1", "path": "dir1", "type": "directory"} + ] + internal_routes.file_service.list_files = MagicMock(return_value=mock_file_list) + client = await aiohttp_client_factory() + resp = await client.get('/files?directory=models') + assert resp.status == 200 + data = await resp.json() + assert 'files' in data + assert len(data['files']) == 2 + assert data['files'] == mock_file_list + + # Check other valid directories + resp = await client.get('/files?directory=user') + assert resp.status == 200 + resp = await client.get('/files?directory=output') + assert resp.status == 200 + +@pytest.mark.asyncio +async def test_list_files_invalid_directory(aiohttp_client_factory, internal_routes): + internal_routes.file_service.list_files = MagicMock(side_effect=ValueError("Invalid directory key")) + client = await aiohttp_client_factory() + resp = await client.get('/files?directory=invalid') + assert resp.status == 400 + data = await resp.json() + assert 'error' in data + assert data['error'] == "Invalid directory key" + +@pytest.mark.asyncio +async def test_list_files_exception(aiohttp_client_factory, internal_routes): + internal_routes.file_service.list_files = MagicMock(side_effect=Exception("Unexpected error")) + client = await aiohttp_client_factory() + resp = await client.get('/files?directory=models') + assert resp.status == 500 + data = await resp.json() + assert 'error' in data + assert data['error'] == "Unexpected error" + +@pytest.mark.asyncio +async def test_list_files_no_directory_param(aiohttp_client_factory, internal_routes): + mock_file_list = [] + internal_routes.file_service.list_files = MagicMock(return_value=mock_file_list) + client = await aiohttp_client_factory() + resp = await client.get('/files') + assert resp.status == 200 + data = await resp.json() + assert 'files' in data + assert len(data['files']) == 0 + +def test_setup_routes(internal_routes): + internal_routes.setup_routes() + routes = internal_routes.routes + assert any(route.method == 'GET' and str(route.path) == '/files' for route in routes) + +def test_get_app(internal_routes): + app = internal_routes.get_app() + assert isinstance(app, web.Application) + assert internal_routes._app is not None + +def test_get_app_reuse(internal_routes): + app1 = internal_routes.get_app() + app2 = internal_routes.get_app() + assert app1 is app2 + +@pytest.mark.asyncio +async def test_routes_added_to_app(aiohttp_client_factory, internal_routes): + client = await aiohttp_client_factory() + try: + resp = await client.get('/files') + print(f"Response received: status {resp.status}") # noqa: T201 + except Exception as e: + print(f"Exception occurred during GET request: {e}") # noqa: T201 + raise + + assert resp.status != 404, "Route /files does not exist" + +@pytest.mark.asyncio +async def test_file_service_initialization(): + with patch('api_server.routes.internal.internal_routes.FileService') as MockFileService: + # Create a mock instance + mock_file_service_instance = MagicMock(spec=FileService) + MockFileService.return_value = mock_file_service_instance + internal_routes = InternalRoutes(None) + + # Check if FileService was initialized with the correct parameters + MockFileService.assert_called_once_with({ + "models": models_dir, + "user": user_directory, + "output": output_directory + }) + + # Verify that the file_service attribute of InternalRoutes is set + assert internal_routes.file_service == mock_file_service_instance diff --git a/tests-unit/server/services/file_service_test.py b/tests-unit/server/services/file_service_test.py new file mode 100644 index 0000000000000000000000000000000000000000..09c3efc9f0d8a0e4b3739c8e063f0832a4d05253 --- /dev/null +++ b/tests-unit/server/services/file_service_test.py @@ -0,0 +1,54 @@ +import pytest +from unittest.mock import MagicMock +from api_server.services.file_service import FileService + +@pytest.fixture +def mock_file_system_ops(): + return MagicMock() + +@pytest.fixture +def file_service(mock_file_system_ops): + allowed_directories = { + "models": "/path/to/models", + "user": "/path/to/user", + "output": "/path/to/output" + } + return FileService(allowed_directories, file_system_ops=mock_file_system_ops) + +def test_list_files_valid_directory(file_service, mock_file_system_ops): + mock_file_system_ops.walk_directory.return_value = [ + {"name": "file1.txt", "path": "file1.txt", "type": "file", "size": 100}, + {"name": "dir1", "path": "dir1", "type": "directory"} + ] + + result = file_service.list_files("models") + + assert len(result) == 2 + assert result[0]["name"] == "file1.txt" + assert result[1]["name"] == "dir1" + mock_file_system_ops.walk_directory.assert_called_once_with("/path/to/models") + +def test_list_files_invalid_directory(file_service): + # Does not support walking directories outside of the allowed directories + with pytest.raises(ValueError, match="Invalid directory key"): + file_service.list_files("invalid_key") + +def test_list_files_empty_directory(file_service, mock_file_system_ops): + mock_file_system_ops.walk_directory.return_value = [] + + result = file_service.list_files("models") + + assert len(result) == 0 + mock_file_system_ops.walk_directory.assert_called_once_with("/path/to/models") + +@pytest.mark.parametrize("directory_key", ["models", "user", "output"]) +def test_list_files_all_allowed_directories(file_service, mock_file_system_ops, directory_key): + mock_file_system_ops.walk_directory.return_value = [ + {"name": f"file_{directory_key}.txt", "path": f"file_{directory_key}.txt", "type": "file", "size": 100} + ] + + result = file_service.list_files(directory_key) + + assert len(result) == 1 + assert result[0]["name"] == f"file_{directory_key}.txt" + mock_file_system_ops.walk_directory.assert_called_once_with(f"/path/to/{directory_key}") diff --git a/tests-unit/server/utils/file_operations_test.py b/tests-unit/server/utils/file_operations_test.py new file mode 100644 index 0000000000000000000000000000000000000000..2a45cc47a1447e6c2ace4f40e6543b2b7c5e4fcf --- /dev/null +++ b/tests-unit/server/utils/file_operations_test.py @@ -0,0 +1,42 @@ +import pytest +from typing import List +from api_server.utils.file_operations import FileSystemOperations, FileSystemItem, is_file_info + +@pytest.fixture +def temp_directory(tmp_path): + # Create a temporary directory structure + dir1 = tmp_path / "dir1" + dir2 = tmp_path / "dir2" + dir1.mkdir() + dir2.mkdir() + (dir1 / "file1.txt").write_text("content1") + (dir2 / "file2.txt").write_text("content2") + (tmp_path / "file3.txt").write_text("content3") + return tmp_path + +def test_walk_directory(temp_directory): + result: List[FileSystemItem] = FileSystemOperations.walk_directory(str(temp_directory)) + + assert len(result) == 5 # 2 directories and 3 files + + files = [item for item in result if item['type'] == 'file'] + dirs = [item for item in result if item['type'] == 'directory'] + + assert len(files) == 3 + assert len(dirs) == 2 + + file_names = {file['name'] for file in files} + assert file_names == {'file1.txt', 'file2.txt', 'file3.txt'} + + dir_names = {dir['name'] for dir in dirs} + assert dir_names == {'dir1', 'dir2'} + +def test_walk_directory_empty(tmp_path): + result = FileSystemOperations.walk_directory(str(tmp_path)) + assert len(result) == 0 + +def test_walk_directory_file_size(temp_directory): + result: List[FileSystemItem] = FileSystemOperations.walk_directory(str(temp_directory)) + files = [item for item in result if is_file_info(item)] + for file in files: + assert file['size'] > 0 # Assuming all files have some content diff --git a/tests-unit/utils/extra_config_test.py b/tests-unit/utils/extra_config_test.py new file mode 100644 index 0000000000000000000000000000000000000000..b23f5bd08ce757202eaef8010be3678e950c4bb6 --- /dev/null +++ b/tests-unit/utils/extra_config_test.py @@ -0,0 +1,303 @@ +import pytest +import yaml +import os +import sys +from unittest.mock import Mock, patch, mock_open + +from utils.extra_config import load_extra_path_config +import folder_paths + + +@pytest.fixture() +def clear_folder_paths(): + # Clear the global dictionary before each test to ensure isolation + original = folder_paths.folder_names_and_paths.copy() + folder_paths.folder_names_and_paths.clear() + yield + folder_paths.folder_names_and_paths = original + + +@pytest.fixture +def mock_yaml_content(): + return { + 'test_config': { + 'base_path': '~/App/', + 'checkpoints': 'subfolder1', + } + } + + +@pytest.fixture +def mock_expanded_home(): + return '/home/user' + + +@pytest.fixture +def yaml_config_with_appdata(): + return """ + test_config: + base_path: '%APPDATA%/ComfyUI' + checkpoints: 'models/checkpoints' + """ + + +@pytest.fixture +def mock_yaml_content_appdata(yaml_config_with_appdata): + return yaml.safe_load(yaml_config_with_appdata) + + +@pytest.fixture +def mock_expandvars_appdata(): + mock = Mock() + + def expandvars(path): + if '%APPDATA%' in path: + if sys.platform == 'win32': + return path.replace('%APPDATA%', 'C:/Users/TestUser/AppData/Roaming') + else: + return path.replace('%APPDATA%', '/Users/TestUser/AppData/Roaming') + return path + + mock.side_effect = expandvars + return mock + + +@pytest.fixture +def mock_add_model_folder_path(): + return Mock() + + +@pytest.fixture +def mock_expanduser(mock_expanded_home): + def _expanduser(path): + if path.startswith('~/'): + return os.path.join(mock_expanded_home, path[2:]) + return path + return _expanduser + + +@pytest.fixture +def mock_yaml_safe_load(mock_yaml_content): + return Mock(return_value=mock_yaml_content) + + +@patch('builtins.open', new_callable=mock_open, read_data="dummy file content") +def test_load_extra_model_paths_expands_userpath( + mock_file, + monkeypatch, + mock_add_model_folder_path, + mock_expanduser, + mock_yaml_safe_load, + mock_expanded_home +): + # Attach mocks used by load_extra_path_config + monkeypatch.setattr(folder_paths, 'add_model_folder_path', mock_add_model_folder_path) + monkeypatch.setattr(os.path, 'expanduser', mock_expanduser) + monkeypatch.setattr(yaml, 'safe_load', mock_yaml_safe_load) + + dummy_yaml_file_name = 'dummy_path.yaml' + load_extra_path_config(dummy_yaml_file_name) + + expected_calls = [ + ('checkpoints', os.path.join(mock_expanded_home, 'App', 'subfolder1'), False), + ] + + assert mock_add_model_folder_path.call_count == len(expected_calls) + + # Check if add_model_folder_path was called with the correct arguments + for actual_call, expected_call in zip(mock_add_model_folder_path.call_args_list, expected_calls): + assert actual_call.args[0] == expected_call[0] + assert os.path.normpath(actual_call.args[1]) == os.path.normpath(expected_call[1]) # Normalize and check the path to check on multiple OS. + assert actual_call.args[2] == expected_call[2] + + # Check if yaml.safe_load was called + mock_yaml_safe_load.assert_called_once() + + # Check if open was called with the correct file path + mock_file.assert_called_once_with(dummy_yaml_file_name, 'r') + + +@patch('builtins.open', new_callable=mock_open) +def test_load_extra_model_paths_expands_appdata( + mock_file, + monkeypatch, + mock_add_model_folder_path, + mock_expandvars_appdata, + yaml_config_with_appdata, + mock_yaml_content_appdata +): + # Set the mock_file to return yaml with appdata as a variable + mock_file.return_value.read.return_value = yaml_config_with_appdata + + # Attach mocks + monkeypatch.setattr(folder_paths, 'add_model_folder_path', mock_add_model_folder_path) + monkeypatch.setattr(os.path, 'expandvars', mock_expandvars_appdata) + monkeypatch.setattr(yaml, 'safe_load', Mock(return_value=mock_yaml_content_appdata)) + + # Mock expanduser to do nothing (since we're not testing it here) + monkeypatch.setattr(os.path, 'expanduser', lambda x: x) + + dummy_yaml_file_name = 'dummy_path.yaml' + load_extra_path_config(dummy_yaml_file_name) + + if sys.platform == "win32": + expected_base_path = 'C:/Users/TestUser/AppData/Roaming/ComfyUI' + else: + expected_base_path = '/Users/TestUser/AppData/Roaming/ComfyUI' + expected_calls = [ + ('checkpoints', os.path.join(expected_base_path, 'models/checkpoints'), False), + ] + + assert mock_add_model_folder_path.call_count == len(expected_calls) + + # Check the base path variable was expanded + for actual_call, expected_call in zip(mock_add_model_folder_path.call_args_list, expected_calls): + assert actual_call.args == expected_call + + # Verify that expandvars was called + assert mock_expandvars_appdata.called + + +@patch("builtins.open", new_callable=mock_open, read_data="dummy yaml content") +@patch("yaml.safe_load") +def test_load_extra_path_config_relative_base_path( + mock_yaml_load, _mock_file, clear_folder_paths, monkeypatch, tmp_path +): + """ + Test that when 'base_path' is a relative path in the YAML, it is joined to the YAML file directory, and then + the items in the config are correctly converted to absolute paths. + """ + sub_folder = "./my_rel_base" + config_data = { + "some_model_folder": { + "base_path": sub_folder, + "is_default": True, + "checkpoints": "checkpoints", + "some_key": "some_value" + } + } + mock_yaml_load.return_value = config_data + + dummy_yaml_name = "dummy_file.yaml" + + def fake_abspath(path): + if path == dummy_yaml_name: + # If it's the YAML path, treat it like it lives in tmp_path + return os.path.join(str(tmp_path), dummy_yaml_name) + return os.path.join(str(tmp_path), path) # Otherwise, do a normal join relative to tmp_path + + def fake_dirname(path): + # We expect path to be the result of fake_abspath(dummy_yaml_name) + if path.endswith(dummy_yaml_name): + return str(tmp_path) + return os.path.dirname(path) + + monkeypatch.setattr(os.path, "abspath", fake_abspath) + monkeypatch.setattr(os.path, "dirname", fake_dirname) + + load_extra_path_config(dummy_yaml_name) + + expected_checkpoints = os.path.abspath(os.path.join(str(tmp_path), sub_folder, "checkpoints")) + expected_some_value = os.path.abspath(os.path.join(str(tmp_path), sub_folder, "some_value")) + + actual_paths = folder_paths.folder_names_and_paths["checkpoints"][0] + assert len(actual_paths) == 1, "Should have one path added for 'checkpoints'." + assert actual_paths[0] == expected_checkpoints + + actual_paths = folder_paths.folder_names_and_paths["some_key"][0] + assert len(actual_paths) == 1, "Should have one path added for 'some_key'." + assert actual_paths[0] == expected_some_value + + +@patch("builtins.open", new_callable=mock_open, read_data="dummy yaml content") +@patch("yaml.safe_load") +def test_load_extra_path_config_absolute_base_path( + mock_yaml_load, _mock_file, clear_folder_paths, monkeypatch, tmp_path +): + """ + Test that when 'base_path' is an absolute path, each subdirectory is joined with that absolute path, + rather than being relative to the YAML's directory. + """ + abs_base = os.path.join(str(tmp_path), "abs_base") + config_data = { + "some_absolute_folder": { + "base_path": abs_base, # <-- absolute + "is_default": True, + "loras": "loras_folder", + "embeddings": "embeddings_folder" + } + } + mock_yaml_load.return_value = config_data + + dummy_yaml_name = "dummy_abs.yaml" + + def fake_abspath(path): + if path == dummy_yaml_name: + # If it's the YAML path, treat it like it is in tmp_path + return os.path.join(str(tmp_path), dummy_yaml_name) + return path # For absolute base, we just return path directly + + def fake_dirname(path): + return str(tmp_path) if path.endswith(dummy_yaml_name) else os.path.dirname(path) + + monkeypatch.setattr(os.path, "abspath", fake_abspath) + monkeypatch.setattr(os.path, "dirname", fake_dirname) + + load_extra_path_config(dummy_yaml_name) + + # Expect the final paths to be /loras_folder and /embeddings_folder + expected_loras = os.path.join(abs_base, "loras_folder") + expected_embeddings = os.path.join(abs_base, "embeddings_folder") + + actual_loras = folder_paths.folder_names_and_paths["loras"][0] + assert len(actual_loras) == 1, "Should have one path for 'loras'." + assert actual_loras[0] == os.path.abspath(expected_loras) + + actual_embeddings = folder_paths.folder_names_and_paths["embeddings"][0] + assert len(actual_embeddings) == 1, "Should have one path for 'embeddings'." + assert actual_embeddings[0] == os.path.abspath(expected_embeddings) + + +@patch("builtins.open", new_callable=mock_open, read_data="dummy yaml content") +@patch("yaml.safe_load") +def test_load_extra_path_config_no_base_path( + mock_yaml_load, _mock_file, clear_folder_paths, monkeypatch, tmp_path +): + """ + Test that if 'base_path' is not present, each path is joined + with the directory of the YAML file (unless it's already absolute). + """ + config_data = { + "some_folder_without_base": { + "is_default": True, + "text_encoders": "clip", + "diffusion_models": "unet" + } + } + mock_yaml_load.return_value = config_data + + dummy_yaml_name = "dummy_no_base.yaml" + + def fake_abspath(path): + if path == dummy_yaml_name: + return os.path.join(str(tmp_path), dummy_yaml_name) + return os.path.join(str(tmp_path), path) + + def fake_dirname(path): + return str(tmp_path) if path.endswith(dummy_yaml_name) else os.path.dirname(path) + + monkeypatch.setattr(os.path, "abspath", fake_abspath) + monkeypatch.setattr(os.path, "dirname", fake_dirname) + + load_extra_path_config(dummy_yaml_name) + + expected_clip = os.path.join(str(tmp_path), "clip") + expected_unet = os.path.join(str(tmp_path), "unet") + + actual_text_encoders = folder_paths.folder_names_and_paths["text_encoders"][0] + assert len(actual_text_encoders) == 1, "Should have one path for 'text_encoders'." + assert actual_text_encoders[0] == os.path.abspath(expected_clip) + + actual_diffusion = folder_paths.folder_names_and_paths["diffusion_models"][0] + assert len(actual_diffusion) == 1, "Should have one path for 'diffusion_models'." + assert actual_diffusion[0] == os.path.abspath(expected_unet) diff --git a/tests-unit/utils/json_util_test.py b/tests-unit/utils/json_util_test.py new file mode 100644 index 0000000000000000000000000000000000000000..d3089d8d184533cf7510ed0db14cfaf0644c52cf --- /dev/null +++ b/tests-unit/utils/json_util_test.py @@ -0,0 +1,71 @@ +from utils.json_util import merge_json_recursive + + +def test_merge_simple_dicts(): + base = {"a": 1, "b": 2} + update = {"b": 3, "c": 4} + expected = {"a": 1, "b": 3, "c": 4} + assert merge_json_recursive(base, update) == expected + + +def test_merge_nested_dicts(): + base = {"a": {"x": 1, "y": 2}, "b": 3} + update = {"a": {"y": 4, "z": 5}} + expected = {"a": {"x": 1, "y": 4, "z": 5}, "b": 3} + assert merge_json_recursive(base, update) == expected + + +def test_merge_lists(): + base = {"a": [1, 2], "b": 3} + update = {"a": [3, 4]} + expected = {"a": [1, 2, 3, 4], "b": 3} + assert merge_json_recursive(base, update) == expected + + +def test_merge_nested_lists(): + base = {"a": {"x": [1, 2]}} + update = {"a": {"x": [3, 4]}} + expected = {"a": {"x": [1, 2, 3, 4]}} + assert merge_json_recursive(base, update) == expected + + +def test_merge_mixed_types(): + base = {"a": [1, 2], "b": {"x": 1}} + update = {"a": [3], "b": {"y": 2}} + expected = {"a": [1, 2, 3], "b": {"x": 1, "y": 2}} + assert merge_json_recursive(base, update) == expected + + +def test_merge_overwrite_non_dict(): + base = {"a": 1} + update = {"a": {"x": 2}} + expected = {"a": {"x": 2}} + assert merge_json_recursive(base, update) == expected + + +def test_merge_empty_dicts(): + base = {} + update = {"a": 1} + expected = {"a": 1} + assert merge_json_recursive(base, update) == expected + + +def test_merge_none_values(): + base = {"a": None} + update = {"a": {"x": 1}} + expected = {"a": {"x": 1}} + assert merge_json_recursive(base, update) == expected + + +def test_merge_different_types(): + base = {"a": [1, 2]} + update = {"a": "string"} + expected = {"a": "string"} + assert merge_json_recursive(base, update) == expected + + +def test_merge_complex_nested(): + base = {"a": [1, 2], "b": {"x": [3, 4], "y": {"p": 1}}} + update = {"a": [5], "b": {"x": [6], "y": {"q": 2}}} + expected = {"a": [1, 2, 5], "b": {"x": [3, 4, 6], "y": {"p": 1, "q": 2}}} + assert merge_json_recursive(base, update) == expected diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2005fd45b2bbd249fb7f1dfff789b2ae236568ba --- /dev/null +++ b/tests/README.md @@ -0,0 +1,29 @@ +# Automated Testing + +## Running tests locally + +Additional requirements for running tests: +``` +pip install pytest +pip install websocket-client==1.6.1 +opencv-python==4.6.0.66 +scikit-image==0.21.0 +``` +Run inference tests: +``` +pytest tests/inference +``` + +## Quality regression test +Compares images in 2 directories to ensure they are the same + +1) Run an inference test to save a directory of "ground truth" images +``` + pytest tests/inference --output_dir tests/inference/baseline +``` +2) Make code edits + +3) Run inference and quality comparison tests +``` +pytest +``` \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/compare/conftest.py b/tests/compare/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..dd5078c9e6e432c7de2462c5641068bfa8e0aaee --- /dev/null +++ b/tests/compare/conftest.py @@ -0,0 +1,41 @@ +import os +import pytest + +# Command line arguments for pytest +def pytest_addoption(parser): + parser.addoption('--baseline_dir', action="store", default='tests/inference/baseline', help='Directory for ground-truth images') + parser.addoption('--test_dir', action="store", default='tests/inference/samples', help='Directory for images to test') + parser.addoption('--metrics_file', action="store", default='tests/metrics.md', help='Output file for metrics') + parser.addoption('--img_output_dir', action="store", default='tests/compare/samples', help='Output directory for diff metric images') + +# This initializes args at the beginning of the test session +@pytest.fixture(scope="session", autouse=True) +def args_pytest(pytestconfig): + args = {} + args['baseline_dir'] = pytestconfig.getoption('baseline_dir') + args['test_dir'] = pytestconfig.getoption('test_dir') + args['metrics_file'] = pytestconfig.getoption('metrics_file') + args['img_output_dir'] = pytestconfig.getoption('img_output_dir') + + # Initialize metrics file + with open(args['metrics_file'], 'a') as f: + # if file is empty, write header + if os.stat(args['metrics_file']).st_size == 0: + f.write("| date | run | file | status | value | \n") + f.write("| --- | --- | --- | --- | --- | \n") + + return args + + +def gather_file_basenames(directory: str): + files = [] + for file in os.listdir(directory): + if file.endswith(".png"): + files.append(file) + return files + +# Creates the list of baseline file names to use as a fixture +def pytest_generate_tests(metafunc): + if "baseline_fname" in metafunc.fixturenames: + baseline_fnames = gather_file_basenames(metafunc.config.getoption("baseline_dir")) + metafunc.parametrize("baseline_fname", baseline_fnames) diff --git a/tests/compare/test_quality.py b/tests/compare/test_quality.py new file mode 100644 index 0000000000000000000000000000000000000000..01c19054956dde3b611dafe97ad244a3579e0e85 --- /dev/null +++ b/tests/compare/test_quality.py @@ -0,0 +1,195 @@ +import datetime +import numpy as np +import os +from PIL import Image +import pytest +from pytest import fixture +from typing import Tuple, List + +from cv2 import imread, cvtColor, COLOR_BGR2RGB +from skimage.metrics import structural_similarity as ssim + + +""" +This test suite compares images in 2 directories by file name +The directories are specified by the command line arguments --baseline_dir and --test_dir + +""" +# ssim: Structural Similarity Index +# Returns a tuple of (ssim, diff_image) +def ssim_score(img0: np.ndarray, img1: np.ndarray) -> Tuple[float, np.ndarray]: + score, diff = ssim(img0, img1, channel_axis=-1, full=True) + # rescale the difference image to 0-255 range + diff = (diff * 255).astype("uint8") + return score, diff + +# Metrics must return a tuple of (score, diff_image) +METRICS = {"ssim": ssim_score} +METRICS_PASS_THRESHOLD = {"ssim": 0.95} + + +class TestCompareImageMetrics: + @fixture(scope="class") + def test_file_names(self, args_pytest): + test_dir = args_pytest['test_dir'] + fnames = self.gather_file_basenames(test_dir) + yield fnames + del fnames + + @fixture(scope="class", autouse=True) + def teardown(self, args_pytest): + yield + # Runs after all tests are complete + # Aggregate output files into a grid of images + baseline_dir = args_pytest['baseline_dir'] + test_dir = args_pytest['test_dir'] + img_output_dir = args_pytest['img_output_dir'] + metrics_file = args_pytest['metrics_file'] + + grid_dir = os.path.join(img_output_dir, "grid") + os.makedirs(grid_dir, exist_ok=True) + + for metric_dir in METRICS.keys(): + metric_path = os.path.join(img_output_dir, metric_dir) + for file in os.listdir(metric_path): + if file.endswith(".png"): + score = self.lookup_score_from_fname(file, metrics_file) + image_file_list = [] + image_file_list.append([ + os.path.join(baseline_dir, file), + os.path.join(test_dir, file), + os.path.join(metric_path, file) + ]) + # Create grid + image_list = [[Image.open(file) for file in files] for files in image_file_list] + grid = self.image_grid(image_list) + grid.save(os.path.join(grid_dir, f"{metric_dir}_{score:.3f}_{file}")) + + # Tests run for each baseline file name + @fixture() + def fname(self, baseline_fname): + yield baseline_fname + del baseline_fname + + def test_directories_not_empty(self, args_pytest): + baseline_dir = args_pytest['baseline_dir'] + test_dir = args_pytest['test_dir'] + assert len(os.listdir(baseline_dir)) != 0, f"Baseline directory {baseline_dir} is empty" + assert len(os.listdir(test_dir)) != 0, f"Test directory {test_dir} is empty" + + def test_dir_has_all_matching_metadata(self, fname, test_file_names, args_pytest): + # Check that all files in baseline_dir have a file in test_dir with matching metadata + baseline_file_path = os.path.join(args_pytest['baseline_dir'], fname) + file_paths = [os.path.join(args_pytest['test_dir'], f) for f in test_file_names] + file_match = self.find_file_match(baseline_file_path, file_paths) + assert file_match is not None, f"Could not find a file in {args_pytest['test_dir']} with matching metadata to {baseline_file_path}" + + # For a baseline image file, finds the corresponding file name in test_dir and + # compares the images using the metrics in METRICS + @pytest.mark.parametrize("metric", METRICS.keys()) + def test_pipeline_compare( + self, + args_pytest, + fname, + test_file_names, + metric, + ): + baseline_dir = args_pytest['baseline_dir'] + test_dir = args_pytest['test_dir'] + metrics_output_file = args_pytest['metrics_file'] + img_output_dir = args_pytest['img_output_dir'] + + baseline_file_path = os.path.join(baseline_dir, fname) + + # Find file match + file_paths = [os.path.join(test_dir, f) for f in test_file_names] + test_file = self.find_file_match(baseline_file_path, file_paths) + + # Run metrics + sample_baseline = self.read_img(baseline_file_path) + sample_secondary = self.read_img(test_file) + + score, metric_img = METRICS[metric](sample_baseline, sample_secondary) + metric_status = score > METRICS_PASS_THRESHOLD[metric] + + # Save metric values + with open(metrics_output_file, 'a') as f: + run_info = os.path.splitext(fname)[0] + metric_status_str = "PASS ✅" if metric_status else "FAIL ❌" + date_str = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + f.write(f"| {date_str} | {run_info} | {metric} | {metric_status_str} | {score} | \n") + + # Save metric image + metric_img_dir = os.path.join(img_output_dir, metric) + os.makedirs(metric_img_dir, exist_ok=True) + output_filename = f'{fname}' + Image.fromarray(metric_img).save(os.path.join(metric_img_dir, output_filename)) + + assert score > METRICS_PASS_THRESHOLD[metric] + + def read_img(self, filename: str) -> np.ndarray: + cvImg = imread(filename) + cvImg = cvtColor(cvImg, COLOR_BGR2RGB) + return cvImg + + def image_grid(self, img_list: list[list[Image.Image]]): + # imgs is a 2D list of images + # Assumes the input images are a rectangular grid of equal sized images + rows = len(img_list) + cols = len(img_list[0]) + + w, h = img_list[0][0].size + grid = Image.new('RGB', size=(cols*w, rows*h)) + + for i, row in enumerate(img_list): + for j, img in enumerate(row): + grid.paste(img, box=(j*w, i*h)) + return grid + + def lookup_score_from_fname(self, + fname: str, + metrics_output_file: str + ) -> float: + fname_basestr = os.path.splitext(fname)[0] + with open(metrics_output_file, 'r') as f: + for line in f: + if fname_basestr in line: + score = float(line.split('|')[5]) + return score + raise ValueError(f"Could not find score for {fname} in {metrics_output_file}") + + def gather_file_basenames(self, directory: str): + files = [] + for file in os.listdir(directory): + if file.endswith(".png"): + files.append(file) + return files + + def read_file_prompt(self, fname:str) -> str: + # Read prompt from image file metadata + img = Image.open(fname) + img.load() + return img.info['prompt'] + + def find_file_match(self, baseline_file: str, file_paths: List[str]): + # Find a file in file_paths with matching metadata to baseline_file + baseline_prompt = self.read_file_prompt(baseline_file) + + # Do not match empty prompts + if baseline_prompt is None or baseline_prompt == "": + return None + + # Find file match + # Reorder test_file_names so that the file with matching name is first + # This is an optimization because matching file names are more likely + # to have matching metadata if they were generated with the same script + basename = os.path.basename(baseline_file) + file_path_basenames = [os.path.basename(f) for f in file_paths] + if basename in file_path_basenames: + match_index = file_path_basenames.index(basename) + file_paths.insert(0, file_paths.pop(match_index)) + + for f in file_paths: + test_file_prompt = self.read_file_prompt(f) + if baseline_prompt == test_file_prompt: + return f diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..4e30eb5813f44ba6c22027f5b0f3fc0023f81e6d --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,36 @@ +import os +import pytest + +# Command line arguments for pytest +def pytest_addoption(parser): + parser.addoption('--output_dir', action="store", default='tests/inference/samples', help='Output directory for generated images') + parser.addoption("--listen", type=str, default="127.0.0.1", metavar="IP", nargs="?", const="0.0.0.0", help="Specify the IP address to listen on (default: 127.0.0.1). If --listen is provided without an argument, it defaults to 0.0.0.0. (listens on all)") + parser.addoption("--port", type=int, default=8188, help="Set the listen port.") + +# This initializes args at the beginning of the test session +@pytest.fixture(scope="session", autouse=True) +def args_pytest(pytestconfig): + args = {} + args['output_dir'] = pytestconfig.getoption('output_dir') + args['listen'] = pytestconfig.getoption('listen') + args['port'] = pytestconfig.getoption('port') + + os.makedirs(args['output_dir'], exist_ok=True) + + return args + +def pytest_collection_modifyitems(items): + # Modifies items so tests run in the correct order + + LAST_TESTS = ['test_quality'] + + # Move the last items to the end + last_items = [] + for test_name in LAST_TESTS: + for item in items.copy(): + print(item.module.__name__, item) # noqa: T201 + if item.module.__name__ == test_name: + last_items.append(item) + items.remove(item) + + items.extend(last_items) diff --git a/tests/inference/__init__.py b/tests/inference/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/inference/extra_model_paths.yaml b/tests/inference/extra_model_paths.yaml new file mode 100644 index 0000000000000000000000000000000000000000..75b2e1ae4a680d5cb06425cae27829a363911a5f --- /dev/null +++ b/tests/inference/extra_model_paths.yaml @@ -0,0 +1,4 @@ +# Config for testing nodes +testing: + custom_nodes: tests/inference/testing_nodes + diff --git a/tests/inference/graphs/default_graph_sdxl1_0.json b/tests/inference/graphs/default_graph_sdxl1_0.json new file mode 100644 index 0000000000000000000000000000000000000000..c06c6829c6253cc71982f3714620bd10dd41bd73 --- /dev/null +++ b/tests/inference/graphs/default_graph_sdxl1_0.json @@ -0,0 +1,144 @@ +{ + "4": { + "inputs": { + "ckpt_name": "sd_xl_base_1.0.safetensors" + }, + "class_type": "CheckpointLoaderSimple" + }, + "5": { + "inputs": { + "width": 1024, + "height": 1024, + "batch_size": 1 + }, + "class_type": "EmptyLatentImage" + }, + "6": { + "inputs": { + "text": "a photo of a cat", + "clip": [ + "4", + 1 + ] + }, + "class_type": "CLIPTextEncode" + }, + "10": { + "inputs": { + "add_noise": "enable", + "noise_seed": 42, + "steps": 20, + "cfg": 7.5, + "sampler_name": "euler", + "scheduler": "normal", + "start_at_step": 0, + "end_at_step": 32, + "return_with_leftover_noise": "enable", + "model": [ + "4", + 0 + ], + "positive": [ + "6", + 0 + ], + "negative": [ + "15", + 0 + ], + "latent_image": [ + "5", + 0 + ] + }, + "class_type": "KSamplerAdvanced" + }, + "12": { + "inputs": { + "samples": [ + "14", + 0 + ], + "vae": [ + "4", + 2 + ] + }, + "class_type": "VAEDecode" + }, + "13": { + "inputs": { + "filename_prefix": "test_inference", + "images": [ + "12", + 0 + ] + }, + "class_type": "SaveImage" + }, + "14": { + "inputs": { + "add_noise": "disable", + "noise_seed": 42, + "steps": 20, + "cfg": 7.5, + "sampler_name": "euler", + "scheduler": "normal", + "start_at_step": 32, + "end_at_step": 10000, + "return_with_leftover_noise": "disable", + "model": [ + "16", + 0 + ], + "positive": [ + "17", + 0 + ], + "negative": [ + "20", + 0 + ], + "latent_image": [ + "10", + 0 + ] + }, + "class_type": "KSamplerAdvanced" + }, + "15": { + "inputs": { + "conditioning": [ + "6", + 0 + ] + }, + "class_type": "ConditioningZeroOut" + }, + "16": { + "inputs": { + "ckpt_name": "sd_xl_refiner_1.0.safetensors" + }, + "class_type": "CheckpointLoaderSimple" + }, + "17": { + "inputs": { + "text": "a photo of a cat", + "clip": [ + "16", + 1 + ] + }, + "class_type": "CLIPTextEncode" + }, + "20": { + "inputs": { + "text": "", + "clip": [ + "16", + 1 + ] + }, + "class_type": "CLIPTextEncode" + } + } \ No newline at end of file diff --git a/tests/inference/test_execution.py b/tests/inference/test_execution.py new file mode 100644 index 0000000000000000000000000000000000000000..5cda5c1ae24a0dd8b09444d7fbfd4834bc1144fb --- /dev/null +++ b/tests/inference/test_execution.py @@ -0,0 +1,524 @@ +from io import BytesIO +import numpy +from PIL import Image +import pytest +from pytest import fixture +import time +import torch +from typing import Union, Dict +import json +import subprocess +import websocket #NOTE: websocket-client (https://github.com/websocket-client/websocket-client) +import uuid +import urllib.request +import urllib.parse +import urllib.error +from comfy_execution.graph_utils import GraphBuilder, Node + +class RunResult: + def __init__(self, prompt_id: str): + self.outputs: Dict[str,Dict] = {} + self.runs: Dict[str,bool] = {} + self.prompt_id: str = prompt_id + + def get_output(self, node: Node): + return self.outputs.get(node.id, None) + + def did_run(self, node: Node): + return self.runs.get(node.id, False) + + def get_images(self, node: Node): + output = self.get_output(node) + if output is None: + return [] + return output.get('image_objects', []) + + def get_prompt_id(self): + return self.prompt_id + +class ComfyClient: + def __init__(self): + self.test_name = "" + + def connect(self, + listen:str = '127.0.0.1', + port:Union[str,int] = 8188, + client_id: str = str(uuid.uuid4()) + ): + self.client_id = client_id + self.server_address = f"{listen}:{port}" + ws = websocket.WebSocket() + ws.connect("ws://{}/ws?clientId={}".format(self.server_address, self.client_id)) + self.ws = ws + + def queue_prompt(self, prompt): + p = {"prompt": prompt, "client_id": self.client_id} + data = json.dumps(p).encode('utf-8') + req = urllib.request.Request("http://{}/prompt".format(self.server_address), data=data) + return json.loads(urllib.request.urlopen(req).read()) + + def get_image(self, filename, subfolder, folder_type): + data = {"filename": filename, "subfolder": subfolder, "type": folder_type} + url_values = urllib.parse.urlencode(data) + with urllib.request.urlopen("http://{}/view?{}".format(self.server_address, url_values)) as response: + return response.read() + + def get_history(self, prompt_id): + with urllib.request.urlopen("http://{}/history/{}".format(self.server_address, prompt_id)) as response: + return json.loads(response.read()) + + def set_test_name(self, name): + self.test_name = name + + def run(self, graph): + prompt = graph.finalize() + for node in graph.nodes.values(): + if node.class_type == 'SaveImage': + node.inputs['filename_prefix'] = self.test_name + + prompt_id = self.queue_prompt(prompt)['prompt_id'] + result = RunResult(prompt_id) + while True: + out = self.ws.recv() + if isinstance(out, str): + message = json.loads(out) + if message['type'] == 'executing': + data = message['data'] + if data['prompt_id'] != prompt_id: + continue + if data['node'] is None: + break + result.runs[data['node']] = True + elif message['type'] == 'execution_error': + raise Exception(message['data']) + elif message['type'] == 'execution_cached': + pass # Probably want to store this off for testing + + history = self.get_history(prompt_id)[prompt_id] + for node_id in history['outputs']: + node_output = history['outputs'][node_id] + result.outputs[node_id] = node_output + images_output = [] + if 'images' in node_output: + for image in node_output['images']: + image_data = self.get_image(image['filename'], image['subfolder'], image['type']) + image_obj = Image.open(BytesIO(image_data)) + images_output.append(image_obj) + node_output['image_objects'] = images_output + + return result + +# +# Loop through these variables +# +@pytest.mark.execution +class TestExecution: + # + # Initialize server and client + # + @fixture(scope="class", autouse=True, params=[ + # (use_lru, lru_size) + (False, 0), + (True, 0), + (True, 100), + ]) + def _server(self, args_pytest, request): + # Start server + pargs = [ + 'python','main.py', + '--output-directory', args_pytest["output_dir"], + '--listen', args_pytest["listen"], + '--port', str(args_pytest["port"]), + '--extra-model-paths-config', 'tests/inference/extra_model_paths.yaml', + ] + use_lru, lru_size = request.param + if use_lru: + pargs += ['--cache-lru', str(lru_size)] + print("Running server with args:", pargs) # noqa: T201 + p = subprocess.Popen(pargs) + yield + p.kill() + torch.cuda.empty_cache() + + def start_client(self, listen:str, port:int): + # Start client + comfy_client = ComfyClient() + # Connect to server (with retries) + n_tries = 5 + for i in range(n_tries): + time.sleep(4) + try: + comfy_client.connect(listen=listen, port=port) + except ConnectionRefusedError as e: + print(e) # noqa: T201 + print(f"({i+1}/{n_tries}) Retrying...") # noqa: T201 + else: + break + return comfy_client + + @fixture(scope="class", autouse=True) + def shared_client(self, args_pytest, _server): + client = self.start_client(args_pytest["listen"], args_pytest["port"]) + yield client + del client + torch.cuda.empty_cache() + + @fixture + def client(self, shared_client, request): + shared_client.set_test_name(f"execution[{request.node.name}]") + yield shared_client + + @fixture + def builder(self, request): + yield GraphBuilder(prefix=request.node.name) + + def test_lazy_input(self, client: ComfyClient, builder: GraphBuilder): + g = builder + input1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + input2 = g.node("StubImage", content="WHITE", height=512, width=512, batch_size=1) + mask = g.node("StubMask", value=0.0, height=512, width=512, batch_size=1) + + lazy_mix = g.node("TestLazyMixImages", image1=input1.out(0), image2=input2.out(0), mask=mask.out(0)) + output = g.node("SaveImage", images=lazy_mix.out(0)) + result = client.run(g) + + result_image = result.get_images(output)[0] + assert numpy.array(result_image).any() == 0, "Image should be black" + assert result.did_run(input1) + assert not result.did_run(input2) + assert result.did_run(mask) + assert result.did_run(lazy_mix) + + def test_full_cache(self, client: ComfyClient, builder: GraphBuilder): + g = builder + input1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + input2 = g.node("StubImage", content="NOISE", height=512, width=512, batch_size=1) + mask = g.node("StubMask", value=0.5, height=512, width=512, batch_size=1) + + lazy_mix = g.node("TestLazyMixImages", image1=input1.out(0), image2=input2.out(0), mask=mask.out(0)) + g.node("SaveImage", images=lazy_mix.out(0)) + + client.run(g) + result2 = client.run(g) + for node_id, node in g.nodes.items(): + assert not result2.did_run(node), f"Node {node_id} ran, but should have been cached" + + def test_partial_cache(self, client: ComfyClient, builder: GraphBuilder): + g = builder + input1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + input2 = g.node("StubImage", content="NOISE", height=512, width=512, batch_size=1) + mask = g.node("StubMask", value=0.5, height=512, width=512, batch_size=1) + + lazy_mix = g.node("TestLazyMixImages", image1=input1.out(0), image2=input2.out(0), mask=mask.out(0)) + g.node("SaveImage", images=lazy_mix.out(0)) + + client.run(g) + mask.inputs['value'] = 0.4 + result2 = client.run(g) + assert not result2.did_run(input1), "Input1 should have been cached" + assert not result2.did_run(input2), "Input2 should have been cached" + + def test_error(self, client: ComfyClient, builder: GraphBuilder): + g = builder + input1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + # Different size of the two images + input2 = g.node("StubImage", content="NOISE", height=256, width=256, batch_size=1) + mask = g.node("StubMask", value=0.5, height=512, width=512, batch_size=1) + + lazy_mix = g.node("TestLazyMixImages", image1=input1.out(0), image2=input2.out(0), mask=mask.out(0)) + g.node("SaveImage", images=lazy_mix.out(0)) + + try: + client.run(g) + assert False, "Should have raised an error" + except Exception as e: + assert 'prompt_id' in e.args[0], f"Did not get back a proper error message: {e}" + + @pytest.mark.parametrize("test_value, expect_error", [ + (5, True), + ("foo", True), + (5.0, False), + ]) + def test_validation_error_literal(self, test_value, expect_error, client: ComfyClient, builder: GraphBuilder): + g = builder + validation1 = g.node("TestCustomValidation1", input1=test_value, input2=3.0) + g.node("SaveImage", images=validation1.out(0)) + + if expect_error: + with pytest.raises(urllib.error.HTTPError): + client.run(g) + else: + client.run(g) + + @pytest.mark.parametrize("test_type, test_value", [ + ("StubInt", 5), + ("StubFloat", 5.0) + ]) + def test_validation_error_edge1(self, test_type, test_value, client: ComfyClient, builder: GraphBuilder): + g = builder + stub = g.node(test_type, value=test_value) + validation1 = g.node("TestCustomValidation1", input1=stub.out(0), input2=3.0) + g.node("SaveImage", images=validation1.out(0)) + + with pytest.raises(urllib.error.HTTPError): + client.run(g) + + @pytest.mark.parametrize("test_type, test_value, expect_error", [ + ("StubInt", 5, True), + ("StubFloat", 5.0, False) + ]) + def test_validation_error_edge2(self, test_type, test_value, expect_error, client: ComfyClient, builder: GraphBuilder): + g = builder + stub = g.node(test_type, value=test_value) + validation2 = g.node("TestCustomValidation2", input1=stub.out(0), input2=3.0) + g.node("SaveImage", images=validation2.out(0)) + + if expect_error: + with pytest.raises(urllib.error.HTTPError): + client.run(g) + else: + client.run(g) + + @pytest.mark.parametrize("test_type, test_value, expect_error", [ + ("StubInt", 5, True), + ("StubFloat", 5.0, False) + ]) + def test_validation_error_edge3(self, test_type, test_value, expect_error, client: ComfyClient, builder: GraphBuilder): + g = builder + stub = g.node(test_type, value=test_value) + validation3 = g.node("TestCustomValidation3", input1=stub.out(0), input2=3.0) + g.node("SaveImage", images=validation3.out(0)) + + if expect_error: + with pytest.raises(urllib.error.HTTPError): + client.run(g) + else: + client.run(g) + + @pytest.mark.parametrize("test_type, test_value, expect_error", [ + ("StubInt", 5, True), + ("StubFloat", 5.0, False) + ]) + def test_validation_error_edge4(self, test_type, test_value, expect_error, client: ComfyClient, builder: GraphBuilder): + g = builder + stub = g.node(test_type, value=test_value) + validation4 = g.node("TestCustomValidation4", input1=stub.out(0), input2=3.0) + g.node("SaveImage", images=validation4.out(0)) + + if expect_error: + with pytest.raises(urllib.error.HTTPError): + client.run(g) + else: + client.run(g) + + @pytest.mark.parametrize("test_value1, test_value2, expect_error", [ + (0.0, 0.5, False), + (0.0, 5.0, False), + (0.0, 7.0, True) + ]) + def test_validation_error_kwargs(self, test_value1, test_value2, expect_error, client: ComfyClient, builder: GraphBuilder): + g = builder + validation5 = g.node("TestCustomValidation5", input1=test_value1, input2=test_value2) + g.node("SaveImage", images=validation5.out(0)) + + if expect_error: + with pytest.raises(urllib.error.HTTPError): + client.run(g) + else: + client.run(g) + + def test_cycle_error(self, client: ComfyClient, builder: GraphBuilder): + g = builder + input1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + input2 = g.node("StubImage", content="WHITE", height=512, width=512, batch_size=1) + mask = g.node("StubMask", value=0.5, height=512, width=512, batch_size=1) + + lazy_mix1 = g.node("TestLazyMixImages", image1=input1.out(0), mask=mask.out(0)) + lazy_mix2 = g.node("TestLazyMixImages", image1=lazy_mix1.out(0), image2=input2.out(0), mask=mask.out(0)) + g.node("SaveImage", images=lazy_mix2.out(0)) + + # When the cycle exists on initial submission, it should raise a validation error + with pytest.raises(urllib.error.HTTPError): + client.run(g) + + def test_dynamic_cycle_error(self, client: ComfyClient, builder: GraphBuilder): + g = builder + input1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + input2 = g.node("StubImage", content="WHITE", height=512, width=512, batch_size=1) + generator = g.node("TestDynamicDependencyCycle", input1=input1.out(0), input2=input2.out(0)) + g.node("SaveImage", images=generator.out(0)) + + # When the cycle is in a graph that is generated dynamically, it should raise a runtime error + try: + client.run(g) + assert False, "Should have raised an error" + except Exception as e: + assert 'prompt_id' in e.args[0], f"Did not get back a proper error message: {e}" + assert e.args[0]['node_id'] == generator.id, "Error should have been on the generator node" + + def test_missing_node_error(self, client: ComfyClient, builder: GraphBuilder): + g = builder + input1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + input2 = g.node("StubImage", id="removeme", content="WHITE", height=512, width=512, batch_size=1) + input3 = g.node("StubImage", content="WHITE", height=512, width=512, batch_size=1) + mask = g.node("StubMask", value=0.5, height=512, width=512, batch_size=1) + mix1 = g.node("TestLazyMixImages", image1=input1.out(0), image2=input2.out(0), mask=mask.out(0)) + mix2 = g.node("TestLazyMixImages", image1=input1.out(0), image2=input3.out(0), mask=mask.out(0)) + # We have multiple outputs. The first is invalid, but the second is valid + g.node("SaveImage", images=mix1.out(0)) + g.node("SaveImage", images=mix2.out(0)) + g.remove_node("removeme") + + client.run(g) + + # Add back in the missing node to make sure the error doesn't break the server + input2 = g.node("StubImage", id="removeme", content="WHITE", height=512, width=512, batch_size=1) + client.run(g) + + def test_custom_is_changed(self, client: ComfyClient, builder: GraphBuilder): + g = builder + # Creating the nodes in this specific order previously caused a bug + save = g.node("SaveImage") + is_changed = g.node("TestCustomIsChanged", should_change=False) + input1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + + save.set_input('images', is_changed.out(0)) + is_changed.set_input('image', input1.out(0)) + + result1 = client.run(g) + result2 = client.run(g) + is_changed.set_input('should_change', True) + result3 = client.run(g) + result4 = client.run(g) + assert result1.did_run(is_changed), "is_changed should have been run" + assert not result2.did_run(is_changed), "is_changed should have been cached" + assert result3.did_run(is_changed), "is_changed should have been re-run" + assert result4.did_run(is_changed), "is_changed should not have been cached" + + def test_undeclared_inputs(self, client: ComfyClient, builder: GraphBuilder): + g = builder + input1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + input2 = g.node("StubImage", content="WHITE", height=512, width=512, batch_size=1) + input3 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + input4 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + average = g.node("TestVariadicAverage", input1=input1.out(0), input2=input2.out(0), input3=input3.out(0), input4=input4.out(0)) + output = g.node("SaveImage", images=average.out(0)) + + result = client.run(g) + result_image = result.get_images(output)[0] + expected = 255 // 4 + assert numpy.array(result_image).min() == expected and numpy.array(result_image).max() == expected, "Image should be grey" + + def test_for_loop(self, client: ComfyClient, builder: GraphBuilder): + g = builder + iterations = 4 + input1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + input2 = g.node("StubImage", content="WHITE", height=512, width=512, batch_size=1) + is_changed = g.node("TestCustomIsChanged", should_change=True, image=input2.out(0)) + for_open = g.node("TestForLoopOpen", remaining=iterations, initial_value1=is_changed.out(0)) + average = g.node("TestVariadicAverage", input1=input1.out(0), input2=for_open.out(2)) + for_close = g.node("TestForLoopClose", flow_control=for_open.out(0), initial_value1=average.out(0)) + output = g.node("SaveImage", images=for_close.out(0)) + + for iterations in range(1, 5): + for_open.set_input('remaining', iterations) + result = client.run(g) + result_image = result.get_images(output)[0] + expected = 255 // (2 ** iterations) + assert numpy.array(result_image).min() == expected and numpy.array(result_image).max() == expected, "Image should be grey" + assert result.did_run(is_changed) + + def test_mixed_expansion_returns(self, client: ComfyClient, builder: GraphBuilder): + g = builder + val_list = g.node("TestMakeListNode", value1=0.1, value2=0.2, value3=0.3) + mixed = g.node("TestMixedExpansionReturns", input1=val_list.out(0)) + output_dynamic = g.node("SaveImage", images=mixed.out(0)) + output_literal = g.node("SaveImage", images=mixed.out(1)) + + result = client.run(g) + images_dynamic = result.get_images(output_dynamic) + assert len(images_dynamic) == 3, "Should have 2 images" + assert numpy.array(images_dynamic[0]).min() == 25 and numpy.array(images_dynamic[0]).max() == 25, "First image should be 0.1" + assert numpy.array(images_dynamic[1]).min() == 51 and numpy.array(images_dynamic[1]).max() == 51, "Second image should be 0.2" + assert numpy.array(images_dynamic[2]).min() == 76 and numpy.array(images_dynamic[2]).max() == 76, "Third image should be 0.3" + + images_literal = result.get_images(output_literal) + assert len(images_literal) == 3, "Should have 2 images" + for i in range(3): + assert numpy.array(images_literal[i]).min() == 255 and numpy.array(images_literal[i]).max() == 255, "All images should be white" + + def test_mixed_lazy_results(self, client: ComfyClient, builder: GraphBuilder): + g = builder + val_list = g.node("TestMakeListNode", value1=0.0, value2=0.5, value3=1.0) + mask = g.node("StubMask", value=val_list.out(0), height=512, width=512, batch_size=1) + input1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + input2 = g.node("StubImage", content="WHITE", height=512, width=512, batch_size=1) + mix = g.node("TestLazyMixImages", image1=input1.out(0), image2=input2.out(0), mask=mask.out(0)) + rebatch = g.node("RebatchImages", images=mix.out(0), batch_size=3) + output = g.node("SaveImage", images=rebatch.out(0)) + + result = client.run(g) + images = result.get_images(output) + assert len(images) == 3, "Should have 3 image" + assert numpy.array(images[0]).min() == 0 and numpy.array(images[0]).max() == 0, "First image should be 0.0" + assert numpy.array(images[1]).min() == 127 and numpy.array(images[1]).max() == 127, "Second image should be 0.5" + assert numpy.array(images[2]).min() == 255 and numpy.array(images[2]).max() == 255, "Third image should be 1.0" + + def test_output_reuse(self, client: ComfyClient, builder: GraphBuilder): + g = builder + input1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + + output1 = g.node("SaveImage", images=input1.out(0)) + output2 = g.node("SaveImage", images=input1.out(0)) + + result = client.run(g) + images1 = result.get_images(output1) + images2 = result.get_images(output2) + assert len(images1) == 1, "Should have 1 image" + assert len(images2) == 1, "Should have 1 image" + + + # This tests that only constant outputs are used in the call to `IS_CHANGED` + def test_is_changed_with_outputs(self, client: ComfyClient, builder: GraphBuilder): + g = builder + input1 = g.node("StubConstantImage", value=0.5, height=512, width=512, batch_size=1) + test_node = g.node("TestIsChangedWithConstants", image=input1.out(0), value=0.5) + + output = g.node("PreviewImage", images=test_node.out(0)) + + result = client.run(g) + images = result.get_images(output) + assert len(images) == 1, "Should have 1 image" + assert numpy.array(images[0]).min() == 63 and numpy.array(images[0]).max() == 63, "Image should have value 0.25" + + result = client.run(g) + images = result.get_images(output) + assert len(images) == 1, "Should have 1 image" + assert numpy.array(images[0]).min() == 63 and numpy.array(images[0]).max() == 63, "Image should have value 0.25" + assert not result.did_run(test_node), "The execution should have been cached" + + # This tests that nodes with OUTPUT_IS_LIST function correctly when they receive an ExecutionBlocker + # as input. We also test that when that list (containing an ExecutionBlocker) is passed to a node, + # only that one entry in the list is blocked. + def test_execution_block_list_output(self, client: ComfyClient, builder: GraphBuilder): + g = builder + image1 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + image2 = g.node("StubImage", content="WHITE", height=512, width=512, batch_size=1) + image3 = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + image_list = g.node("TestMakeListNode", value1=image1.out(0), value2=image2.out(0), value3=image3.out(0)) + int1 = g.node("StubInt", value=1) + int2 = g.node("StubInt", value=2) + int3 = g.node("StubInt", value=3) + int_list = g.node("TestMakeListNode", value1=int1.out(0), value2=int2.out(0), value3=int3.out(0)) + compare = g.node("TestIntConditions", a=int_list.out(0), b=2, operation="==") + blocker = g.node("TestExecutionBlocker", input=image_list.out(0), block=compare.out(0), verbose=False) + + list_output = g.node("TestMakeListNode", value1=blocker.out(0)) + output = g.node("PreviewImage", images=list_output.out(0)) + + result = client.run(g) + assert result.did_run(output), "The execution should have run" + images = result.get_images(output) + assert len(images) == 2, "Should have 2 images" + assert numpy.array(images[0]).min() == 0 and numpy.array(images[0]).max() == 0, "First image should be black" + assert numpy.array(images[1]).min() == 0 and numpy.array(images[1]).max() == 0, "Second image should also be black" diff --git a/tests/inference/test_inference.py b/tests/inference/test_inference.py new file mode 100644 index 0000000000000000000000000000000000000000..7e4a206c41d95d5740c9c8b6e6c9071ad0ee86ce --- /dev/null +++ b/tests/inference/test_inference.py @@ -0,0 +1,237 @@ +from copy import deepcopy +from io import BytesIO +import numpy +import os +from PIL import Image +import pytest +from pytest import fixture +import time +import torch +from typing import Union +import json +import subprocess +import websocket #NOTE: websocket-client (https://github.com/websocket-client/websocket-client) +import uuid +import urllib.request +import urllib.parse + + +from comfy.samplers import KSampler + +""" +These tests generate and save images through a range of parameters +""" + +class ComfyGraph: + def __init__(self, + graph: dict, + sampler_nodes: list[str], + ): + self.graph = graph + self.sampler_nodes = sampler_nodes + + def set_prompt(self, prompt, negative_prompt=None): + # Sets the prompt for the sampler nodes (eg. base and refiner) + for node in self.sampler_nodes: + prompt_node = self.graph[node]['inputs']['positive'][0] + self.graph[prompt_node]['inputs']['text'] = prompt + if negative_prompt: + negative_prompt_node = self.graph[node]['inputs']['negative'][0] + self.graph[negative_prompt_node]['inputs']['text'] = negative_prompt + + def set_sampler_name(self, sampler_name:str, ): + # sets the sampler name for the sampler nodes (eg. base and refiner) + for node in self.sampler_nodes: + self.graph[node]['inputs']['sampler_name'] = sampler_name + + def set_scheduler(self, scheduler:str): + # sets the sampler name for the sampler nodes (eg. base and refiner) + for node in self.sampler_nodes: + self.graph[node]['inputs']['scheduler'] = scheduler + + def set_filename_prefix(self, prefix:str): + # sets the filename prefix for the save nodes + for node in self.graph: + if self.graph[node]['class_type'] == 'SaveImage': + self.graph[node]['inputs']['filename_prefix'] = prefix + + +class ComfyClient: + # From examples/websockets_api_example.py + + def connect(self, + listen:str = '127.0.0.1', + port:Union[str,int] = 8188, + client_id: str = str(uuid.uuid4()) + ): + self.client_id = client_id + self.server_address = f"{listen}:{port}" + ws = websocket.WebSocket() + ws.connect("ws://{}/ws?clientId={}".format(self.server_address, self.client_id)) + self.ws = ws + + def queue_prompt(self, prompt): + p = {"prompt": prompt, "client_id": self.client_id} + data = json.dumps(p).encode('utf-8') + req = urllib.request.Request("http://{}/prompt".format(self.server_address), data=data) + return json.loads(urllib.request.urlopen(req).read()) + + def get_image(self, filename, subfolder, folder_type): + data = {"filename": filename, "subfolder": subfolder, "type": folder_type} + url_values = urllib.parse.urlencode(data) + with urllib.request.urlopen("http://{}/view?{}".format(self.server_address, url_values)) as response: + return response.read() + + def get_history(self, prompt_id): + with urllib.request.urlopen("http://{}/history/{}".format(self.server_address, prompt_id)) as response: + return json.loads(response.read()) + + def get_images(self, graph, save=True): + prompt = graph + if not save: + # Replace save nodes with preview nodes + prompt_str = json.dumps(prompt) + prompt_str = prompt_str.replace('SaveImage', 'PreviewImage') + prompt = json.loads(prompt_str) + + prompt_id = self.queue_prompt(prompt)['prompt_id'] + output_images = {} + while True: + out = self.ws.recv() + if isinstance(out, str): + message = json.loads(out) + if message['type'] == 'executing': + data = message['data'] + if data['node'] is None and data['prompt_id'] == prompt_id: + break #Execution is done + else: + continue #previews are binary data + + history = self.get_history(prompt_id)[prompt_id] + for node_id in history['outputs']: + node_output = history['outputs'][node_id] + images_output = [] + if 'images' in node_output: + for image in node_output['images']: + image_data = self.get_image(image['filename'], image['subfolder'], image['type']) + images_output.append(image_data) + output_images[node_id] = images_output + + return output_images + +# +# Initialize graphs +# +default_graph_file = 'tests/inference/graphs/default_graph_sdxl1_0.json' +with open(default_graph_file, 'r') as file: + default_graph = json.loads(file.read()) +DEFAULT_COMFY_GRAPH = ComfyGraph(graph=default_graph, sampler_nodes=['10','14']) +DEFAULT_COMFY_GRAPH_ID = os.path.splitext(os.path.basename(default_graph_file))[0] + +# +# Loop through these variables +# +comfy_graph_list = [DEFAULT_COMFY_GRAPH] +comfy_graph_ids = [DEFAULT_COMFY_GRAPH_ID] +prompt_list = [ + 'a painting of a cat', +] + +sampler_list = KSampler.SAMPLERS +scheduler_list = KSampler.SCHEDULERS + +@pytest.mark.inference +@pytest.mark.parametrize("sampler", sampler_list) +@pytest.mark.parametrize("scheduler", scheduler_list) +@pytest.mark.parametrize("prompt", prompt_list) +class TestInference: + # + # Initialize server and client + # + @fixture(scope="class", autouse=True) + def _server(self, args_pytest): + # Start server + p = subprocess.Popen([ + 'python','main.py', + '--output-directory', args_pytest["output_dir"], + '--listen', args_pytest["listen"], + '--port', str(args_pytest["port"]), + ]) + yield + p.kill() + torch.cuda.empty_cache() + + def start_client(self, listen:str, port:int): + # Start client + comfy_client = ComfyClient() + # Connect to server (with retries) + n_tries = 5 + for i in range(n_tries): + time.sleep(4) + try: + comfy_client.connect(listen=listen, port=port) + except ConnectionRefusedError as e: + print(e) # noqa: T201 + print(f"({i+1}/{n_tries}) Retrying...") # noqa: T201 + else: + break + return comfy_client + + # + # Client and graph fixtures with server warmup + # + # Returns a "_client_graph", which is client-graph pair corresponding to an initialized server + # The "graph" is the default graph + @fixture(scope="class", params=comfy_graph_list, ids=comfy_graph_ids, autouse=True) + def _client_graph(self, request, args_pytest, _server) -> (ComfyClient, ComfyGraph): + comfy_graph = request.param + + # Start client + comfy_client = self.start_client(args_pytest["listen"], args_pytest["port"]) + + # Warm up pipeline + comfy_client.get_images(graph=comfy_graph.graph, save=False) + + yield comfy_client, comfy_graph + del comfy_client + del comfy_graph + torch.cuda.empty_cache() + + @fixture + def client(self, _client_graph): + client = _client_graph[0] + yield client + + @fixture + def comfy_graph(self, _client_graph): + # avoid mutating the graph + graph = deepcopy(_client_graph[1]) + yield graph + + def test_comfy( + self, + client, + comfy_graph, + sampler, + scheduler, + prompt, + request + ): + test_info = request.node.name + comfy_graph.set_filename_prefix(test_info) + # Settings for comfy graph + comfy_graph.set_sampler_name(sampler) + comfy_graph.set_scheduler(scheduler) + comfy_graph.set_prompt(prompt) + + # Generate + images = client.get_images(comfy_graph.graph) + + assert len(images) != 0, "No images generated" + # assert all images are not blank + for images_output in images.values(): + for image_data in images_output: + pil_image = Image.open(BytesIO(image_data)) + assert numpy.array(pil_image).any() != 0, "Image is blank" + + diff --git a/tests/inference/testing_nodes/testing-pack/__init__.py b/tests/inference/testing_nodes/testing-pack/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..dcc71659a027c4a99d2e85ae1880f8fe7174e329 --- /dev/null +++ b/tests/inference/testing_nodes/testing-pack/__init__.py @@ -0,0 +1,23 @@ +from .specific_tests import TEST_NODE_CLASS_MAPPINGS, TEST_NODE_DISPLAY_NAME_MAPPINGS +from .flow_control import FLOW_CONTROL_NODE_CLASS_MAPPINGS, FLOW_CONTROL_NODE_DISPLAY_NAME_MAPPINGS +from .util import UTILITY_NODE_CLASS_MAPPINGS, UTILITY_NODE_DISPLAY_NAME_MAPPINGS +from .conditions import CONDITION_NODE_CLASS_MAPPINGS, CONDITION_NODE_DISPLAY_NAME_MAPPINGS +from .stubs import TEST_STUB_NODE_CLASS_MAPPINGS, TEST_STUB_NODE_DISPLAY_NAME_MAPPINGS + +# NODE_CLASS_MAPPINGS = GENERAL_NODE_CLASS_MAPPINGS.update(COMPONENT_NODE_CLASS_MAPPINGS) +# NODE_DISPLAY_NAME_MAPPINGS = GENERAL_NODE_DISPLAY_NAME_MAPPINGS.update(COMPONENT_NODE_DISPLAY_NAME_MAPPINGS) + +NODE_CLASS_MAPPINGS = {} +NODE_CLASS_MAPPINGS.update(TEST_NODE_CLASS_MAPPINGS) +NODE_CLASS_MAPPINGS.update(FLOW_CONTROL_NODE_CLASS_MAPPINGS) +NODE_CLASS_MAPPINGS.update(UTILITY_NODE_CLASS_MAPPINGS) +NODE_CLASS_MAPPINGS.update(CONDITION_NODE_CLASS_MAPPINGS) +NODE_CLASS_MAPPINGS.update(TEST_STUB_NODE_CLASS_MAPPINGS) + +NODE_DISPLAY_NAME_MAPPINGS = {} +NODE_DISPLAY_NAME_MAPPINGS.update(TEST_NODE_DISPLAY_NAME_MAPPINGS) +NODE_DISPLAY_NAME_MAPPINGS.update(FLOW_CONTROL_NODE_DISPLAY_NAME_MAPPINGS) +NODE_DISPLAY_NAME_MAPPINGS.update(UTILITY_NODE_DISPLAY_NAME_MAPPINGS) +NODE_DISPLAY_NAME_MAPPINGS.update(CONDITION_NODE_DISPLAY_NAME_MAPPINGS) +NODE_DISPLAY_NAME_MAPPINGS.update(TEST_STUB_NODE_DISPLAY_NAME_MAPPINGS) + diff --git a/tests/inference/testing_nodes/testing-pack/conditions.py b/tests/inference/testing_nodes/testing-pack/conditions.py new file mode 100644 index 0000000000000000000000000000000000000000..0c200ee2892d4747d9ec6965b6d33f2223e3c08a --- /dev/null +++ b/tests/inference/testing_nodes/testing-pack/conditions.py @@ -0,0 +1,194 @@ +import re +import torch + +class TestIntConditions: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "a": ("INT", {"default": 0, "min": -0xffffffffffffffff, "max": 0xffffffffffffffff, "step": 1}), + "b": ("INT", {"default": 0, "min": -0xffffffffffffffff, "max": 0xffffffffffffffff, "step": 1}), + "operation": (["==", "!=", "<", ">", "<=", ">="],), + }, + } + + RETURN_TYPES = ("BOOLEAN",) + FUNCTION = "int_condition" + + CATEGORY = "Testing/Logic" + + def int_condition(self, a, b, operation): + if operation == "==": + return (a == b,) + elif operation == "!=": + return (a != b,) + elif operation == "<": + return (a < b,) + elif operation == ">": + return (a > b,) + elif operation == "<=": + return (a <= b,) + elif operation == ">=": + return (a >= b,) + + +class TestFloatConditions: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "a": ("FLOAT", {"default": 0, "min": -999999999999.0, "max": 999999999999.0, "step": 1}), + "b": ("FLOAT", {"default": 0, "min": -999999999999.0, "max": 999999999999.0, "step": 1}), + "operation": (["==", "!=", "<", ">", "<=", ">="],), + }, + } + + RETURN_TYPES = ("BOOLEAN",) + FUNCTION = "float_condition" + + CATEGORY = "Testing/Logic" + + def float_condition(self, a, b, operation): + if operation == "==": + return (a == b,) + elif operation == "!=": + return (a != b,) + elif operation == "<": + return (a < b,) + elif operation == ">": + return (a > b,) + elif operation == "<=": + return (a <= b,) + elif operation == ">=": + return (a >= b,) + +class TestStringConditions: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "a": ("STRING", {"multiline": False}), + "b": ("STRING", {"multiline": False}), + "operation": (["a == b", "a != b", "a IN b", "a MATCH REGEX(b)", "a BEGINSWITH b", "a ENDSWITH b"],), + "case_sensitive": ("BOOLEAN", {"default": True}), + }, + } + + RETURN_TYPES = ("BOOLEAN",) + FUNCTION = "string_condition" + + CATEGORY = "Testing/Logic" + + def string_condition(self, a, b, operation, case_sensitive): + if not case_sensitive: + a = a.lower() + b = b.lower() + + if operation == "a == b": + return (a == b,) + elif operation == "a != b": + return (a != b,) + elif operation == "a IN b": + return (a in b,) + elif operation == "a MATCH REGEX(b)": + try: + return (re.match(b, a) is not None,) + except: + return (False,) + elif operation == "a BEGINSWITH b": + return (a.startswith(b),) + elif operation == "a ENDSWITH b": + return (a.endswith(b),) + +class TestToBoolNode: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "value": ("*",), + }, + "optional": { + "invert": ("BOOLEAN", {"default": False}), + }, + } + + RETURN_TYPES = ("BOOLEAN",) + FUNCTION = "to_bool" + + CATEGORY = "Testing/Logic" + + def to_bool(self, value, invert = False): + if isinstance(value, torch.Tensor): + if value.max().item() == 0 and value.min().item() == 0: + result = False + else: + result = True + else: + try: + result = bool(value) + except: + # Can't convert it? Well then it's something or other. I dunno, I'm not a Python programmer. + result = True + + if invert: + result = not result + + return (result,) + +class TestBoolOperationNode: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "a": ("BOOLEAN",), + "b": ("BOOLEAN",), + "op": (["a AND b", "a OR b", "a XOR b", "NOT a"],), + }, + } + + RETURN_TYPES = ("BOOLEAN",) + FUNCTION = "bool_operation" + + CATEGORY = "Testing/Logic" + + def bool_operation(self, a, b, op): + if op == "a AND b": + return (a and b,) + elif op == "a OR b": + return (a or b,) + elif op == "a XOR b": + return (a ^ b,) + elif op == "NOT a": + return (not a,) + + +CONDITION_NODE_CLASS_MAPPINGS = { + "TestIntConditions": TestIntConditions, + "TestFloatConditions": TestFloatConditions, + "TestStringConditions": TestStringConditions, + "TestToBoolNode": TestToBoolNode, + "TestBoolOperationNode": TestBoolOperationNode, +} + +CONDITION_NODE_DISPLAY_NAME_MAPPINGS = { + "TestIntConditions": "Int Condition", + "TestFloatConditions": "Float Condition", + "TestStringConditions": "String Condition", + "TestToBoolNode": "To Bool", + "TestBoolOperationNode": "Bool Operation", +} diff --git a/tests/inference/testing_nodes/testing-pack/flow_control.py b/tests/inference/testing_nodes/testing-pack/flow_control.py new file mode 100644 index 0000000000000000000000000000000000000000..ba943be6072f2003ebe1e6aa996d2dd8370c8c09 --- /dev/null +++ b/tests/inference/testing_nodes/testing-pack/flow_control.py @@ -0,0 +1,173 @@ +from comfy_execution.graph_utils import GraphBuilder, is_link +from comfy_execution.graph import ExecutionBlocker +from .tools import VariantSupport + +NUM_FLOW_SOCKETS = 5 +@VariantSupport() +class TestWhileLoopOpen: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + inputs = { + "required": { + "condition": ("BOOLEAN", {"default": True}), + }, + "optional": { + }, + } + for i in range(NUM_FLOW_SOCKETS): + inputs["optional"][f"initial_value{i}"] = ("*",) + return inputs + + RETURN_TYPES = tuple(["FLOW_CONTROL"] + ["*"] * NUM_FLOW_SOCKETS) + RETURN_NAMES = tuple(["FLOW_CONTROL"] + [f"value{i}" for i in range(NUM_FLOW_SOCKETS)]) + FUNCTION = "while_loop_open" + + CATEGORY = "Testing/Flow" + + def while_loop_open(self, condition, **kwargs): + values = [] + for i in range(NUM_FLOW_SOCKETS): + values.append(kwargs.get(f"initial_value{i}", None)) + return tuple(["stub"] + values) + +@VariantSupport() +class TestWhileLoopClose: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + inputs = { + "required": { + "flow_control": ("FLOW_CONTROL", {"rawLink": True}), + "condition": ("BOOLEAN", {"forceInput": True}), + }, + "optional": { + }, + "hidden": { + "dynprompt": "DYNPROMPT", + "unique_id": "UNIQUE_ID", + } + } + for i in range(NUM_FLOW_SOCKETS): + inputs["optional"][f"initial_value{i}"] = ("*",) + return inputs + + RETURN_TYPES = tuple(["*"] * NUM_FLOW_SOCKETS) + RETURN_NAMES = tuple([f"value{i}" for i in range(NUM_FLOW_SOCKETS)]) + FUNCTION = "while_loop_close" + + CATEGORY = "Testing/Flow" + + def explore_dependencies(self, node_id, dynprompt, upstream): + node_info = dynprompt.get_node(node_id) + if "inputs" not in node_info: + return + for k, v in node_info["inputs"].items(): + if is_link(v): + parent_id = v[0] + if parent_id not in upstream: + upstream[parent_id] = [] + self.explore_dependencies(parent_id, dynprompt, upstream) + upstream[parent_id].append(node_id) + + def collect_contained(self, node_id, upstream, contained): + if node_id not in upstream: + return + for child_id in upstream[node_id]: + if child_id not in contained: + contained[child_id] = True + self.collect_contained(child_id, upstream, contained) + + + def while_loop_close(self, flow_control, condition, dynprompt=None, unique_id=None, **kwargs): + assert dynprompt is not None + if not condition: + # We're done with the loop + values = [] + for i in range(NUM_FLOW_SOCKETS): + values.append(kwargs.get(f"initial_value{i}", None)) + return tuple(values) + + # We want to loop + upstream = {} + # Get the list of all nodes between the open and close nodes + self.explore_dependencies(unique_id, dynprompt, upstream) + + contained = {} + open_node = flow_control[0] + self.collect_contained(open_node, upstream, contained) + contained[unique_id] = True + contained[open_node] = True + + # We'll use the default prefix, but to avoid having node names grow exponentially in size, + # we'll use "Recurse" for the name of the recursively-generated copy of this node. + graph = GraphBuilder() + for node_id in contained: + original_node = dynprompt.get_node(node_id) + node = graph.node(original_node["class_type"], "Recurse" if node_id == unique_id else node_id) + node.set_override_display_id(node_id) + for node_id in contained: + original_node = dynprompt.get_node(node_id) + node = graph.lookup_node("Recurse" if node_id == unique_id else node_id) + assert node is not None + for k, v in original_node["inputs"].items(): + if is_link(v) and v[0] in contained: + parent = graph.lookup_node(v[0]) + assert parent is not None + node.set_input(k, parent.out(v[1])) + else: + node.set_input(k, v) + new_open = graph.lookup_node(open_node) + assert new_open is not None + for i in range(NUM_FLOW_SOCKETS): + key = f"initial_value{i}" + new_open.set_input(key, kwargs.get(key, None)) + my_clone = graph.lookup_node("Recurse") + assert my_clone is not None + result = map(lambda x: my_clone.out(x), range(NUM_FLOW_SOCKETS)) + return { + "result": tuple(result), + "expand": graph.finalize(), + } + +@VariantSupport() +class TestExecutionBlockerNode: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + inputs = { + "required": { + "input": ("*",), + "block": ("BOOLEAN",), + "verbose": ("BOOLEAN", {"default": False}), + }, + } + return inputs + + RETURN_TYPES = ("*",) + RETURN_NAMES = ("output",) + FUNCTION = "execution_blocker" + + CATEGORY = "Testing/Flow" + + def execution_blocker(self, input, block, verbose): + if block: + return (ExecutionBlocker("Blocked Execution" if verbose else None),) + return (input,) + +FLOW_CONTROL_NODE_CLASS_MAPPINGS = { + "TestWhileLoopOpen": TestWhileLoopOpen, + "TestWhileLoopClose": TestWhileLoopClose, + "TestExecutionBlocker": TestExecutionBlockerNode, +} +FLOW_CONTROL_NODE_DISPLAY_NAME_MAPPINGS = { + "TestWhileLoopOpen": "While Loop Open", + "TestWhileLoopClose": "While Loop Close", + "TestExecutionBlocker": "Execution Blocker", +} diff --git a/tests/inference/testing_nodes/testing-pack/specific_tests.py b/tests/inference/testing_nodes/testing-pack/specific_tests.py new file mode 100644 index 0000000000000000000000000000000000000000..9d05ab14ff0e273eabed37d68847df43fe87fc27 --- /dev/null +++ b/tests/inference/testing_nodes/testing-pack/specific_tests.py @@ -0,0 +1,362 @@ +import torch +from .tools import VariantSupport +from comfy_execution.graph_utils import GraphBuilder + +class TestLazyMixImages: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "image1": ("IMAGE",{"lazy": True}), + "image2": ("IMAGE",{"lazy": True}), + "mask": ("MASK",), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "mix" + + CATEGORY = "Testing/Nodes" + + def check_lazy_status(self, mask, image1, image2): + mask_min = mask.min() + mask_max = mask.max() + needed = [] + if image1 is None and (mask_min != 1.0 or mask_max != 1.0): + needed.append("image1") + if image2 is None and (mask_min != 0.0 or mask_max != 0.0): + needed.append("image2") + return needed + + # Not trying to handle different batch sizes here just to keep the demo simple + def mix(self, mask, image1, image2): + mask_min = mask.min() + mask_max = mask.max() + if mask_min == 0.0 and mask_max == 0.0: + return (image1,) + elif mask_min == 1.0 and mask_max == 1.0: + return (image2,) + + if len(mask.shape) == 2: + mask = mask.unsqueeze(0) + if len(mask.shape) == 3: + mask = mask.unsqueeze(3) + if mask.shape[3] < image1.shape[3]: + mask = mask.repeat(1, 1, 1, image1.shape[3]) + + result = image1 * (1. - mask) + image2 * mask, + return (result[0],) + +class TestVariadicAverage: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "input1": ("IMAGE",), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "variadic_average" + + CATEGORY = "Testing/Nodes" + + def variadic_average(self, input1, **kwargs): + inputs = [input1] + while 'input' + str(len(inputs) + 1) in kwargs: + inputs.append(kwargs['input' + str(len(inputs) + 1)]) + return (torch.stack(inputs).mean(dim=0),) + + +class TestCustomIsChanged: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "image": ("IMAGE",), + }, + "optional": { + "should_change": ("BOOL", {"default": False}), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "custom_is_changed" + + CATEGORY = "Testing/Nodes" + + def custom_is_changed(self, image, should_change=False): + return (image,) + + @classmethod + def IS_CHANGED(cls, should_change=False, *args, **kwargs): + if should_change: + return float("NaN") + else: + return False + +class TestIsChangedWithConstants: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "image": ("IMAGE",), + "value": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0}), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "custom_is_changed" + + CATEGORY = "Testing/Nodes" + + def custom_is_changed(self, image, value): + return (image * value,) + + @classmethod + def IS_CHANGED(cls, image, value): + if image is None: + return value + else: + return image.mean().item() * value + +class TestCustomValidation1: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "input1": ("IMAGE,FLOAT",), + "input2": ("IMAGE,FLOAT",), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "custom_validation1" + + CATEGORY = "Testing/Nodes" + + def custom_validation1(self, input1, input2): + if isinstance(input1, float) and isinstance(input2, float): + result = torch.ones([1, 512, 512, 3]) * input1 * input2 + else: + result = input1 * input2 + return (result,) + + @classmethod + def VALIDATE_INPUTS(cls, input1=None, input2=None): + if input1 is not None: + if not isinstance(input1, (torch.Tensor, float)): + return f"Invalid type of input1: {type(input1)}" + if input2 is not None: + if not isinstance(input2, (torch.Tensor, float)): + return f"Invalid type of input2: {type(input2)}" + + return True + +class TestCustomValidation2: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "input1": ("IMAGE,FLOAT",), + "input2": ("IMAGE,FLOAT",), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "custom_validation2" + + CATEGORY = "Testing/Nodes" + + def custom_validation2(self, input1, input2): + if isinstance(input1, float) and isinstance(input2, float): + result = torch.ones([1, 512, 512, 3]) * input1 * input2 + else: + result = input1 * input2 + return (result,) + + @classmethod + def VALIDATE_INPUTS(cls, input_types, input1=None, input2=None): + if input1 is not None: + if not isinstance(input1, (torch.Tensor, float)): + return f"Invalid type of input1: {type(input1)}" + if input2 is not None: + if not isinstance(input2, (torch.Tensor, float)): + return f"Invalid type of input2: {type(input2)}" + + if 'input1' in input_types: + if input_types['input1'] not in ["IMAGE", "FLOAT"]: + return f"Invalid type of input1: {input_types['input1']}" + if 'input2' in input_types: + if input_types['input2'] not in ["IMAGE", "FLOAT"]: + return f"Invalid type of input2: {input_types['input2']}" + + return True + +@VariantSupport() +class TestCustomValidation3: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "input1": ("IMAGE,FLOAT",), + "input2": ("IMAGE,FLOAT",), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "custom_validation3" + + CATEGORY = "Testing/Nodes" + + def custom_validation3(self, input1, input2): + if isinstance(input1, float) and isinstance(input2, float): + result = torch.ones([1, 512, 512, 3]) * input1 * input2 + else: + result = input1 * input2 + return (result,) + +class TestCustomValidation4: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "input1": ("FLOAT",), + "input2": ("FLOAT",), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "custom_validation4" + + CATEGORY = "Testing/Nodes" + + def custom_validation4(self, input1, input2): + result = torch.ones([1, 512, 512, 3]) * input1 * input2 + return (result,) + + @classmethod + def VALIDATE_INPUTS(cls, input1, input2): + if input1 is not None: + if not isinstance(input1, float): + return f"Invalid type of input1: {type(input1)}" + if input2 is not None: + if not isinstance(input2, float): + return f"Invalid type of input2: {type(input2)}" + + return True + +class TestCustomValidation5: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "input1": ("FLOAT", {"min": 0.0, "max": 1.0}), + "input2": ("FLOAT", {"min": 0.0, "max": 1.0}), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "custom_validation5" + + CATEGORY = "Testing/Nodes" + + def custom_validation5(self, input1, input2): + value = input1 * input2 + return (torch.ones([1, 512, 512, 3]) * value,) + + @classmethod + def VALIDATE_INPUTS(cls, **kwargs): + if kwargs['input2'] == 7.0: + return "7s are not allowed. I've never liked 7s." + return True + +class TestDynamicDependencyCycle: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "input1": ("IMAGE",), + "input2": ("IMAGE",), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "dynamic_dependency_cycle" + + CATEGORY = "Testing/Nodes" + + def dynamic_dependency_cycle(self, input1, input2): + g = GraphBuilder() + mask = g.node("StubMask", value=0.5, height=512, width=512, batch_size=1) + mix1 = g.node("TestLazyMixImages", image1=input1, mask=mask.out(0)) + mix2 = g.node("TestLazyMixImages", image1=mix1.out(0), image2=input2, mask=mask.out(0)) + + # Create the cyle + mix1.set_input("image2", mix2.out(0)) + + return { + "result": (mix2.out(0),), + "expand": g.finalize(), + } + +class TestMixedExpansionReturns: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "input1": ("FLOAT",), + }, + } + + RETURN_TYPES = ("IMAGE","IMAGE") + FUNCTION = "mixed_expansion_returns" + + CATEGORY = "Testing/Nodes" + + def mixed_expansion_returns(self, input1): + white_image = torch.ones([1, 512, 512, 3]) + if input1 <= 0.1: + return (torch.ones([1, 512, 512, 3]) * 0.1, white_image) + elif input1 <= 0.2: + return { + "result": (torch.ones([1, 512, 512, 3]) * 0.2, white_image), + } + else: + g = GraphBuilder() + mask = g.node("StubMask", value=0.3, height=512, width=512, batch_size=1) + black = g.node("StubImage", content="BLACK", height=512, width=512, batch_size=1) + white = g.node("StubImage", content="WHITE", height=512, width=512, batch_size=1) + mix = g.node("TestLazyMixImages", image1=black.out(0), image2=white.out(0), mask=mask.out(0)) + return { + "result": (mix.out(0), white_image), + "expand": g.finalize(), + } + +TEST_NODE_CLASS_MAPPINGS = { + "TestLazyMixImages": TestLazyMixImages, + "TestVariadicAverage": TestVariadicAverage, + "TestCustomIsChanged": TestCustomIsChanged, + "TestIsChangedWithConstants": TestIsChangedWithConstants, + "TestCustomValidation1": TestCustomValidation1, + "TestCustomValidation2": TestCustomValidation2, + "TestCustomValidation3": TestCustomValidation3, + "TestCustomValidation4": TestCustomValidation4, + "TestCustomValidation5": TestCustomValidation5, + "TestDynamicDependencyCycle": TestDynamicDependencyCycle, + "TestMixedExpansionReturns": TestMixedExpansionReturns, +} + +TEST_NODE_DISPLAY_NAME_MAPPINGS = { + "TestLazyMixImages": "Lazy Mix Images", + "TestVariadicAverage": "Variadic Average", + "TestCustomIsChanged": "Custom IsChanged", + "TestIsChangedWithConstants": "IsChanged With Constants", + "TestCustomValidation1": "Custom Validation 1", + "TestCustomValidation2": "Custom Validation 2", + "TestCustomValidation3": "Custom Validation 3", + "TestCustomValidation4": "Custom Validation 4", + "TestCustomValidation5": "Custom Validation 5", + "TestDynamicDependencyCycle": "Dynamic Dependency Cycle", + "TestMixedExpansionReturns": "Mixed Expansion Returns", +} diff --git a/tests/inference/testing_nodes/testing-pack/stubs.py b/tests/inference/testing_nodes/testing-pack/stubs.py new file mode 100644 index 0000000000000000000000000000000000000000..a1df87529c65ffa46db64cc197f54aef376ff8c0 --- /dev/null +++ b/tests/inference/testing_nodes/testing-pack/stubs.py @@ -0,0 +1,129 @@ +import torch + +class StubImage: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "content": (['WHITE', 'BLACK', 'NOISE'],), + "height": ("INT", {"default": 512, "min": 1, "max": 1024 ** 3, "step": 1}), + "width": ("INT", {"default": 512, "min": 1, "max": 4096 ** 3, "step": 1}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 1024 ** 3, "step": 1}), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "stub_image" + + CATEGORY = "Testing/Stub Nodes" + + def stub_image(self, content, height, width, batch_size): + if content == "WHITE": + return (torch.ones(batch_size, height, width, 3),) + elif content == "BLACK": + return (torch.zeros(batch_size, height, width, 3),) + elif content == "NOISE": + return (torch.rand(batch_size, height, width, 3),) + +class StubConstantImage: + def __init__(self): + pass + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "value": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "height": ("INT", {"default": 512, "min": 1, "max": 1024 ** 3, "step": 1}), + "width": ("INT", {"default": 512, "min": 1, "max": 4096 ** 3, "step": 1}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 1024 ** 3, "step": 1}), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "stub_constant_image" + + CATEGORY = "Testing/Stub Nodes" + + def stub_constant_image(self, value, height, width, batch_size): + return (torch.ones(batch_size, height, width, 3) * value,) + +class StubMask: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "value": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "height": ("INT", {"default": 512, "min": 1, "max": 1024 ** 3, "step": 1}), + "width": ("INT", {"default": 512, "min": 1, "max": 4096 ** 3, "step": 1}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 1024 ** 3, "step": 1}), + }, + } + + RETURN_TYPES = ("MASK",) + FUNCTION = "stub_mask" + + CATEGORY = "Testing/Stub Nodes" + + def stub_mask(self, value, height, width, batch_size): + return (torch.ones(batch_size, height, width) * value,) + +class StubInt: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "value": ("INT", {"default": 0, "min": -0xffffffff, "max": 0xffffffff, "step": 1}), + }, + } + + RETURN_TYPES = ("INT",) + FUNCTION = "stub_int" + + CATEGORY = "Testing/Stub Nodes" + + def stub_int(self, value): + return (value,) + +class StubFloat: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "value": ("FLOAT", {"default": 0.0, "min": -1.0e38, "max": 1.0e38, "step": 0.01}), + }, + } + + RETURN_TYPES = ("FLOAT",) + FUNCTION = "stub_float" + + CATEGORY = "Testing/Stub Nodes" + + def stub_float(self, value): + return (value,) + +TEST_STUB_NODE_CLASS_MAPPINGS = { + "StubImage": StubImage, + "StubConstantImage": StubConstantImage, + "StubMask": StubMask, + "StubInt": StubInt, + "StubFloat": StubFloat, +} +TEST_STUB_NODE_DISPLAY_NAME_MAPPINGS = { + "StubImage": "Stub Image", + "StubConstantImage": "Stub Constant Image", + "StubMask": "Stub Mask", + "StubInt": "Stub Int", + "StubFloat": "Stub Float", +} diff --git a/tests/inference/testing_nodes/testing-pack/tools.py b/tests/inference/testing_nodes/testing-pack/tools.py new file mode 100644 index 0000000000000000000000000000000000000000..34b28c0eb4892cdbc4e7575e651719f48ca917e9 --- /dev/null +++ b/tests/inference/testing_nodes/testing-pack/tools.py @@ -0,0 +1,53 @@ + +def MakeSmartType(t): + if isinstance(t, str): + return SmartType(t) + return t + +class SmartType(str): + def __ne__(self, other): + if self == "*" or other == "*": + return False + selfset = set(self.split(',')) + otherset = set(other.split(',')) + return not selfset.issubset(otherset) + +def VariantSupport(): + def decorator(cls): + if hasattr(cls, "INPUT_TYPES"): + old_input_types = getattr(cls, "INPUT_TYPES") + def new_input_types(*args, **kwargs): + types = old_input_types(*args, **kwargs) + for category in ["required", "optional"]: + if category not in types: + continue + for key, value in types[category].items(): + if isinstance(value, tuple): + types[category][key] = (MakeSmartType(value[0]),) + value[1:] + return types + setattr(cls, "INPUT_TYPES", new_input_types) + if hasattr(cls, "RETURN_TYPES"): + old_return_types = cls.RETURN_TYPES + setattr(cls, "RETURN_TYPES", tuple(MakeSmartType(x) for x in old_return_types)) + if hasattr(cls, "VALIDATE_INPUTS"): + # Reflection is used to determine what the function signature is, so we can't just change the function signature + raise NotImplementedError("VariantSupport does not support VALIDATE_INPUTS yet") + else: + def validate_inputs(input_types): + inputs = cls.INPUT_TYPES() + for key, value in input_types.items(): + if isinstance(value, SmartType): + continue + if "required" in inputs and key in inputs["required"]: + expected_type = inputs["required"][key][0] + elif "optional" in inputs and key in inputs["optional"]: + expected_type = inputs["optional"][key][0] + else: + expected_type = None + if expected_type is not None and MakeSmartType(value) != expected_type: + return f"Invalid type of {key}: {value} (expected {expected_type})" + return True + setattr(cls, "VALIDATE_INPUTS", validate_inputs) + return cls + return decorator + diff --git a/tests/inference/testing_nodes/testing-pack/util.py b/tests/inference/testing_nodes/testing-pack/util.py new file mode 100644 index 0000000000000000000000000000000000000000..17741c5f1dff2eeff86fec5173e675bf9ac6cf3b --- /dev/null +++ b/tests/inference/testing_nodes/testing-pack/util.py @@ -0,0 +1,364 @@ +from comfy_execution.graph_utils import GraphBuilder +from .tools import VariantSupport + +@VariantSupport() +class TestAccumulateNode: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "to_add": ("*",), + }, + "optional": { + "accumulation": ("ACCUMULATION",), + }, + } + + RETURN_TYPES = ("ACCUMULATION",) + FUNCTION = "accumulate" + + CATEGORY = "Testing/Lists" + + def accumulate(self, to_add, accumulation = None): + if accumulation is None: + value = [to_add] + else: + value = accumulation["accum"] + [to_add] + return ({"accum": value},) + +@VariantSupport() +class TestAccumulationHeadNode: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "accumulation": ("ACCUMULATION",), + }, + } + + RETURN_TYPES = ("ACCUMULATION", "*",) + FUNCTION = "accumulation_head" + + CATEGORY = "Testing/Lists" + + def accumulation_head(self, accumulation): + accum = accumulation["accum"] + if len(accum) == 0: + return (accumulation, None) + else: + return ({"accum": accum[1:]}, accum[0]) + +class TestAccumulationTailNode: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "accumulation": ("ACCUMULATION",), + }, + } + + RETURN_TYPES = ("ACCUMULATION", "*",) + FUNCTION = "accumulation_tail" + + CATEGORY = "Testing/Lists" + + def accumulation_tail(self, accumulation): + accum = accumulation["accum"] + if len(accum) == 0: + return (None, accumulation) + else: + return ({"accum": accum[:-1]}, accum[-1]) + +@VariantSupport() +class TestAccumulationToListNode: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "accumulation": ("ACCUMULATION",), + }, + } + + RETURN_TYPES = ("*",) + OUTPUT_IS_LIST = (True,) + + FUNCTION = "accumulation_to_list" + + CATEGORY = "Testing/Lists" + + def accumulation_to_list(self, accumulation): + return (accumulation["accum"],) + +@VariantSupport() +class TestListToAccumulationNode: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "list": ("*",), + }, + } + + RETURN_TYPES = ("ACCUMULATION",) + INPUT_IS_LIST = (True,) + + FUNCTION = "list_to_accumulation" + + CATEGORY = "Testing/Lists" + + def list_to_accumulation(self, list): + return ({"accum": list},) + +@VariantSupport() +class TestAccumulationGetLengthNode: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "accumulation": ("ACCUMULATION",), + }, + } + + RETURN_TYPES = ("INT",) + + FUNCTION = "accumlength" + + CATEGORY = "Testing/Lists" + + def accumlength(self, accumulation): + return (len(accumulation['accum']),) + +@VariantSupport() +class TestAccumulationGetItemNode: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "accumulation": ("ACCUMULATION",), + "index": ("INT", {"default":0, "step":1}) + }, + } + + RETURN_TYPES = ("*",) + + FUNCTION = "get_item" + + CATEGORY = "Testing/Lists" + + def get_item(self, accumulation, index): + return (accumulation['accum'][index],) + +@VariantSupport() +class TestAccumulationSetItemNode: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "accumulation": ("ACCUMULATION",), + "index": ("INT", {"default":0, "step":1}), + "value": ("*",), + }, + } + + RETURN_TYPES = ("ACCUMULATION",) + + FUNCTION = "set_item" + + CATEGORY = "Testing/Lists" + + def set_item(self, accumulation, index, value): + new_accum = accumulation['accum'][:] + new_accum[index] = value + return ({"accum": new_accum},) + +class TestIntMathOperation: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "a": ("INT", {"default": 0, "min": -0xffffffffffffffff, "max": 0xffffffffffffffff, "step": 1}), + "b": ("INT", {"default": 0, "min": -0xffffffffffffffff, "max": 0xffffffffffffffff, "step": 1}), + "operation": (["add", "subtract", "multiply", "divide", "modulo", "power"],), + }, + } + + RETURN_TYPES = ("INT",) + FUNCTION = "int_math_operation" + + CATEGORY = "Testing/Logic" + + def int_math_operation(self, a, b, operation): + if operation == "add": + return (a + b,) + elif operation == "subtract": + return (a - b,) + elif operation == "multiply": + return (a * b,) + elif operation == "divide": + return (a // b,) + elif operation == "modulo": + return (a % b,) + elif operation == "power": + return (a ** b,) + + +from .flow_control import NUM_FLOW_SOCKETS +@VariantSupport() +class TestForLoopOpen: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "remaining": ("INT", {"default": 1, "min": 0, "max": 100000, "step": 1}), + }, + "optional": { + f"initial_value{i}": ("*",) for i in range(1, NUM_FLOW_SOCKETS) + }, + "hidden": { + "initial_value0": ("*",) + } + } + + RETURN_TYPES = tuple(["FLOW_CONTROL", "INT",] + ["*"] * (NUM_FLOW_SOCKETS-1)) + RETURN_NAMES = tuple(["flow_control", "remaining"] + [f"value{i}" for i in range(1, NUM_FLOW_SOCKETS)]) + FUNCTION = "for_loop_open" + + CATEGORY = "Testing/Flow" + + def for_loop_open(self, remaining, **kwargs): + graph = GraphBuilder() + if "initial_value0" in kwargs: + remaining = kwargs["initial_value0"] + graph.node("TestWhileLoopOpen", condition=remaining, initial_value0=remaining, **{(f"initial_value{i}"): kwargs.get(f"initial_value{i}", None) for i in range(1, NUM_FLOW_SOCKETS)}) + outputs = [kwargs.get(f"initial_value{i}", None) for i in range(1, NUM_FLOW_SOCKETS)] + return { + "result": tuple(["stub", remaining] + outputs), + "expand": graph.finalize(), + } + +@VariantSupport() +class TestForLoopClose: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "flow_control": ("FLOW_CONTROL", {"rawLink": True}), + }, + "optional": { + f"initial_value{i}": ("*",{"rawLink": True}) for i in range(1, NUM_FLOW_SOCKETS) + }, + } + + RETURN_TYPES = tuple(["*"] * (NUM_FLOW_SOCKETS-1)) + RETURN_NAMES = tuple([f"value{i}" for i in range(1, NUM_FLOW_SOCKETS)]) + FUNCTION = "for_loop_close" + + CATEGORY = "Testing/Flow" + + def for_loop_close(self, flow_control, **kwargs): + graph = GraphBuilder() + while_open = flow_control[0] + sub = graph.node("TestIntMathOperation", operation="subtract", a=[while_open,1], b=1) + cond = graph.node("TestToBoolNode", value=sub.out(0)) + input_values = {f"initial_value{i}": kwargs.get(f"initial_value{i}", None) for i in range(1, NUM_FLOW_SOCKETS)} + while_close = graph.node("TestWhileLoopClose", + flow_control=flow_control, + condition=cond.out(0), + initial_value0=sub.out(0), + **input_values) + return { + "result": tuple([while_close.out(i) for i in range(1, NUM_FLOW_SOCKETS)]), + "expand": graph.finalize(), + } + +NUM_LIST_SOCKETS = 10 +@VariantSupport() +class TestMakeListNode: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "value1": ("*",), + }, + "optional": { + f"value{i}": ("*",) for i in range(1, NUM_LIST_SOCKETS) + }, + } + + RETURN_TYPES = ("*",) + FUNCTION = "make_list" + OUTPUT_IS_LIST = (True,) + + CATEGORY = "Testing/Lists" + + def make_list(self, **kwargs): + result = [] + for i in range(NUM_LIST_SOCKETS): + if f"value{i}" in kwargs: + result.append(kwargs[f"value{i}"]) + return (result,) + +UTILITY_NODE_CLASS_MAPPINGS = { + "TestAccumulateNode": TestAccumulateNode, + "TestAccumulationHeadNode": TestAccumulationHeadNode, + "TestAccumulationTailNode": TestAccumulationTailNode, + "TestAccumulationToListNode": TestAccumulationToListNode, + "TestListToAccumulationNode": TestListToAccumulationNode, + "TestAccumulationGetLengthNode": TestAccumulationGetLengthNode, + "TestAccumulationGetItemNode": TestAccumulationGetItemNode, + "TestAccumulationSetItemNode": TestAccumulationSetItemNode, + "TestForLoopOpen": TestForLoopOpen, + "TestForLoopClose": TestForLoopClose, + "TestIntMathOperation": TestIntMathOperation, + "TestMakeListNode": TestMakeListNode, +} +UTILITY_NODE_DISPLAY_NAME_MAPPINGS = { + "TestAccumulateNode": "Accumulate", + "TestAccumulationHeadNode": "Accumulation Head", + "TestAccumulationTailNode": "Accumulation Tail", + "TestAccumulationToListNode": "Accumulation to List", + "TestListToAccumulationNode": "List to Accumulation", + "TestAccumulationGetLengthNode": "Accumulation Get Length", + "TestAccumulationGetItemNode": "Accumulation Get Item", + "TestAccumulationSetItemNode": "Accumulation Set Item", + "TestForLoopOpen": "For Loop Open", + "TestForLoopClose": "For Loop Close", + "TestIntMathOperation": "Int Math Operation", + "TestMakeListNode": "Make List", +} diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/utils/extra_config.py b/utils/extra_config.py new file mode 100644 index 0000000000000000000000000000000000000000..d7b592855cdc061d6c7f4e75f603d34d2b57e406 --- /dev/null +++ b/utils/extra_config.py @@ -0,0 +1,33 @@ +import os +import yaml +import folder_paths +import logging + +def load_extra_path_config(yaml_path): + with open(yaml_path, 'r') as stream: + config = yaml.safe_load(stream) + yaml_dir = os.path.dirname(os.path.abspath(yaml_path)) + for c in config: + conf = config[c] + if conf is None: + continue + base_path = None + if "base_path" in conf: + base_path = conf.pop("base_path") + base_path = os.path.expandvars(os.path.expanduser(base_path)) + if not os.path.isabs(base_path): + base_path = os.path.abspath(os.path.join(yaml_dir, base_path)) + is_default = False + if "is_default" in conf: + is_default = conf.pop("is_default") + for x in conf: + for y in conf[x].split("\n"): + if len(y) == 0: + continue + full_path = y + if base_path: + full_path = os.path.join(base_path, full_path) + elif not os.path.isabs(full_path): + full_path = os.path.abspath(os.path.join(yaml_dir, y)) + logging.info("Adding extra search path {} {}".format(x, full_path)) + folder_paths.add_model_folder_path(x, full_path, is_default) diff --git a/utils/json_util.py b/utils/json_util.py new file mode 100644 index 0000000000000000000000000000000000000000..da45af4f74f386973d3f1968d88b083ca5906d81 --- /dev/null +++ b/utils/json_util.py @@ -0,0 +1,26 @@ +def merge_json_recursive(base, update): + """Recursively merge two JSON-like objects. + - Dictionaries are merged recursively + - Lists are concatenated + - Other types are overwritten by the update value + + Args: + base: Base JSON-like object + update: Update JSON-like object to merge into base + + Returns: + Merged JSON-like object + """ + if not isinstance(base, dict) or not isinstance(update, dict): + if isinstance(base, list) and isinstance(update, list): + return base + update + return update + + merged = base.copy() + for key, value in update.items(): + if key in merged: + merged[key] = merge_json_recursive(merged[key], value) + else: + merged[key] = value + + return merged diff --git a/web/assets/BaseViewTemplate-v6omkdXg.js b/web/assets/BaseViewTemplate-v6omkdXg.js new file mode 100644 index 0000000000000000000000000000000000000000..bc21d9896bb6725f04bd7038e7d5bd5552720f5e --- /dev/null +++ b/web/assets/BaseViewTemplate-v6omkdXg.js @@ -0,0 +1,51 @@ +import { d as defineComponent, U as ref, p as onMounted, b4 as isElectron, W as nextTick, b5 as electronAPI, o as openBlock, f as createElementBlock, i as withDirectives, v as vShow, j as unref, b6 as isNativeWindow, m as createBaseVNode, A as renderSlot, ai as normalizeClass } from "./index-4Hb32CNk.js"; +const _hoisted_1 = { class: "flex-grow w-full flex items-center justify-center overflow-auto" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "BaseViewTemplate", + props: { + dark: { type: Boolean, default: false } + }, + setup(__props) { + const props = __props; + const darkTheme = { + color: "rgba(0, 0, 0, 0)", + symbolColor: "#d4d4d4" + }; + const lightTheme = { + color: "rgba(0, 0, 0, 0)", + symbolColor: "#171717" + }; + const topMenuRef = ref(null); + onMounted(async () => { + if (isElectron()) { + await nextTick(); + electronAPI().changeTheme({ + ...props.dark ? darkTheme : lightTheme, + height: topMenuRef.value.getBoundingClientRect().height + }); + } + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", { + class: normalizeClass(["font-sans w-screen h-screen flex flex-col pointer-events-auto", [ + props.dark ? "text-neutral-300 bg-neutral-900 dark-theme" : "text-neutral-900 bg-neutral-300" + ]]) + }, [ + withDirectives(createBaseVNode("div", { + ref_key: "topMenuRef", + ref: topMenuRef, + class: "app-drag w-full h-[var(--comfy-topbar-height)]" + }, null, 512), [ + [vShow, unref(isNativeWindow)()] + ]), + createBaseVNode("div", _hoisted_1, [ + renderSlot(_ctx.$slots, "default") + ]) + ], 2); + }; + } +}); +export { + _sfc_main as _ +}; +//# sourceMappingURL=BaseViewTemplate-v6omkdXg.js.map diff --git a/web/assets/CREDIT.txt b/web/assets/CREDIT.txt new file mode 100644 index 0000000000000000000000000000000000000000..b3a9bc9067160ceee7daa08a07dbb068a4c5313a --- /dev/null +++ b/web/assets/CREDIT.txt @@ -0,0 +1 @@ +Thanks to OpenArt (https://openart.ai) for providing the sorted-custom-node-map data, captured in September 2024. \ No newline at end of file diff --git a/web/assets/DesktopStartView-coDnSXEF.js b/web/assets/DesktopStartView-coDnSXEF.js new file mode 100644 index 0000000000000000000000000000000000000000..db819985405a5951882911b941b0b277af901593 --- /dev/null +++ b/web/assets/DesktopStartView-coDnSXEF.js @@ -0,0 +1,22 @@ +import { d as defineComponent, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, k as createVNode, j as unref, bz as script } from "./index-4Hb32CNk.js"; +import { _ as _sfc_main$1 } from "./BaseViewTemplate-v6omkdXg.js"; +const _hoisted_1 = { class: "max-w-screen-sm w-screen p-8" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "DesktopStartView", + setup(__props) { + return (_ctx, _cache) => { + return openBlock(), createBlock(_sfc_main$1, { dark: "" }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + createVNode(unref(script), { mode: "indeterminate" }) + ]) + ]), + _: 1 + }); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=DesktopStartView-coDnSXEF.js.map diff --git a/web/assets/DownloadGitView-3STu4yxt.js b/web/assets/DownloadGitView-3STu4yxt.js new file mode 100644 index 0000000000000000000000000000000000000000..be7ac0dfd1dce688967d943e3031b92b4b211e2e --- /dev/null +++ b/web/assets/DownloadGitView-3STu4yxt.js @@ -0,0 +1,58 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { d as defineComponent, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, l as script, be as useRouter } from "./index-4Hb32CNk.js"; +import { _ as _sfc_main$1 } from "./BaseViewTemplate-v6omkdXg.js"; +const _hoisted_1 = { class: "max-w-screen-sm flex flex-col gap-8 p-8 bg-[url('/assets/images/Git-Logo-White.svg')] bg-no-repeat bg-right-top bg-origin-padding" }; +const _hoisted_2 = { class: "mt-24 text-4xl font-bold text-red-500" }; +const _hoisted_3 = { class: "space-y-4" }; +const _hoisted_4 = { class: "text-xl" }; +const _hoisted_5 = { class: "text-xl" }; +const _hoisted_6 = { class: "text-m" }; +const _hoisted_7 = { class: "flex gap-4 flex-row-reverse" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "DownloadGitView", + setup(__props) { + const openGitDownloads = /* @__PURE__ */ __name(() => { + window.open("https://git-scm.com/downloads/", "_blank"); + }, "openGitDownloads"); + const skipGit = /* @__PURE__ */ __name(() => { + console.warn("pushing"); + const router = useRouter(); + router.push("install"); + }, "skipGit"); + return (_ctx, _cache) => { + return openBlock(), createBlock(_sfc_main$1, null, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + createBaseVNode("h1", _hoisted_2, toDisplayString(_ctx.$t("downloadGit.title")), 1), + createBaseVNode("div", _hoisted_3, [ + createBaseVNode("p", _hoisted_4, toDisplayString(_ctx.$t("downloadGit.message")), 1), + createBaseVNode("p", _hoisted_5, toDisplayString(_ctx.$t("downloadGit.instructions")), 1), + createBaseVNode("p", _hoisted_6, toDisplayString(_ctx.$t("downloadGit.warning")), 1) + ]), + createBaseVNode("div", _hoisted_7, [ + createVNode(unref(script), { + label: _ctx.$t("downloadGit.gitWebsite"), + icon: "pi pi-external-link", + "icon-pos": "right", + onClick: openGitDownloads, + severity: "primary" + }, null, 8, ["label"]), + createVNode(unref(script), { + label: _ctx.$t("downloadGit.skip"), + icon: "pi pi-exclamation-triangle", + onClick: skipGit, + severity: "secondary" + }, null, 8, ["label"]) + ]) + ]) + ]), + _: 1 + }); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=DownloadGitView-3STu4yxt.js.map diff --git a/web/assets/ExtensionPanel-GE0aOkbr.js b/web/assets/ExtensionPanel-GE0aOkbr.js new file mode 100644 index 0000000000000000000000000000000000000000..8fa78029e637bae26041f9f32f46ef2f16435e83 --- /dev/null +++ b/web/assets/ExtensionPanel-GE0aOkbr.js @@ -0,0 +1,182 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { d as defineComponent, U as ref, dl as FilterMatchMode, dr as useExtensionStore, a as useSettingStore, p as onMounted, c as computed, o as openBlock, y as createBlock, z as withCtx, k as createVNode, dm as SearchBox, j as unref, bj as script, m as createBaseVNode, f as createElementBlock, D as renderList, E as toDisplayString, a7 as createTextVNode, F as Fragment, l as script$1, B as createCommentVNode, a4 as script$3, ax as script$4, bn as script$5, dn as _sfc_main$1 } from "./index-4Hb32CNk.js"; +import { g as script$2, h as script$6 } from "./index-nJubvliG.js"; +import "./index-D6zf5KAf.js"; +const _hoisted_1 = { class: "flex justify-end" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "ExtensionPanel", + setup(__props) { + const filters = ref({ + global: { value: "", matchMode: FilterMatchMode.CONTAINS } + }); + const extensionStore = useExtensionStore(); + const settingStore = useSettingStore(); + const editingEnabledExtensions = ref({}); + onMounted(() => { + extensionStore.extensions.forEach((ext) => { + editingEnabledExtensions.value[ext.name] = extensionStore.isExtensionEnabled(ext.name); + }); + }); + const changedExtensions = computed(() => { + return extensionStore.extensions.filter( + (ext) => editingEnabledExtensions.value[ext.name] !== extensionStore.isExtensionEnabled(ext.name) + ); + }); + const hasChanges = computed(() => { + return changedExtensions.value.length > 0; + }); + const updateExtensionStatus = /* @__PURE__ */ __name(() => { + const editingDisabledExtensionNames = Object.entries( + editingEnabledExtensions.value + ).filter(([_, enabled]) => !enabled).map(([name]) => name); + settingStore.set("Comfy.Extension.Disabled", [ + ...extensionStore.inactiveDisabledExtensionNames, + ...editingDisabledExtensionNames + ]); + }, "updateExtensionStatus"); + const enableAllExtensions = /* @__PURE__ */ __name(() => { + extensionStore.extensions.forEach((ext) => { + if (extensionStore.isExtensionReadOnly(ext.name)) return; + editingEnabledExtensions.value[ext.name] = true; + }); + updateExtensionStatus(); + }, "enableAllExtensions"); + const disableAllExtensions = /* @__PURE__ */ __name(() => { + extensionStore.extensions.forEach((ext) => { + if (extensionStore.isExtensionReadOnly(ext.name)) return; + editingEnabledExtensions.value[ext.name] = false; + }); + updateExtensionStatus(); + }, "disableAllExtensions"); + const disableThirdPartyExtensions = /* @__PURE__ */ __name(() => { + extensionStore.extensions.forEach((ext) => { + if (extensionStore.isCoreExtension(ext.name)) return; + editingEnabledExtensions.value[ext.name] = false; + }); + updateExtensionStatus(); + }, "disableThirdPartyExtensions"); + const applyChanges = /* @__PURE__ */ __name(() => { + window.location.reload(); + }, "applyChanges"); + const menu = ref(); + const contextMenuItems = [ + { + label: "Enable All", + icon: "pi pi-check", + command: enableAllExtensions + }, + { + label: "Disable All", + icon: "pi pi-times", + command: disableAllExtensions + }, + { + label: "Disable 3rd Party", + icon: "pi pi-times", + command: disableThirdPartyExtensions, + disabled: !extensionStore.hasThirdPartyExtensions + } + ]; + return (_ctx, _cache) => { + return openBlock(), createBlock(_sfc_main$1, { + value: "Extension", + class: "extension-panel" + }, { + header: withCtx(() => [ + createVNode(SearchBox, { + modelValue: filters.value["global"].value, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => filters.value["global"].value = $event), + placeholder: _ctx.$t("g.searchExtensions") + "..." + }, null, 8, ["modelValue", "placeholder"]), + hasChanges.value ? (openBlock(), createBlock(unref(script), { + key: 0, + severity: "info", + "pt:text": "w-full", + class: "max-h-96 overflow-y-auto" + }, { + default: withCtx(() => [ + createBaseVNode("ul", null, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(changedExtensions.value, (ext) => { + return openBlock(), createElementBlock("li", { + key: ext.name + }, [ + createBaseVNode("span", null, toDisplayString(unref(extensionStore).isExtensionEnabled(ext.name) ? "[-]" : "[+]"), 1), + createTextVNode(" " + toDisplayString(ext.name), 1) + ]); + }), 128)) + ]), + createBaseVNode("div", _hoisted_1, [ + createVNode(unref(script$1), { + label: _ctx.$t("g.reloadToApplyChanges"), + onClick: applyChanges, + outlined: "", + severity: "danger" + }, null, 8, ["label"]) + ]) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + default: withCtx(() => [ + createVNode(unref(script$6), { + value: unref(extensionStore).extensions, + stripedRows: "", + size: "small", + filters: filters.value + }, { + default: withCtx(() => [ + createVNode(unref(script$2), { + header: _ctx.$t("g.extensionName"), + sortable: "", + field: "name" + }, { + body: withCtx((slotProps) => [ + createTextVNode(toDisplayString(slotProps.data.name) + " ", 1), + unref(extensionStore).isCoreExtension(slotProps.data.name) ? (openBlock(), createBlock(unref(script$3), { + key: 0, + value: "Core" + })) : createCommentVNode("", true) + ]), + _: 1 + }, 8, ["header"]), + createVNode(unref(script$2), { pt: { + headerCell: "flex items-center justify-end", + bodyCell: "flex items-center justify-end" + } }, { + header: withCtx(() => [ + createVNode(unref(script$1), { + icon: "pi pi-ellipsis-h", + text: "", + severity: "secondary", + onClick: _cache[1] || (_cache[1] = ($event) => menu.value.show($event)) + }), + createVNode(unref(script$4), { + ref_key: "menu", + ref: menu, + model: contextMenuItems + }, null, 512) + ]), + body: withCtx((slotProps) => [ + createVNode(unref(script$5), { + disabled: unref(extensionStore).isExtensionReadOnly(slotProps.data.name), + modelValue: editingEnabledExtensions.value[slotProps.data.name], + "onUpdate:modelValue": /* @__PURE__ */ __name(($event) => editingEnabledExtensions.value[slotProps.data.name] = $event, "onUpdate:modelValue"), + onChange: updateExtensionStatus + }, null, 8, ["disabled", "modelValue", "onUpdate:modelValue"]) + ]), + _: 1 + }) + ]), + _: 1 + }, 8, ["value", "filters"]) + ]), + _: 1 + }); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=ExtensionPanel-GE0aOkbr.js.map diff --git a/web/assets/GraphView-CUSGEqGS.js b/web/assets/GraphView-CUSGEqGS.js new file mode 100644 index 0000000000000000000000000000000000000000..3291a439e4b4a79598a5ca00331ccb4457f3604e --- /dev/null +++ b/web/assets/GraphView-CUSGEqGS.js @@ -0,0 +1,4682 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { d as defineComponent, u as useExecutionStore, c as computed, a as useSettingStore, b as useWorkflowStore, e as useTitle, o as openBlock, f as createElementBlock, g as useWorkspaceStore, w as watchEffect, h as app, r as resolveDirective, i as withDirectives, v as vShow, j as unref, k as createVNode, s as showNativeMenu, l as script, m as createBaseVNode, n as normalizeStyle, _ as _export_sfc, p as onMounted, q as onBeforeUnmount, t as useSidebarTabStore, x as useBottomPanelStore, y as createBlock, z as withCtx, A as renderSlot, B as createCommentVNode, C as resolveDynamicComponent, F as Fragment, D as renderList, E as toDisplayString, G as script$5, H as markRaw, I as defineStore, J as shallowRef, K as useI18n, L as useCommandStore, M as LiteGraph, N as useColorPaletteStore, O as watch, P as useNodeDefStore, Q as BadgePosition, R as LGraphBadge, S as _, T as NodeBadgeMode, U as ref, V as useEventListener, W as nextTick, X as st, Y as normalizeI18nKey, Z as LGraphGroup, $ as LGraphNode, a0 as EditableText, a1 as useNodeFrequencyStore, a2 as useNodeBookmarkStore, a3 as highlightQuery, a4 as script$8, a5 as formatNumberWithSuffix, a6 as NodeSourceType, a7 as createTextVNode, a8 as script$9, a9 as NodePreview, aa as NodeSearchFilter, ab as script$a, ac as SearchFilterChip, ad as useLitegraphService, ae as storeToRefs, af as isRef, ag as toRaw, ah as LinkReleaseTriggerAction, ai as normalizeClass, aj as useUserStore, ak as useDialogStore, al as SettingDialogHeader, am as SettingDialogContent, an as useKeybindingStore, ao as Teleport, ap as usePragmaticDraggable, aq as usePragmaticDroppable, ar as withModifiers, as as mergeProps, at as useWorkflowService, au as useWorkflowBookmarkStore, av as script$c, aw as script$d, ax as script$e, ay as LinkMarkerShape, az as useModelToNodeStore, aA as ComfyNodeDefImpl, aB as ComfyModelDef, aC as LGraph, aD as LLink, aE as DragAndScale, aF as LGraphCanvas, aG as ContextMenu, aH as api, aI as getStorageValue, aJ as useModelStore, aK as setStorageValue, aL as CanvasPointer, aM as IS_CONTROL_WIDGET, aN as updateControlWidgetLabel, aO as useColorPaletteService, aP as ChangeTracker, aQ as i18n, aR as useToast, aS as useToastStore, aT as useQueueSettingsStore, aU as script$g, aV as useQueuePendingTaskCountStore, aW as useLocalStorage, aX as useDraggable, aY as watchDebounced, aZ as inject, a_ as useElementBounding, a$ as script$i, b0 as lodashExports, b1 as useEventBus, b2 as useMenuItemStore, b3 as provide, b4 as isElectron, b5 as electronAPI, b6 as isNativeWindow, b7 as useDialogService, b8 as LGraphEventMode, b9 as useQueueStore, ba as DEFAULT_DARK_COLOR_PALETTE, bb as DEFAULT_LIGHT_COLOR_PALETTE, bc as t, bd as useErrorHandling } from "./index-4Hb32CNk.js"; +import { s as script$1, a as script$2, b as script$3, c as script$4, d as script$6, e as script$7, f as script$b, g as script$f, h as script$h, i as script$j } from "./index-D4CAJ2MK.js"; +import { u as useKeybindingService } from "./keybindingService-BTNdTpfl.js"; +import { u as useServerConfigStore } from "./serverConfigStore-BYbZcbWj.js"; +import "./index-D6zf5KAf.js"; +const DEFAULT_TITLE = "ComfyUI"; +const TITLE_SUFFIX = " - ComfyUI"; +const _sfc_main$u = /* @__PURE__ */ defineComponent({ + __name: "BrowserTabTitle", + setup(__props) { + const executionStore = useExecutionStore(); + const executionText = computed( + () => executionStore.isIdle ? "" : `[${executionStore.executionProgress}%]` + ); + const settingStore = useSettingStore(); + const betaMenuEnabled = computed( + () => settingStore.get("Comfy.UseNewMenu") !== "Disabled" + ); + const workflowStore = useWorkflowStore(); + const isUnsavedText = computed( + () => workflowStore.activeWorkflow?.isModified || !workflowStore.activeWorkflow?.isPersisted ? " *" : "" + ); + const workflowNameText = computed(() => { + const workflowName = workflowStore.activeWorkflow?.filename; + return workflowName ? isUnsavedText.value + workflowName + TITLE_SUFFIX : DEFAULT_TITLE; + }); + const nodeExecutionTitle = computed( + () => executionStore.executingNode && executionStore.executingNodeProgress ? `${executionText.value}[${executionStore.executingNodeProgress}%] ${executionStore.executingNode.type}` : "" + ); + const workflowTitle = computed( + () => executionText.value + (betaMenuEnabled.value ? workflowNameText.value : DEFAULT_TITLE) + ); + const title = computed(() => nodeExecutionTitle.value || workflowTitle.value); + useTitle(title); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div"); + }; + } +}); +const _hoisted_1$j = { class: "window-actions-spacer" }; +const _sfc_main$t = /* @__PURE__ */ defineComponent({ + __name: "MenuHamburger", + setup(__props) { + const workspaceState = useWorkspaceStore(); + const settingStore = useSettingStore(); + const exitFocusMode = /* @__PURE__ */ __name(() => { + workspaceState.focusMode = false; + }, "exitFocusMode"); + watchEffect(() => { + if (settingStore.get("Comfy.UseNewMenu") !== "Disabled") { + return; + } + if (workspaceState.focusMode) { + app.ui.menuContainer.style.display = "none"; + } else { + app.ui.menuContainer.style.display = "block"; + } + }); + const menuSetting = computed(() => settingStore.get("Comfy.UseNewMenu")); + const positionCSS = computed( + () => ( + // 'Bottom' menuSetting shows the hamburger button in the bottom right corner + // 'Disabled', 'Top' menuSetting shows the hamburger button in the top right corner + menuSetting.value === "Bottom" ? { bottom: "0px", right: "0px" } : { top: "0px", right: "0px" } + ) + ); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return withDirectives((openBlock(), createElementBlock("div", { + class: "comfy-menu-hamburger no-drag", + style: normalizeStyle(positionCSS.value) + }, [ + withDirectives(createVNode(unref(script), { + icon: "pi pi-bars", + severity: "secondary", + text: "", + size: "large", + "aria-label": _ctx.$t("menu.showMenu"), + "aria-live": "assertive", + onClick: exitFocusMode, + onContextmenu: unref(showNativeMenu) + }, null, 8, ["aria-label", "onContextmenu"]), [ + [_directive_tooltip, { value: _ctx.$t("menu.showMenu"), showDelay: 300 }] + ]), + withDirectives(createBaseVNode("div", _hoisted_1$j, null, 512), [ + [vShow, menuSetting.value !== "Bottom"] + ]) + ], 4)), [ + [vShow, unref(workspaceState).focusMode] + ]); + }; + } +}); +const MenuHamburger = /* @__PURE__ */ _export_sfc(_sfc_main$t, [["__scopeId", "data-v-7ed57d1a"]]); +const _sfc_main$s = /* @__PURE__ */ defineComponent({ + __name: "UnloadWindowConfirmDialog", + setup(__props) { + const settingStore = useSettingStore(); + const workflowStore = useWorkflowStore(); + const handleBeforeUnload = /* @__PURE__ */ __name((event) => { + if (settingStore.get("Comfy.Window.UnloadConfirmation") && workflowStore.modifiedWorkflows.length > 0) { + event.preventDefault(); + return true; + } + return void 0; + }, "handleBeforeUnload"); + onMounted(() => { + window.addEventListener("beforeunload", handleBeforeUnload); + }); + onBeforeUnmount(() => { + window.removeEventListener("beforeunload", handleBeforeUnload); + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div"); + }; + } +}); +const _sfc_main$r = /* @__PURE__ */ defineComponent({ + __name: "LiteGraphCanvasSplitterOverlay", + setup(__props) { + const settingStore = useSettingStore(); + const sidebarLocation = computed( + () => settingStore.get("Comfy.Sidebar.Location") + ); + const sidebarPanelVisible = computed( + () => useSidebarTabStore().activeSidebarTab !== null + ); + const bottomPanelVisible = computed( + () => useBottomPanelStore().bottomPanelVisible + ); + const activeSidebarTabId = computed( + () => useSidebarTabStore().activeSidebarTabId + ); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(script$2), { + class: "splitter-overlay-root splitter-overlay", + "pt:gutter": sidebarPanelVisible.value ? "" : "hidden", + key: activeSidebarTabId.value, + stateKey: activeSidebarTabId.value, + stateStorage: "local" + }, { + default: withCtx(() => [ + sidebarLocation.value === "left" ? withDirectives((openBlock(), createBlock(unref(script$1), { + key: 0, + class: "side-bar-panel", + minSize: 10, + size: 20 + }, { + default: withCtx(() => [ + renderSlot(_ctx.$slots, "side-bar-panel", {}, void 0, true) + ]), + _: 3 + }, 512)), [ + [vShow, sidebarPanelVisible.value] + ]) : createCommentVNode("", true), + createVNode(unref(script$1), { size: 100 }, { + default: withCtx(() => [ + createVNode(unref(script$2), { + class: "splitter-overlay max-w-full", + layout: "vertical", + "pt:gutter": bottomPanelVisible.value ? "" : "hidden", + stateKey: "bottom-panel-splitter", + stateStorage: "local" + }, { + default: withCtx(() => [ + createVNode(unref(script$1), { class: "graph-canvas-panel relative" }, { + default: withCtx(() => [ + renderSlot(_ctx.$slots, "graph-canvas-panel", {}, void 0, true) + ]), + _: 3 + }), + withDirectives(createVNode(unref(script$1), { class: "bottom-panel" }, { + default: withCtx(() => [ + renderSlot(_ctx.$slots, "bottom-panel", {}, void 0, true) + ]), + _: 3 + }, 512), [ + [vShow, bottomPanelVisible.value] + ]) + ]), + _: 3 + }, 8, ["pt:gutter"]) + ]), + _: 3 + }), + sidebarLocation.value === "right" ? withDirectives((openBlock(), createBlock(unref(script$1), { + key: 1, + class: "side-bar-panel", + minSize: 10, + size: 20 + }, { + default: withCtx(() => [ + renderSlot(_ctx.$slots, "side-bar-panel", {}, void 0, true) + ]), + _: 3 + }, 512)), [ + [vShow, sidebarPanelVisible.value] + ]) : createCommentVNode("", true) + ]), + _: 3 + }, 8, ["pt:gutter", "stateKey"]); + }; + } +}); +const LiteGraphCanvasSplitterOverlay = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["__scopeId", "data-v-e50caa15"]]); +const _sfc_main$q = /* @__PURE__ */ defineComponent({ + __name: "ExtensionSlot", + props: { + extension: {} + }, + setup(__props) { + const props = __props; + const mountCustomExtension = /* @__PURE__ */ __name((extension, el) => { + extension.render(el); + }, "mountCustomExtension"); + onBeforeUnmount(() => { + if (props.extension.type === "custom" && props.extension.destroy) { + props.extension.destroy(); + } + }); + return (_ctx, _cache) => { + return _ctx.extension.type === "vue" ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.extension.component), { key: 0 })) : (openBlock(), createElementBlock("div", { + key: 1, + ref: /* @__PURE__ */ __name((el) => { + if (el) + mountCustomExtension( + props.extension, + el + ); + }, "ref") + }, null, 512)); + }; + } +}); +const _hoisted_1$i = { class: "flex flex-col h-full" }; +const _hoisted_2$6 = { class: "w-full flex justify-between" }; +const _hoisted_3$5 = { class: "tabs-container" }; +const _hoisted_4$1 = { class: "font-bold" }; +const _hoisted_5$1 = { class: "flex-grow h-0" }; +const _sfc_main$p = /* @__PURE__ */ defineComponent({ + __name: "BottomPanel", + setup(__props) { + const bottomPanelStore = useBottomPanelStore(); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$i, [ + createVNode(unref(script$5), { + value: unref(bottomPanelStore).activeBottomPanelTabId, + "onUpdate:value": _cache[1] || (_cache[1] = ($event) => unref(bottomPanelStore).activeBottomPanelTabId = $event) + }, { + default: withCtx(() => [ + createVNode(unref(script$3), { "pt:tabList": "border-none" }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_2$6, [ + createBaseVNode("div", _hoisted_3$5, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(unref(bottomPanelStore).bottomPanelTabs, (tab) => { + return openBlock(), createBlock(unref(script$4), { + key: tab.id, + value: tab.id, + class: "p-3 border-none" + }, { + default: withCtx(() => [ + createBaseVNode("span", _hoisted_4$1, toDisplayString(tab.title.toUpperCase()), 1) + ]), + _: 2 + }, 1032, ["value"]); + }), 128)) + ]), + createVNode(unref(script), { + class: "justify-self-end", + icon: "pi pi-times", + severity: "secondary", + size: "small", + text: "", + onClick: _cache[0] || (_cache[0] = ($event) => unref(bottomPanelStore).bottomPanelVisible = false) + }) + ]) + ]), + _: 1 + }) + ]), + _: 1 + }, 8, ["value"]), + createBaseVNode("div", _hoisted_5$1, [ + unref(bottomPanelStore).bottomPanelVisible && unref(bottomPanelStore).activeBottomPanelTab ? (openBlock(), createBlock(_sfc_main$q, { + key: 0, + extension: unref(bottomPanelStore).activeBottomPanelTab + }, null, 8, ["extension"])) : createCommentVNode("", true) + ]) + ]); + }; + } +}); +const _hoisted_1$h = { + viewBox: "0 0 1024 1024", + width: "1.2em", + height: "1.2em" +}; +function render$7(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$h, _cache[0] || (_cache[0] = [ + createBaseVNode("path", { + fill: "currentColor", + d: "M921.088 103.232L584.832 889.024L465.52 544.512L121.328 440.48zM1004.46.769c-6.096 0-13.52 1.728-22.096 5.36L27.708 411.2c-34.383 14.592-36.56 42.704-4.847 62.464l395.296 123.584l129.36 403.264c9.28 15.184 20.496 22.72 31.263 22.72c11.936 0 23.296-9.152 31.04-27.248l408.272-953.728C1029.148 16.368 1022.86.769 1004.46.769" + }, null, -1) + ])); +} +__name(render$7, "render$7"); +const __unplugin_components_1$2 = markRaw({ name: "simple-line-icons-cursor", render: render$7 }); +const _hoisted_1$g = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +function render$6(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$g, _cache[0] || (_cache[0] = [ + createBaseVNode("path", { + fill: "currentColor", + d: "M10.05 23q-.75 0-1.4-.337T7.575 21.7L1.2 12.375l.6-.575q.475-.475 1.125-.55t1.175.3L7 13.575V4q0-.425.288-.712T8 3t.713.288T9 4v13.425l-3.7-2.6l3.925 5.725q.125.2.35.325t.475.125H17q.825 0 1.413-.587T19 19V5q0-.425.288-.712T20 4t.713.288T21 5v14q0 1.65-1.175 2.825T17 23zM11 12V2q0-.425.288-.712T12 1t.713.288T13 2v10zm4 0V3q0-.425.288-.712T16 2t.713.288T17 3v9zm-2.85 4.5" + }, null, -1) + ])); +} +__name(render$6, "render$6"); +const __unplugin_components_0$2 = markRaw({ name: "material-symbols-pan-tool-outline", render: render$6 }); +const useTitleEditorStore = defineStore("titleEditor", () => { + const titleEditorTarget = shallowRef(null); + return { + titleEditorTarget + }; +}); +const useCanvasStore = defineStore("canvas", () => { + const canvas = shallowRef(null); + return { + canvas + }; +}); +const _sfc_main$o = /* @__PURE__ */ defineComponent({ + __name: "GraphCanvasMenu", + setup(__props) { + const { t: t2 } = useI18n(); + const commandStore = useCommandStore(); + const canvasStore = useCanvasStore(); + const settingStore = useSettingStore(); + const linkHidden = computed( + () => settingStore.get("Comfy.LinkRenderMode") === LiteGraph.HIDDEN_LINK + ); + let interval = null; + const repeat = /* @__PURE__ */ __name((command) => { + if (interval) return; + const cmd = /* @__PURE__ */ __name(() => commandStore.execute(command), "cmd"); + cmd(); + interval = window.setInterval(cmd, 100); + }, "repeat"); + const stopRepeat = /* @__PURE__ */ __name(() => { + if (interval) { + clearInterval(interval); + interval = null; + } + }, "stopRepeat"); + return (_ctx, _cache) => { + const _component_i_material_symbols58pan_tool_outline = __unplugin_components_0$2; + const _component_i_simple_line_icons58cursor = __unplugin_components_1$2; + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createBlock(unref(script$6), { class: "p-buttongroup-vertical absolute bottom-[10px] right-[10px] z-[1000] pointer-events-auto" }, { + default: withCtx(() => [ + withDirectives(createVNode(unref(script), { + severity: "secondary", + icon: "pi pi-plus", + "aria-label": _ctx.$t("graphCanvasMenu.zoomIn"), + onMousedown: _cache[0] || (_cache[0] = ($event) => repeat("Comfy.Canvas.ZoomIn")), + onMouseup: stopRepeat + }, null, 8, ["aria-label"]), [ + [ + _directive_tooltip, + unref(t2)("graphCanvasMenu.zoomIn"), + void 0, + { left: true } + ] + ]), + withDirectives(createVNode(unref(script), { + severity: "secondary", + icon: "pi pi-minus", + "aria-label": _ctx.$t("graphCanvasMenu.zoomOut"), + onMousedown: _cache[1] || (_cache[1] = ($event) => repeat("Comfy.Canvas.ZoomOut")), + onMouseup: stopRepeat + }, null, 8, ["aria-label"]), [ + [ + _directive_tooltip, + unref(t2)("graphCanvasMenu.zoomOut"), + void 0, + { left: true } + ] + ]), + withDirectives(createVNode(unref(script), { + severity: "secondary", + icon: "pi pi-expand", + "aria-label": _ctx.$t("graphCanvasMenu.fitView"), + onClick: _cache[2] || (_cache[2] = () => unref(commandStore).execute("Comfy.Canvas.FitView")) + }, null, 8, ["aria-label"]), [ + [ + _directive_tooltip, + unref(t2)("graphCanvasMenu.fitView"), + void 0, + { left: true } + ] + ]), + withDirectives((openBlock(), createBlock(unref(script), { + severity: "secondary", + "aria-label": unref(t2)( + "graphCanvasMenu." + (unref(canvasStore).canvas?.read_only ? "panMode" : "selectMode") + ), + onClick: _cache[3] || (_cache[3] = () => unref(commandStore).execute("Comfy.Canvas.ToggleLock")) + }, { + icon: withCtx(() => [ + unref(canvasStore).canvas?.read_only ? (openBlock(), createBlock(_component_i_material_symbols58pan_tool_outline, { key: 0 })) : (openBlock(), createBlock(_component_i_simple_line_icons58cursor, { key: 1 })) + ]), + _: 1 + }, 8, ["aria-label"])), [ + [ + _directive_tooltip, + unref(t2)( + "graphCanvasMenu." + (unref(canvasStore).canvas?.read_only ? "panMode" : "selectMode") + ) + " (Space)", + void 0, + { left: true } + ] + ]), + withDirectives(createVNode(unref(script), { + severity: "secondary", + icon: linkHidden.value ? "pi pi-eye-slash" : "pi pi-eye", + "aria-label": _ctx.$t("graphCanvasMenu.toggleLinkVisibility"), + onClick: _cache[4] || (_cache[4] = () => unref(commandStore).execute("Comfy.Canvas.ToggleLinkVisibility")), + "data-testid": "toggle-link-visibility-button" + }, null, 8, ["icon", "aria-label"]), [ + [ + _directive_tooltip, + unref(t2)("graphCanvasMenu.toggleLinkVisibility"), + void 0, + { left: true } + ] + ]) + ]), + _: 1 + }); + }; + } +}); +const GraphCanvasMenu = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["__scopeId", "data-v-cb8f9a1a"]]); +const _sfc_main$n = /* @__PURE__ */ defineComponent({ + __name: "NodeBadge", + setup(__props) { + const settingStore = useSettingStore(); + const colorPaletteStore = useColorPaletteStore(); + const nodeSourceBadgeMode = computed( + () => settingStore.get("Comfy.NodeBadge.NodeSourceBadgeMode") + ); + const nodeIdBadgeMode = computed( + () => settingStore.get("Comfy.NodeBadge.NodeIdBadgeMode") + ); + const nodeLifeCycleBadgeMode = computed( + () => settingStore.get("Comfy.NodeBadge.NodeLifeCycleBadgeMode") + ); + watch([nodeSourceBadgeMode, nodeIdBadgeMode, nodeLifeCycleBadgeMode], () => { + app.graph?.setDirtyCanvas(true, true); + }); + const nodeDefStore = useNodeDefStore(); + function badgeTextVisible(nodeDef, badgeMode) { + return !(badgeMode === NodeBadgeMode.None || nodeDef?.isCoreNode && badgeMode === NodeBadgeMode.HideBuiltIn); + } + __name(badgeTextVisible, "badgeTextVisible"); + onMounted(() => { + app.registerExtension({ + name: "Comfy.NodeBadge", + nodeCreated(node) { + node.badgePosition = BadgePosition.TopRight; + const badge = computed(() => { + const nodeDef = nodeDefStore.fromLGraphNode(node); + return new LGraphBadge({ + text: _.truncate( + [ + badgeTextVisible(nodeDef, nodeIdBadgeMode.value) ? `#${node.id}` : "", + badgeTextVisible(nodeDef, nodeLifeCycleBadgeMode.value) ? nodeDef?.nodeLifeCycleBadgeText ?? "" : "", + badgeTextVisible(nodeDef, nodeSourceBadgeMode.value) ? nodeDef?.nodeSource?.badgeText ?? "" : "" + ].filter((s) => s.length > 0).join(" "), + { + length: 31 + } + ), + fgColor: colorPaletteStore.completedActivePalette.colors.litegraph_base.BADGE_FG_COLOR, + bgColor: colorPaletteStore.completedActivePalette.colors.litegraph_base.BADGE_BG_COLOR + }); + }); + node.badges.push(() => badge.value); + } + }); + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div"); + }; + } +}); +const _sfc_main$m = /* @__PURE__ */ defineComponent({ + __name: "NodeTooltip", + setup(__props) { + let idleTimeout; + const nodeDefStore = useNodeDefStore(); + const tooltipRef = ref(); + const tooltipText = ref(""); + const left = ref(); + const top = ref(); + const hideTooltip = /* @__PURE__ */ __name(() => tooltipText.value = null, "hideTooltip"); + const showTooltip = /* @__PURE__ */ __name(async (tooltip) => { + if (!tooltip) return; + left.value = app.canvas.mouse[0] + "px"; + top.value = app.canvas.mouse[1] + "px"; + tooltipText.value = tooltip; + await nextTick(); + const rect = tooltipRef.value.getBoundingClientRect(); + if (rect.right > window.innerWidth) { + left.value = app.canvas.mouse[0] - rect.width + "px"; + } + if (rect.top < 0) { + top.value = app.canvas.mouse[1] + rect.height + "px"; + } + }, "showTooltip"); + const onIdle = /* @__PURE__ */ __name(() => { + const { canvas } = app; + const node = canvas.node_over; + if (!node) return; + const ctor = node.constructor; + const nodeDef = nodeDefStore.nodeDefsByName[node.type]; + if (ctor.title_mode !== LiteGraph.NO_TITLE && canvas.graph_mouse[1] < node.pos[1]) { + return showTooltip(nodeDef.description); + } + if (node.flags?.collapsed) return; + const inputSlot = canvas.isOverNodeInput( + node, + canvas.graph_mouse[0], + canvas.graph_mouse[1], + [0, 0] + ); + if (inputSlot !== -1) { + const inputName = node.inputs[inputSlot].name; + const translatedTooltip = st( + `nodeDefs.${normalizeI18nKey(node.type)}.inputs.${normalizeI18nKey(inputName)}.tooltip`, + nodeDef.inputs.getInput(inputName)?.tooltip + ); + return showTooltip(translatedTooltip); + } + const outputSlot = canvas.isOverNodeOutput( + node, + canvas.graph_mouse[0], + canvas.graph_mouse[1], + [0, 0] + ); + if (outputSlot !== -1) { + const translatedTooltip = st( + `nodeDefs.${normalizeI18nKey(node.type)}.outputs.${outputSlot}.tooltip`, + nodeDef.outputs.all?.[outputSlot]?.tooltip + ); + return showTooltip(translatedTooltip); + } + const widget = app.canvas.getWidgetAtCursor(); + if (widget && !widget.element) { + const translatedTooltip = st( + `nodeDefs.${normalizeI18nKey(node.type)}.inputs.${normalizeI18nKey(widget.name)}.tooltip`, + nodeDef.inputs.getInput(widget.name)?.tooltip + ); + return showTooltip(widget.tooltip ?? translatedTooltip); + } + }, "onIdle"); + const onMouseMove = /* @__PURE__ */ __name((e) => { + hideTooltip(); + clearTimeout(idleTimeout); + if (e.target.nodeName !== "CANVAS") return; + idleTimeout = window.setTimeout(onIdle, 500); + }, "onMouseMove"); + useEventListener(window, "mousemove", onMouseMove); + useEventListener(window, "click", hideTooltip); + return (_ctx, _cache) => { + return tooltipText.value ? (openBlock(), createElementBlock("div", { + key: 0, + ref_key: "tooltipRef", + ref: tooltipRef, + class: "node-tooltip", + style: normalizeStyle({ left: left.value, top: top.value }) + }, toDisplayString(tooltipText.value), 5)) : createCommentVNode("", true); + }; + } +}); +const NodeTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["__scopeId", "data-v-46859edf"]]); +const _sfc_main$l = /* @__PURE__ */ defineComponent({ + __name: "TitleEditor", + setup(__props) { + const settingStore = useSettingStore(); + const showInput = ref(false); + const editedTitle = ref(""); + const inputStyle = ref({ + position: "fixed", + left: "0px", + top: "0px", + width: "200px", + height: "20px", + fontSize: "12px" + }); + const titleEditorStore = useTitleEditorStore(); + const canvasStore = useCanvasStore(); + const previousCanvasDraggable = ref(true); + const onEdit = /* @__PURE__ */ __name((newValue) => { + if (titleEditorStore.titleEditorTarget && newValue.trim() !== "") { + titleEditorStore.titleEditorTarget.title = newValue.trim(); + app.graph.setDirtyCanvas(true, true); + } + showInput.value = false; + titleEditorStore.titleEditorTarget = null; + canvasStore.canvas.allow_dragcanvas = previousCanvasDraggable.value; + }, "onEdit"); + watch( + () => titleEditorStore.titleEditorTarget, + (target) => { + if (target === null) { + return; + } + editedTitle.value = target.title; + showInput.value = true; + previousCanvasDraggable.value = canvasStore.canvas.allow_dragcanvas; + canvasStore.canvas.allow_dragcanvas = false; + if (target instanceof LGraphGroup) { + const group = target; + const [x, y] = group.pos; + const [w, h] = group.size; + const [left, top] = app.canvasPosToClientPos([x, y]); + inputStyle.value.left = `${left}px`; + inputStyle.value.top = `${top}px`; + const width = w * app.canvas.ds.scale; + const height = group.titleHeight * app.canvas.ds.scale; + inputStyle.value.width = `${width}px`; + inputStyle.value.height = `${height}px`; + const fontSize = group.font_size * app.canvas.ds.scale; + inputStyle.value.fontSize = `${fontSize}px`; + } else if (target instanceof LGraphNode) { + const node = target; + const [x, y] = node.getBounding(); + const canvasWidth = node.width; + const canvasHeight = LiteGraph.NODE_TITLE_HEIGHT; + const [left, top] = app.canvasPosToClientPos([x, y]); + inputStyle.value.left = `${left}px`; + inputStyle.value.top = `${top}px`; + const width = canvasWidth * app.canvas.ds.scale; + const height = canvasHeight * app.canvas.ds.scale; + inputStyle.value.width = `${width}px`; + inputStyle.value.height = `${height}px`; + const fontSize = 12 * app.canvas.ds.scale; + inputStyle.value.fontSize = `${fontSize}px`; + } + } + ); + const canvasEventHandler = /* @__PURE__ */ __name((event) => { + if (event.detail.subType === "group-double-click") { + if (!settingStore.get("Comfy.Group.DoubleClickTitleToEdit")) { + return; + } + const group = event.detail.group; + const [x, y] = group.pos; + const e = event.detail.originalEvent; + const relativeY = e.canvasY - y; + if (relativeY <= group.titleHeight) { + titleEditorStore.titleEditorTarget = group; + } + } else if (event.detail.subType === "node-double-click") { + if (!settingStore.get("Comfy.Node.DoubleClickTitleToEdit")) { + return; + } + const node = event.detail.node; + const [x, y] = node.pos; + const e = event.detail.originalEvent; + const relativeY = e.canvasY - y; + if (relativeY <= 0) { + titleEditorStore.titleEditorTarget = node; + } + } + }, "canvasEventHandler"); + useEventListener(document, "litegraph:canvas", canvasEventHandler); + return (_ctx, _cache) => { + return showInput.value ? (openBlock(), createElementBlock("div", { + key: 0, + class: "group-title-editor node-title-editor", + style: normalizeStyle(inputStyle.value) + }, [ + createVNode(EditableText, { + isEditing: showInput.value, + modelValue: editedTitle.value, + onEdit + }, null, 8, ["isEditing", "modelValue"]) + ], 4)) : createCommentVNode("", true); + }; + } +}); +const TitleEditor = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["__scopeId", "data-v-12d3fd12"]]); +const useSearchBoxStore = defineStore("searchBox", () => { + const visible = ref(false); + function toggleVisible() { + visible.value = !visible.value; + } + __name(toggleVisible, "toggleVisible"); + return { + visible, + toggleVisible + }; +}); +class ConnectingLinkImpl { + static { + __name(this, "ConnectingLinkImpl"); + } + constructor(node, slot, input, output, pos, afterRerouteId) { + this.node = node; + this.slot = slot; + this.input = input; + this.output = output; + this.pos = pos; + this.afterRerouteId = afterRerouteId; + } + static createFromPlainObject(obj) { + return new ConnectingLinkImpl( + obj.node, + obj.slot, + obj.input, + obj.output, + obj.pos, + obj.afterRerouteId + ); + } + get type() { + const result = this.input ? this.input.type : this.output?.type ?? null; + return result === -1 ? null : result; + } + /** + * Which slot type is release and need to be reconnected. + * - 'output' means we need a new node's outputs slot to connect with this link + */ + get releaseSlotType() { + return this.output ? "input" : "output"; + } + connectTo(newNode) { + const newNodeSlots = this.releaseSlotType === "output" ? newNode.outputs : newNode.inputs; + if (!newNodeSlots) return; + const newNodeSlot = newNodeSlots.findIndex( + (slot) => LiteGraph.isValidConnection(slot.type, this.type) + ); + if (newNodeSlot === -1) { + console.warn( + `Could not find slot with type ${this.type} on node ${newNode.title}. This should never happen` + ); + return; + } + if (this.releaseSlotType === "input") { + this.node.connect(this.slot, newNode, newNodeSlot, this.afterRerouteId); + } else { + newNode.connect(newNodeSlot, this.node, this.slot, this.afterRerouteId); + } + } +} +const _sfc_main$k = { + name: "AutoCompletePlus", + extends: script$7, + emits: ["focused-option-changed"], + data() { + return { + // Flag to determine if IME is active + isComposing: false + }; + }, + mounted() { + if (typeof script$7.mounted === "function") { + script$7.mounted.call(this); + } + const inputEl = this.$el.querySelector("input"); + if (inputEl) { + inputEl.addEventListener("compositionstart", () => { + this.isComposing = true; + }); + inputEl.addEventListener("compositionend", () => { + this.isComposing = false; + }); + } + this.$watch( + () => this.focusedOptionIndex, + (newVal, oldVal) => { + this.$emit("focused-option-changed", newVal); + } + ); + }, + methods: { + // Override onKeyDown to block Enter when IME is active + onKeyDown(event) { + if (event.key === "Enter" && this.isComposing) { + event.preventDefault(); + event.stopPropagation(); + return; + } + script$7.methods.onKeyDown.call(this, event); + } + } +}; +const _hoisted_1$f = { class: "option-container flex justify-between items-center px-2 py-0 cursor-pointer overflow-hidden w-full" }; +const _hoisted_2$5 = { class: "option-display-name font-semibold flex flex-col" }; +const _hoisted_3$4 = { key: 0 }; +const _hoisted_4 = ["innerHTML"]; +const _hoisted_5 = ["innerHTML"]; +const _hoisted_6 = { + key: 0, + class: "option-category font-light text-sm text-muted overflow-hidden text-ellipsis whitespace-nowrap" +}; +const _hoisted_7 = { class: "option-badges" }; +const _sfc_main$j = /* @__PURE__ */ defineComponent({ + __name: "NodeSearchItem", + props: { + nodeDef: {}, + currentQuery: {} + }, + setup(__props) { + const settingStore = useSettingStore(); + const showCategory = computed( + () => settingStore.get("Comfy.NodeSearchBoxImpl.ShowCategory") + ); + const showIdName = computed( + () => settingStore.get("Comfy.NodeSearchBoxImpl.ShowIdName") + ); + const showNodeFrequency = computed( + () => settingStore.get("Comfy.NodeSearchBoxImpl.ShowNodeFrequency") + ); + const nodeFrequencyStore = useNodeFrequencyStore(); + const nodeFrequency = computed( + () => nodeFrequencyStore.getNodeFrequency(props.nodeDef) + ); + const nodeBookmarkStore = useNodeBookmarkStore(); + const isBookmarked = computed( + () => nodeBookmarkStore.isBookmarked(props.nodeDef) + ); + const props = __props; + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$f, [ + createBaseVNode("div", _hoisted_2$5, [ + createBaseVNode("div", null, [ + isBookmarked.value ? (openBlock(), createElementBlock("span", _hoisted_3$4, _cache[0] || (_cache[0] = [ + createBaseVNode("i", { class: "pi pi-bookmark-fill text-sm mr-1" }, null, -1) + ]))) : createCommentVNode("", true), + createBaseVNode("span", { + innerHTML: unref(highlightQuery)(_ctx.nodeDef.display_name, _ctx.currentQuery) + }, null, 8, _hoisted_4), + _cache[1] || (_cache[1] = createBaseVNode("span", null, " ", -1)), + showIdName.value ? (openBlock(), createBlock(unref(script$8), { + key: 1, + severity: "secondary" + }, { + default: withCtx(() => [ + createBaseVNode("span", { + innerHTML: unref(highlightQuery)(_ctx.nodeDef.name, _ctx.currentQuery) + }, null, 8, _hoisted_5) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + showCategory.value ? (openBlock(), createElementBlock("div", _hoisted_6, toDisplayString(_ctx.nodeDef.category.replaceAll("/", " > ")), 1)) : createCommentVNode("", true) + ]), + createBaseVNode("div", _hoisted_7, [ + _ctx.nodeDef.experimental ? (openBlock(), createBlock(unref(script$8), { + key: 0, + value: _ctx.$t("g.experimental"), + severity: "primary" + }, null, 8, ["value"])) : createCommentVNode("", true), + _ctx.nodeDef.deprecated ? (openBlock(), createBlock(unref(script$8), { + key: 1, + value: _ctx.$t("g.deprecated"), + severity: "danger" + }, null, 8, ["value"])) : createCommentVNode("", true), + showNodeFrequency.value && nodeFrequency.value > 0 ? (openBlock(), createBlock(unref(script$8), { + key: 2, + value: unref(formatNumberWithSuffix)(nodeFrequency.value, { roundToInt: true }), + severity: "secondary" + }, null, 8, ["value"])) : createCommentVNode("", true), + _ctx.nodeDef.nodeSource.type !== unref(NodeSourceType).Unknown ? (openBlock(), createBlock(unref(script$9), { + key: 3, + class: "text-sm font-light" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.nodeDef.nodeSource.displayText), 1) + ]), + _: 1 + })) : createCommentVNode("", true) + ]) + ]); + }; + } +}); +const NodeSearchItem = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-fd0a74bd"]]); +const _hoisted_1$e = { class: "comfy-vue-node-search-container flex justify-center items-center w-full min-w-96 pointer-events-auto" }; +const _hoisted_2$4 = { + key: 0, + class: "comfy-vue-node-preview-container absolute left-[-350px] top-[50px]" +}; +const _hoisted_3$3 = { class: "_dialog-body" }; +const _sfc_main$i = /* @__PURE__ */ defineComponent({ + __name: "NodeSearchBox", + props: { + filters: {}, + searchLimit: { default: 64 } + }, + emits: ["addFilter", "removeFilter", "addNode"], + setup(__props, { emit: __emit }) { + const settingStore = useSettingStore(); + const { t: t2 } = useI18n(); + const enableNodePreview = computed( + () => settingStore.get("Comfy.NodeSearchBoxImpl.NodePreview") + ); + const props = __props; + const nodeSearchFilterVisible = ref(false); + const inputId = `comfy-vue-node-search-box-input-${Math.random()}`; + const suggestions = ref([]); + const hoveredSuggestion = ref(null); + const currentQuery = ref(""); + const placeholder = computed(() => { + return props.filters.length === 0 ? t2("g.searchNodes") + "..." : ""; + }); + const nodeDefStore = useNodeDefStore(); + const nodeFrequencyStore = useNodeFrequencyStore(); + const search = /* @__PURE__ */ __name((query) => { + const queryIsEmpty = query === "" && props.filters.length === 0; + currentQuery.value = query; + suggestions.value = queryIsEmpty ? nodeFrequencyStore.topNodeDefs : [ + ...nodeDefStore.nodeSearchService.searchNode(query, props.filters, { + limit: props.searchLimit + }) + ]; + }, "search"); + const emit = __emit; + let inputElement = null; + const reFocusInput = /* @__PURE__ */ __name(() => { + inputElement ??= document.getElementById(inputId); + if (inputElement) { + inputElement.blur(); + nextTick(() => inputElement?.focus()); + } + }, "reFocusInput"); + onMounted(reFocusInput); + const onAddFilter = /* @__PURE__ */ __name((filterAndValue) => { + nodeSearchFilterVisible.value = false; + emit("addFilter", filterAndValue); + }, "onAddFilter"); + const onRemoveFilter = /* @__PURE__ */ __name((event, filterAndValue) => { + event.stopPropagation(); + event.preventDefault(); + emit("removeFilter", filterAndValue); + reFocusInput(); + }, "onRemoveFilter"); + const setHoverSuggestion = /* @__PURE__ */ __name((index) => { + if (index === -1) { + hoveredSuggestion.value = null; + return; + } + const value = suggestions.value[index]; + hoveredSuggestion.value = value; + }, "setHoverSuggestion"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$e, [ + enableNodePreview.value ? (openBlock(), createElementBlock("div", _hoisted_2$4, [ + hoveredSuggestion.value ? (openBlock(), createBlock(NodePreview, { + nodeDef: hoveredSuggestion.value, + key: hoveredSuggestion.value?.name || "" + }, null, 8, ["nodeDef"])) : createCommentVNode("", true) + ])) : createCommentVNode("", true), + createVNode(unref(script), { + icon: "pi pi-filter", + severity: "secondary", + class: "filter-button z-10", + onClick: _cache[0] || (_cache[0] = ($event) => nodeSearchFilterVisible.value = true) + }), + createVNode(unref(script$a), { + visible: nodeSearchFilterVisible.value, + "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => nodeSearchFilterVisible.value = $event), + class: "min-w-96", + "dismissable-mask": "", + modal: "", + onHide: reFocusInput + }, { + header: withCtx(() => _cache[5] || (_cache[5] = [ + createBaseVNode("h3", null, "Add node filter condition", -1) + ])), + default: withCtx(() => [ + createBaseVNode("div", _hoisted_3$3, [ + createVNode(NodeSearchFilter, { onAddFilter }) + ]) + ]), + _: 1 + }, 8, ["visible"]), + createVNode(_sfc_main$k, { + "model-value": props.filters, + class: "comfy-vue-node-search-box z-10 flex-grow", + scrollHeight: "40vh", + placeholder: placeholder.value, + "input-id": inputId, + "append-to": "self", + suggestions: suggestions.value, + "min-length": 0, + delay: 100, + loading: !unref(nodeFrequencyStore).isLoaded, + onComplete: _cache[2] || (_cache[2] = ($event) => search($event.query)), + onOptionSelect: _cache[3] || (_cache[3] = ($event) => emit("addNode", $event.value)), + onFocusedOptionChanged: _cache[4] || (_cache[4] = ($event) => setHoverSuggestion($event)), + "complete-on-focus": "", + "auto-option-focus": "", + "force-selection": "", + multiple: "", + optionLabel: "display_name" + }, { + option: withCtx(({ option }) => [ + createVNode(NodeSearchItem, { + nodeDef: option, + currentQuery: currentQuery.value + }, null, 8, ["nodeDef", "currentQuery"]) + ]), + chip: withCtx(({ value }) => [ + Array.isArray(value) && value.length === 2 ? (openBlock(), createBlock(SearchFilterChip, { + key: `${value[0].id}-${value[1]}`, + onRemove: /* @__PURE__ */ __name(($event) => onRemoveFilter($event, value), "onRemove"), + text: value[1], + badge: value[0].invokeSequence.toUpperCase(), + "badge-class": value[0].invokeSequence + "-badge" + }, null, 8, ["onRemove", "text", "badge", "badge-class"])) : createCommentVNode("", true) + ]), + _: 1 + }, 8, ["model-value", "placeholder", "suggestions", "loading"]) + ]); + }; + } +}); +const _sfc_main$h = /* @__PURE__ */ defineComponent({ + __name: "NodeSearchBoxPopover", + setup(__props) { + const settingStore = useSettingStore(); + const litegraphService = useLitegraphService(); + const { visible } = storeToRefs(useSearchBoxStore()); + const dismissable = ref(true); + const triggerEvent = ref(null); + const getNewNodeLocation = /* @__PURE__ */ __name(() => { + if (!triggerEvent.value) { + return litegraphService.getCanvasCenter(); + } + const originalEvent = triggerEvent.value.detail.originalEvent; + return [originalEvent.canvasX, originalEvent.canvasY]; + }, "getNewNodeLocation"); + const nodeFilters = ref([]); + const addFilter = /* @__PURE__ */ __name((filter) => { + nodeFilters.value.push(filter); + }, "addFilter"); + const removeFilter = /* @__PURE__ */ __name((filter) => { + nodeFilters.value = nodeFilters.value.filter( + (f) => toRaw(f) !== toRaw(filter) + ); + }, "removeFilter"); + const clearFilters = /* @__PURE__ */ __name(() => { + nodeFilters.value = []; + }, "clearFilters"); + const closeDialog = /* @__PURE__ */ __name(() => { + visible.value = false; + }, "closeDialog"); + const addNode = /* @__PURE__ */ __name((nodeDef) => { + const node = litegraphService.addNodeOnGraph(nodeDef, { + pos: getNewNodeLocation() + }); + const eventDetail = triggerEvent.value?.detail; + if (eventDetail && eventDetail.subType === "empty-release") { + eventDetail.linkReleaseContext.links.forEach((link) => { + ConnectingLinkImpl.createFromPlainObject(link).connectTo(node); + }); + } + window.setTimeout(() => { + closeDialog(); + }, 100); + }, "addNode"); + const newSearchBoxEnabled = computed( + () => settingStore.get("Comfy.NodeSearchBoxImpl") === "default" + ); + const showSearchBox = /* @__PURE__ */ __name((e) => { + const detail = e.detail; + if (newSearchBoxEnabled.value) { + if (detail.originalEvent?.pointerType === "touch") { + setTimeout(() => { + showNewSearchBox(e); + }, 128); + } else { + showNewSearchBox(e); + } + } else { + canvasStore.canvas.showSearchBox(detail.originalEvent); + } + }, "showSearchBox"); + const nodeDefStore = useNodeDefStore(); + const showNewSearchBox = /* @__PURE__ */ __name((e) => { + if (e.detail.subType === "empty-release") { + const links = e.detail.linkReleaseContext.links; + if (links.length === 0) { + console.warn("Empty release with no links! This should never happen"); + return; + } + const firstLink = ConnectingLinkImpl.createFromPlainObject(links[0]); + const filter = nodeDefStore.nodeSearchService.getFilterById( + firstLink.releaseSlotType + ); + const dataType = firstLink.type.toString(); + addFilter([filter, dataType]); + } + visible.value = true; + triggerEvent.value = e; + dismissable.value = false; + setTimeout(() => { + dismissable.value = true; + }, 300); + }, "showNewSearchBox"); + const showContextMenu = /* @__PURE__ */ __name((e) => { + if (e.detail.subType !== "empty-release") { + return; + } + const links = e.detail.linkReleaseContext.links; + if (links.length === 0) { + console.warn("Empty release with no links! This should never happen"); + return; + } + const firstLink = ConnectingLinkImpl.createFromPlainObject(links[0]); + const mouseEvent = e.detail.originalEvent; + const commonOptions = { + e: mouseEvent, + allow_searchbox: true, + showSearchBox: /* @__PURE__ */ __name(() => showSearchBox(e), "showSearchBox") + }; + const connectionOptions = firstLink.output ? { + nodeFrom: firstLink.node, + slotFrom: firstLink.output, + afterRerouteId: firstLink.afterRerouteId + } : { + nodeTo: firstLink.node, + slotTo: firstLink.input, + afterRerouteId: firstLink.afterRerouteId + }; + canvasStore.canvas.showConnectionMenu({ + ...connectionOptions, + ...commonOptions + }); + }, "showContextMenu"); + const canvasStore = useCanvasStore(); + watchEffect(() => { + if (canvasStore.canvas) { + LiteGraph.release_link_on_empty_shows_menu = false; + canvasStore.canvas.allow_searchbox = false; + } + }); + const canvasEventHandler = /* @__PURE__ */ __name((e) => { + if (e.detail.subType === "empty-double-click") { + showSearchBox(e); + } else if (e.detail.subType === "empty-release") { + handleCanvasEmptyRelease(e); + } else if (e.detail.subType === "group-double-click") { + const group = e.detail.group; + const [x, y] = group.pos; + const relativeY = e.detail.originalEvent.canvasY - y; + if (relativeY > group.titleHeight) { + showSearchBox(e); + } + } + }, "canvasEventHandler"); + const linkReleaseAction = computed(() => { + return settingStore.get("Comfy.LinkRelease.Action"); + }); + const linkReleaseActionShift = computed(() => { + return settingStore.get("Comfy.LinkRelease.ActionShift"); + }); + const handleCanvasEmptyRelease = /* @__PURE__ */ __name((e) => { + const detail = e.detail; + const shiftPressed = detail.originalEvent.shiftKey; + const action = shiftPressed ? linkReleaseActionShift.value : linkReleaseAction.value; + switch (action) { + case LinkReleaseTriggerAction.SEARCH_BOX: + showSearchBox(e); + break; + case LinkReleaseTriggerAction.CONTEXT_MENU: + showContextMenu(e); + break; + case LinkReleaseTriggerAction.NO_ACTION: + default: + break; + } + }, "handleCanvasEmptyRelease"); + useEventListener(document, "litegraph:canvas", canvasEventHandler); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", null, [ + createVNode(unref(script$a), { + visible: unref(visible), + "onUpdate:visible": _cache[0] || (_cache[0] = ($event) => isRef(visible) ? visible.value = $event : null), + modal: "", + "dismissable-mask": dismissable.value, + onHide: clearFilters, + pt: { + root: { + class: "invisible-dialog-root", + role: "search" + }, + mask: { class: "node-search-box-dialog-mask" }, + transition: { + enterFromClass: "opacity-0 scale-75", + // 100ms is the duration of the transition in the dialog component + enterActiveClass: "transition-all duration-100 ease-out", + leaveActiveClass: "transition-all duration-100 ease-in", + leaveToClass: "opacity-0 scale-75" + } + } + }, { + container: withCtx(() => [ + createVNode(_sfc_main$i, { + filters: nodeFilters.value, + onAddFilter: addFilter, + onRemoveFilter: removeFilter, + onAddNode: addNode + }, null, 8, ["filters"]) + ]), + _: 1 + }, 8, ["visible", "dismissable-mask"]) + ]); + }; + } +}); +const _sfc_main$g = /* @__PURE__ */ defineComponent({ + __name: "SidebarIcon", + props: { + icon: String, + selected: Boolean, + tooltip: { + type: String, + default: "" + }, + class: { + type: String, + default: "" + }, + iconBadge: { + type: [String, Function], + default: "" + } + }, + emits: ["click"], + setup(__props, { emit: __emit }) { + const props = __props; + const emit = __emit; + const overlayValue = computed( + () => typeof props.iconBadge === "function" ? props.iconBadge() || "" : props.iconBadge + ); + const shouldShowBadge = computed(() => !!overlayValue.value); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return withDirectives((openBlock(), createBlock(unref(script), { + class: normalizeClass(props.class), + text: "", + pt: { + root: { + class: `side-bar-button ${props.selected ? "p-button-primary side-bar-button-selected" : "p-button-secondary"}`, + "aria-label": props.tooltip + } + }, + onClick: _cache[0] || (_cache[0] = ($event) => emit("click", $event)) + }, { + icon: withCtx(() => [ + shouldShowBadge.value ? (openBlock(), createBlock(unref(script$b), { + key: 0, + value: overlayValue.value + }, { + default: withCtx(() => [ + createBaseVNode("i", { + class: normalizeClass(props.icon + " side-bar-button-icon") + }, null, 2) + ]), + _: 1 + }, 8, ["value"])) : (openBlock(), createElementBlock("i", { + key: 1, + class: normalizeClass(props.icon + " side-bar-button-icon") + }, null, 2)) + ]), + _: 1 + }, 8, ["class", "pt"])), [ + [_directive_tooltip, { value: props.tooltip, showDelay: 300, hideDelay: 300 }] + ]); + }; + } +}); +const SidebarIcon = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__scopeId", "data-v-6ab4daa6"]]); +const _sfc_main$f = /* @__PURE__ */ defineComponent({ + __name: "SidebarLogoutIcon", + setup(__props) { + const { t: t2 } = useI18n(); + const userStore = useUserStore(); + const tooltip = computed( + () => `${t2("sideToolbar.logout")} (${userStore.currentUser?.username})` + ); + const logout = /* @__PURE__ */ __name(() => { + userStore.logout(); + window.location.reload(); + }, "logout"); + return (_ctx, _cache) => { + return openBlock(), createBlock(SidebarIcon, { + icon: "pi pi-sign-out", + tooltip: tooltip.value, + onClick: logout + }, null, 8, ["tooltip"]); + }; + } +}); +const _sfc_main$e = /* @__PURE__ */ defineComponent({ + __name: "SidebarSettingsToggleIcon", + setup(__props) { + const dialogStore = useDialogStore(); + const showSetting = /* @__PURE__ */ __name(() => { + dialogStore.showDialog({ + key: "global-settings", + headerComponent: SettingDialogHeader, + component: SettingDialogContent + }); + }, "showSetting"); + return (_ctx, _cache) => { + return openBlock(), createBlock(SidebarIcon, { + icon: "pi pi-cog", + class: "comfy-settings-btn", + onClick: showSetting, + tooltip: _ctx.$t("g.settings") + }, null, 8, ["tooltip"]); + }; + } +}); +const _sfc_main$d = /* @__PURE__ */ defineComponent({ + __name: "SidebarThemeToggleIcon", + setup(__props) { + const colorPaletteStore = useColorPaletteStore(); + const icon = computed( + () => colorPaletteStore.completedActivePalette.light_theme ? "pi pi-sun" : "pi pi-moon" + ); + const commandStore = useCommandStore(); + const toggleTheme = /* @__PURE__ */ __name(() => { + commandStore.execute("Comfy.ToggleTheme"); + }, "toggleTheme"); + return (_ctx, _cache) => { + return openBlock(), createBlock(SidebarIcon, { + icon: icon.value, + onClick: toggleTheme, + tooltip: _ctx.$t("sideToolbar.themeToggle"), + class: "comfy-vue-theme-toggle" + }, null, 8, ["icon", "tooltip"]); + }; + } +}); +const _hoisted_1$d = { class: "side-tool-bar-end" }; +const _hoisted_2$3 = { + key: 0, + class: "sidebar-content-container h-full overflow-y-auto overflow-x-hidden" +}; +const _sfc_main$c = /* @__PURE__ */ defineComponent({ + __name: "SideToolbar", + setup(__props) { + const workspaceStore = useWorkspaceStore(); + const settingStore = useSettingStore(); + const userStore = useUserStore(); + const teleportTarget = computed( + () => settingStore.get("Comfy.Sidebar.Location") === "left" ? ".comfyui-body-left" : ".comfyui-body-right" + ); + const isSmall = computed( + () => settingStore.get("Comfy.Sidebar.Size") === "small" + ); + const tabs = computed(() => workspaceStore.getSidebarTabs()); + const selectedTab = computed(() => workspaceStore.sidebarTab.activeSidebarTab); + const onTabClick = /* @__PURE__ */ __name((item) => { + workspaceStore.sidebarTab.toggleSidebarTab(item.id); + }, "onTabClick"); + const keybindingStore = useKeybindingStore(); + const getTabTooltipSuffix = /* @__PURE__ */ __name((tab) => { + const keybinding = keybindingStore.getKeybindingByCommandId( + `Workspace.ToggleSidebarTab.${tab.id}` + ); + return keybinding ? ` (${keybinding.combo.toString()})` : ""; + }, "getTabTooltipSuffix"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock(Fragment, null, [ + (openBlock(), createBlock(Teleport, { to: teleportTarget.value }, [ + createBaseVNode("nav", { + class: normalizeClass(["side-tool-bar-container", { "small-sidebar": isSmall.value }]) + }, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(tabs.value, (tab) => { + return openBlock(), createBlock(SidebarIcon, { + key: tab.id, + icon: tab.icon, + iconBadge: tab.iconBadge, + tooltip: tab.tooltip + getTabTooltipSuffix(tab), + selected: tab.id === selectedTab.value?.id, + class: normalizeClass(tab.id + "-tab-button"), + onClick: /* @__PURE__ */ __name(($event) => onTabClick(tab), "onClick") + }, null, 8, ["icon", "iconBadge", "tooltip", "selected", "class", "onClick"]); + }), 128)), + createBaseVNode("div", _hoisted_1$d, [ + unref(userStore).isMultiUserServer ? (openBlock(), createBlock(_sfc_main$f, { key: 0 })) : createCommentVNode("", true), + createVNode(_sfc_main$d), + createVNode(_sfc_main$e) + ]) + ], 2) + ], 8, ["to"])), + selectedTab.value ? (openBlock(), createElementBlock("div", _hoisted_2$3, [ + createVNode(_sfc_main$q, { extension: selectedTab.value }, null, 8, ["extension"]) + ])) : createCommentVNode("", true) + ], 64); + }; + } +}); +const SideToolbar = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-33cac83a"]]); +const _hoisted_1$c = { class: "workflow-label text-sm max-w-[150px] truncate inline-block" }; +const _hoisted_2$2 = { class: "relative" }; +const _hoisted_3$2 = { + key: 0, + class: "status-indicator" +}; +const _sfc_main$b = /* @__PURE__ */ defineComponent({ + __name: "WorkflowTab", + props: { + class: {}, + workflowOption: {} + }, + setup(__props) { + const props = __props; + const workspaceStore = useWorkspaceStore(); + const workflowStore = useWorkflowStore(); + const workflowTabRef = ref(null); + const closeWorkflows = /* @__PURE__ */ __name(async (options) => { + for (const opt of options) { + if (!await useWorkflowService().closeWorkflow(opt.workflow, { + warnIfUnsaved: !workspaceStore.shiftDown + })) { + break; + } + } + }, "closeWorkflows"); + const onCloseWorkflow = /* @__PURE__ */ __name((option) => { + closeWorkflows([option]); + }, "onCloseWorkflow"); + const tabGetter = /* @__PURE__ */ __name(() => workflowTabRef.value, "tabGetter"); + usePragmaticDraggable(tabGetter, { + getInitialData: /* @__PURE__ */ __name(() => { + return { + workflowKey: props.workflowOption.workflow.key + }; + }, "getInitialData") + }); + usePragmaticDroppable(tabGetter, { + getData: /* @__PURE__ */ __name(() => { + return { + workflowKey: props.workflowOption.workflow.key + }; + }, "getData"), + onDrop: /* @__PURE__ */ __name((e) => { + const fromIndex = workflowStore.openWorkflows.findIndex( + (wf) => wf.key === e.source.data.workflowKey + ); + const toIndex = workflowStore.openWorkflows.findIndex( + (wf) => wf.key === e.location.current.dropTargets[0]?.data.workflowKey + ); + if (fromIndex !== toIndex) { + workflowStore.reorderWorkflows(fromIndex, toIndex); + } + }, "onDrop") + }); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createElementBlock("div", mergeProps({ + class: "flex p-2 gap-2 workflow-tab", + ref_key: "workflowTabRef", + ref: workflowTabRef + }, _ctx.$attrs), [ + withDirectives((openBlock(), createElementBlock("span", _hoisted_1$c, [ + createTextVNode(toDisplayString(_ctx.workflowOption.workflow.filename), 1) + ])), [ + [ + _directive_tooltip, + _ctx.workflowOption.workflow.key, + void 0, + { bottom: true } + ] + ]), + createBaseVNode("div", _hoisted_2$2, [ + !unref(workspaceStore).shiftDown && (_ctx.workflowOption.workflow.isModified || !_ctx.workflowOption.workflow.isPersisted) ? (openBlock(), createElementBlock("span", _hoisted_3$2, "•")) : createCommentVNode("", true), + createVNode(unref(script), { + class: "close-button p-0 w-auto", + icon: "pi pi-times", + text: "", + severity: "secondary", + size: "small", + onClick: _cache[0] || (_cache[0] = withModifiers(($event) => onCloseWorkflow(_ctx.workflowOption), ["stop"])) + }) + ]) + ], 16); + }; + } +}); +const WorkflowTab = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-8d011a31"]]); +const _hoisted_1$b = { class: "workflow-tabs-container flex flex-row max-w-full h-full" }; +const _sfc_main$a = /* @__PURE__ */ defineComponent({ + __name: "WorkflowTabs", + props: { + class: {} + }, + setup(__props) { + const props = __props; + const { t: t2 } = useI18n(); + const workspaceStore = useWorkspaceStore(); + const workflowStore = useWorkflowStore(); + const workflowService = useWorkflowService(); + const workflowBookmarkStore = useWorkflowBookmarkStore(); + const rightClickedTab = ref(null); + const menu = ref(); + const workflowToOption = /* @__PURE__ */ __name((workflow) => ({ + value: workflow.path, + workflow + }), "workflowToOption"); + const options = computed( + () => workflowStore.openWorkflows.map(workflowToOption) + ); + const selectedWorkflow = computed( + () => workflowStore.activeWorkflow ? workflowToOption(workflowStore.activeWorkflow) : null + ); + const onWorkflowChange = /* @__PURE__ */ __name((option) => { + if (!option) { + return; + } + if (selectedWorkflow.value?.value === option.value) { + return; + } + workflowService.openWorkflow(option.workflow); + }, "onWorkflowChange"); + const closeWorkflows = /* @__PURE__ */ __name(async (options2) => { + for (const opt of options2) { + if (!await workflowService.closeWorkflow(opt.workflow, { + warnIfUnsaved: !workspaceStore.shiftDown + })) { + break; + } + } + }, "closeWorkflows"); + const onCloseWorkflow = /* @__PURE__ */ __name((option) => { + closeWorkflows([option]); + }, "onCloseWorkflow"); + const showContextMenu = /* @__PURE__ */ __name((event, option) => { + rightClickedTab.value = option; + menu.value.show(event); + }, "showContextMenu"); + const contextMenuItems = computed(() => { + const tab = rightClickedTab.value; + if (!tab) return []; + const index = options.value.findIndex((v) => v.workflow === tab.workflow); + return [ + { + label: t2("tabMenu.duplicateTab"), + command: /* @__PURE__ */ __name(() => { + workflowService.duplicateWorkflow(tab.workflow); + }, "command") + }, + { + separator: true + }, + { + label: t2("tabMenu.closeTab"), + command: /* @__PURE__ */ __name(() => onCloseWorkflow(tab), "command") + }, + { + label: t2("tabMenu.closeTabsToLeft"), + command: /* @__PURE__ */ __name(() => closeWorkflows(options.value.slice(0, index)), "command"), + disabled: index <= 0 + }, + { + label: t2("tabMenu.closeTabsToRight"), + command: /* @__PURE__ */ __name(() => closeWorkflows(options.value.slice(index + 1)), "command"), + disabled: index === options.value.length - 1 + }, + { + label: t2("tabMenu.closeOtherTabs"), + command: /* @__PURE__ */ __name(() => closeWorkflows([ + ...options.value.slice(index + 1), + ...options.value.slice(0, index) + ]), "command"), + disabled: options.value.length <= 1 + }, + { + label: workflowBookmarkStore.isBookmarked(tab.workflow.path) ? t2("tabMenu.removeFromBookmarks") : t2("tabMenu.addToBookmarks"), + command: /* @__PURE__ */ __name(() => workflowBookmarkStore.toggleBookmarked(tab.workflow.path), "command"), + disabled: tab.workflow.isTemporary + } + ]; + }); + const commandStore = useCommandStore(); + const handleWheel = /* @__PURE__ */ __name((event) => { + const scrollElement = event.currentTarget; + const scrollAmount = event.deltaX || event.deltaY; + scrollElement.scroll({ + left: scrollElement.scrollLeft + scrollAmount + }); + }, "handleWheel"); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createElementBlock("div", _hoisted_1$b, [ + createVNode(unref(script$d), { + class: "overflow-hidden no-drag", + "pt:content": { + class: "p-0 w-full", + onwheel: handleWheel + }, + "pt:barX": "h-1" + }, { + default: withCtx(() => [ + createVNode(unref(script$c), { + class: normalizeClass(["workflow-tabs bg-transparent", props.class]), + modelValue: selectedWorkflow.value, + "onUpdate:modelValue": onWorkflowChange, + options: options.value, + optionLabel: "label", + dataKey: "value" + }, { + option: withCtx(({ option }) => [ + createVNode(WorkflowTab, { + onContextmenu: /* @__PURE__ */ __name(($event) => showContextMenu($event, option), "onContextmenu"), + onMouseup: withModifiers(($event) => onCloseWorkflow(option), ["middle"]), + "workflow-option": option + }, null, 8, ["onContextmenu", "onMouseup", "workflow-option"]) + ]), + _: 1 + }, 8, ["class", "modelValue", "options"]) + ]), + _: 1 + }, 8, ["pt:content"]), + withDirectives(createVNode(unref(script), { + class: "new-blank-workflow-button flex-shrink-0 no-drag", + icon: "pi pi-plus", + text: "", + severity: "secondary", + "aria-label": _ctx.$t("sideToolbar.newBlankWorkflow"), + onClick: _cache[0] || (_cache[0] = () => unref(commandStore).execute("Comfy.NewBlankWorkflow")) + }, null, 8, ["aria-label"]), [ + [_directive_tooltip, { value: _ctx.$t("sideToolbar.newBlankWorkflow"), showDelay: 300 }] + ]), + createVNode(unref(script$e), { + ref_key: "menu", + ref: menu, + model: contextMenuItems.value + }, null, 8, ["model"]) + ]); + }; + } +}); +const WorkflowTabs = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-54fadc45"]]); +const _hoisted_1$a = { class: "absolute top-0 left-0 w-auto max-w-full pointer-events-auto" }; +const _sfc_main$9 = /* @__PURE__ */ defineComponent({ + __name: "SecondRowWorkflowTabs", + setup(__props) { + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$a, [ + createVNode(WorkflowTabs) + ]); + }; + } +}); +const SecondRowWorkflowTabs = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-38831d8e"]]); +const CORE_SETTINGS = [ + { + id: "Comfy.Validation.Workflows", + name: "Validate workflows", + type: "boolean", + defaultValue: true + }, + { + id: "Comfy.NodeSearchBoxImpl", + category: ["Comfy", "Node Search Box", "Implementation"], + experimental: true, + name: "Node search box implementation", + type: "combo", + options: ["default", "litegraph (legacy)"], + defaultValue: "default" + }, + { + id: "Comfy.LinkRelease.Action", + category: ["LiteGraph", "LinkRelease", "Action"], + name: "Action on link release (No modifier)", + type: "combo", + options: Object.values(LinkReleaseTriggerAction), + defaultValue: LinkReleaseTriggerAction.CONTEXT_MENU + }, + { + id: "Comfy.LinkRelease.ActionShift", + category: ["LiteGraph", "LinkRelease", "ActionShift"], + name: "Action on link release (Shift)", + type: "combo", + options: Object.values(LinkReleaseTriggerAction), + defaultValue: LinkReleaseTriggerAction.SEARCH_BOX + }, + { + id: "Comfy.NodeSearchBoxImpl.NodePreview", + category: ["Comfy", "Node Search Box", "NodePreview"], + name: "Node preview", + tooltip: "Only applies to the default implementation", + type: "boolean", + defaultValue: true + }, + { + id: "Comfy.NodeSearchBoxImpl.ShowCategory", + category: ["Comfy", "Node Search Box", "ShowCategory"], + name: "Show node category in search results", + tooltip: "Only applies to the default implementation", + type: "boolean", + defaultValue: true + }, + { + id: "Comfy.NodeSearchBoxImpl.ShowIdName", + category: ["Comfy", "Node Search Box", "ShowIdName"], + name: "Show node id name in search results", + tooltip: "Only applies to the default implementation", + type: "boolean", + defaultValue: false + }, + { + id: "Comfy.NodeSearchBoxImpl.ShowNodeFrequency", + category: ["Comfy", "Node Search Box", "ShowNodeFrequency"], + name: "Show node frequency in search results", + tooltip: "Only applies to the default implementation", + type: "boolean", + defaultValue: false + }, + { + id: "Comfy.Sidebar.Location", + category: ["Appearance", "Sidebar", "Location"], + name: "Sidebar location", + type: "combo", + options: ["left", "right"], + defaultValue: "left" + }, + { + id: "Comfy.Sidebar.Size", + category: ["Appearance", "Sidebar", "Size"], + name: "Sidebar size", + type: "combo", + options: ["normal", "small"], + // Default to small if the window is less than 1536px(2xl) wide. + defaultValue: /* @__PURE__ */ __name(() => window.innerWidth < 1536 ? "small" : "normal", "defaultValue") + }, + { + id: "Comfy.TextareaWidget.FontSize", + category: ["Appearance", "Node Widget", "TextareaWidget", "FontSize"], + name: "Textarea widget font size", + type: "slider", + defaultValue: 10, + attrs: { + min: 8, + max: 24 + } + }, + { + id: "Comfy.TextareaWidget.Spellcheck", + category: ["Comfy", "Node Widget", "TextareaWidget", "Spellcheck"], + name: "Textarea widget spellcheck", + type: "boolean", + defaultValue: false + }, + { + id: "Comfy.Workflow.SortNodeIdOnSave", + name: "Sort node IDs when saving workflow", + type: "boolean", + defaultValue: false + }, + { + id: "Comfy.Graph.CanvasInfo", + category: ["LiteGraph", "Canvas", "CanvasInfo"], + name: "Show canvas info on bottom left corner (fps, etc.)", + type: "boolean", + defaultValue: true + }, + { + id: "Comfy.Node.ShowDeprecated", + name: "Show deprecated nodes in search", + tooltip: "Deprecated nodes are hidden by default in the UI, but remain functional in existing workflows that use them.", + type: "boolean", + defaultValue: false + }, + { + id: "Comfy.Node.ShowExperimental", + name: "Show experimental nodes in search", + tooltip: "Experimental nodes are marked as such in the UI and may be subject to significant changes or removal in future versions. Use with caution in production workflows", + type: "boolean", + defaultValue: true + }, + { + id: "Comfy.Node.Opacity", + category: ["Appearance", "Node", "Opacity"], + name: "Node opacity", + type: "slider", + defaultValue: 1, + attrs: { + min: 0.01, + max: 1, + step: 0.01 + } + }, + { + id: "Comfy.Workflow.ShowMissingNodesWarning", + name: "Show missing nodes warning", + type: "boolean", + defaultValue: true + }, + { + id: "Comfy.Workflow.ShowMissingModelsWarning", + name: "Show missing models warning", + type: "boolean", + defaultValue: true, + experimental: true + }, + { + id: "Comfy.Graph.ZoomSpeed", + category: ["LiteGraph", "Canvas", "ZoomSpeed"], + name: "Canvas zoom speed", + type: "slider", + defaultValue: 1.1, + attrs: { + min: 1.01, + max: 2.5, + step: 0.01 + } + }, + // Bookmarks are stored in the settings store. + // Bookmarks are in format of category/display_name. e.g. "conditioning/CLIPTextEncode" + { + id: "Comfy.NodeLibrary.Bookmarks", + name: "Node library bookmarks with display name (deprecated)", + type: "hidden", + defaultValue: [], + deprecated: true + }, + { + id: "Comfy.NodeLibrary.Bookmarks.V2", + name: "Node library bookmarks v2 with unique name", + type: "hidden", + defaultValue: [] + }, + // Stores mapping from bookmark folder name to its customization. + { + id: "Comfy.NodeLibrary.BookmarksCustomization", + name: "Node library bookmarks customization", + type: "hidden", + defaultValue: {} + }, + // Hidden setting used by the queue for how to fit images + { + id: "Comfy.Queue.ImageFit", + name: "Queue image fit", + type: "hidden", + defaultValue: "cover" + }, + { + id: "Comfy.GroupSelectedNodes.Padding", + category: ["LiteGraph", "Group", "Padding"], + name: "Group selected nodes padding", + type: "slider", + defaultValue: 10, + attrs: { + min: 0, + max: 100 + } + }, + { + id: "Comfy.Node.DoubleClickTitleToEdit", + category: ["LiteGraph", "Node", "DoubleClickTitleToEdit"], + name: "Double click node title to edit", + type: "boolean", + defaultValue: true + }, + { + id: "Comfy.Group.DoubleClickTitleToEdit", + category: ["LiteGraph", "Group", "DoubleClickTitleToEdit"], + name: "Double click group title to edit", + type: "boolean", + defaultValue: true + }, + { + id: "Comfy.Window.UnloadConfirmation", + name: "Show confirmation when closing window", + type: "boolean", + defaultValue: true, + versionModified: "1.7.12" + }, + { + id: "Comfy.TreeExplorer.ItemPadding", + category: ["Appearance", "Tree Explorer", "ItemPadding"], + name: "Tree explorer item padding", + type: "slider", + defaultValue: 2, + attrs: { + min: 0, + max: 8, + step: 1 + } + }, + { + id: "Comfy.ModelLibrary.AutoLoadAll", + name: "Automatically load all model folders", + tooltip: "If true, all folders will load as soon as you open the model library (this may cause delays while it loads). If false, root level model folders will only load once you click on them.", + type: "boolean", + defaultValue: false + }, + { + id: "Comfy.ModelLibrary.NameFormat", + name: "What name to display in the model library tree view", + tooltip: 'Select "filename" to render a simplified view of the raw filename (without directory or ".safetensors" extension) in the model list. Select "title" to display the configurable model metadata title.', + type: "combo", + options: ["filename", "title"], + defaultValue: "title" + }, + { + id: "Comfy.Locale", + name: "Language", + type: "combo", + options: [ + { value: "en", text: "English" }, + { value: "zh", text: "中文" }, + { value: "ru", text: "Русский" }, + { value: "ja", text: "日本語" }, + { value: "ko", text: "한국어" }, + { value: "fr", text: "Français" } + ], + defaultValue: /* @__PURE__ */ __name(() => navigator.language.split("-")[0] || "en", "defaultValue") + }, + { + id: "Comfy.NodeBadge.NodeSourceBadgeMode", + category: ["LiteGraph", "Node", "NodeSourceBadgeMode"], + name: "Node source badge mode", + type: "combo", + options: Object.values(NodeBadgeMode), + defaultValue: NodeBadgeMode.HideBuiltIn + }, + { + id: "Comfy.NodeBadge.NodeIdBadgeMode", + category: ["LiteGraph", "Node", "NodeIdBadgeMode"], + name: "Node ID badge mode", + type: "combo", + options: [NodeBadgeMode.None, NodeBadgeMode.ShowAll], + defaultValue: NodeBadgeMode.None + }, + { + id: "Comfy.NodeBadge.NodeLifeCycleBadgeMode", + category: ["LiteGraph", "Node", "NodeLifeCycleBadgeMode"], + name: "Node life cycle badge mode", + type: "combo", + options: [NodeBadgeMode.None, NodeBadgeMode.ShowAll], + defaultValue: NodeBadgeMode.ShowAll + }, + { + id: "Comfy.ConfirmClear", + category: ["Comfy", "Workflow", "ConfirmClear"], + name: "Require confirmation when clearing workflow", + type: "boolean", + defaultValue: true + }, + { + id: "Comfy.PromptFilename", + category: ["Comfy", "Workflow", "PromptFilename"], + name: "Prompt for filename when saving workflow", + type: "boolean", + defaultValue: true + }, + /** + * file format for preview + * + * format;quality + * + * ex) + * webp;50 -> webp, quality 50 + * jpeg;80 -> rgb, jpeg, quality 80 + * + * @type {string} + */ + { + id: "Comfy.PreviewFormat", + category: ["LiteGraph", "Node Widget", "PreviewFormat"], + name: "Preview image format", + tooltip: "When displaying a preview in the image widget, convert it to a lightweight image, e.g. webp, jpeg, webp;50, etc.", + type: "text", + defaultValue: "" + }, + { + id: "Comfy.DisableSliders", + category: ["LiteGraph", "Node Widget", "DisableSliders"], + name: "Disable node widget sliders", + type: "boolean", + defaultValue: false + }, + { + id: "Comfy.DisableFloatRounding", + category: ["LiteGraph", "Node Widget", "DisableFloatRounding"], + name: "Disable default float widget rounding.", + tooltip: "(requires page reload) Cannot disable round when round is set by the node in the backend.", + type: "boolean", + defaultValue: false + }, + { + id: "Comfy.FloatRoundingPrecision", + category: ["LiteGraph", "Node Widget", "FloatRoundingPrecision"], + name: "Float widget rounding decimal places [0 = auto].", + tooltip: "(requires page reload)", + type: "slider", + attrs: { + min: 0, + max: 6, + step: 1 + }, + defaultValue: 0 + }, + { + id: "Comfy.EnableTooltips", + category: ["LiteGraph", "Node", "EnableTooltips"], + name: "Enable Tooltips", + type: "boolean", + defaultValue: true + }, + { + id: "Comfy.DevMode", + name: "Enable dev mode options (API save, etc.)", + type: "boolean", + defaultValue: false, + onChange: /* @__PURE__ */ __name((value) => { + const element = document.getElementById("comfy-dev-save-api-button"); + if (element) { + element.style.display = value ? "flex" : "none"; + } + }, "onChange") + }, + { + id: "Comfy.UseNewMenu", + category: ["Comfy", "Menu", "UseNewMenu"], + defaultValue: "Top", + name: "Use new menu", + type: "combo", + options: ["Disabled", "Top", "Bottom"], + migrateDeprecatedValue: /* @__PURE__ */ __name((value) => { + if (value === "Floating") { + return "Top"; + } + return value; + }, "migrateDeprecatedValue") + }, + { + id: "Comfy.Workflow.WorkflowTabsPosition", + name: "Opened workflows position", + type: "combo", + options: ["Sidebar", "Topbar", "Topbar (2nd-row)"], + // Default to topbar (2nd-row) if the window is less than 1536px(2xl) wide. + defaultValue: /* @__PURE__ */ __name(() => window.innerWidth < 1536 ? "Topbar (2nd-row)" : "Topbar", "defaultValue") + }, + { + id: "Comfy.Graph.CanvasMenu", + category: ["LiteGraph", "Canvas", "CanvasMenu"], + name: "Show graph canvas menu", + type: "boolean", + defaultValue: true + }, + { + id: "Comfy.QueueButton.BatchCountLimit", + name: "Batch count limit", + tooltip: "The maximum number of tasks added to the queue at one button click", + type: "number", + defaultValue: 100, + versionAdded: "1.3.5" + }, + { + id: "Comfy.Keybinding.UnsetBindings", + name: "Keybindings unset by the user", + type: "hidden", + defaultValue: [], + versionAdded: "1.3.7", + versionModified: "1.7.3", + migrateDeprecatedValue: /* @__PURE__ */ __name((value) => { + return value.map((keybinding) => { + if (keybinding["targetSelector"] === "#graph-canvas") { + keybinding["targetElementId"] = "graph-canvas"; + } + return keybinding; + }); + }, "migrateDeprecatedValue") + }, + { + id: "Comfy.Keybinding.NewBindings", + name: "Keybindings set by the user", + type: "hidden", + defaultValue: [], + versionAdded: "1.3.7" + }, + { + id: "Comfy.Extension.Disabled", + name: "Disabled extension names", + type: "hidden", + defaultValue: [], + versionAdded: "1.3.11" + }, + { + id: "Comfy.Validation.NodeDefs", + name: "Validate node definitions (slow)", + type: "boolean", + tooltip: "Recommended for node developers. This will validate all node definitions on startup.", + defaultValue: false, + versionAdded: "1.3.14" + }, + { + id: "Comfy.LinkRenderMode", + category: ["LiteGraph", "Graph", "LinkRenderMode"], + name: "Link Render Mode", + defaultValue: 2, + type: "combo", + options: [ + { value: LiteGraph.STRAIGHT_LINK, text: "Straight" }, + { value: LiteGraph.LINEAR_LINK, text: "Linear" }, + { value: LiteGraph.SPLINE_LINK, text: "Spline" }, + { value: LiteGraph.HIDDEN_LINK, text: "Hidden" } + ] + }, + { + id: "Comfy.Node.AutoSnapLinkToSlot", + category: ["LiteGraph", "Node", "AutoSnapLinkToSlot"], + name: "Auto snap link to node slot", + tooltip: "When dragging a link over a node, the link automatically snap to a viable input slot on the node", + type: "boolean", + defaultValue: true, + versionAdded: "1.3.29" + }, + { + id: "Comfy.Node.SnapHighlightsNode", + category: ["LiteGraph", "Node", "SnapHighlightsNode"], + name: "Snap highlights node", + tooltip: "When dragging a link over a node with viable input slot, highlight the node", + type: "boolean", + defaultValue: true, + versionAdded: "1.3.29" + }, + { + id: "Comfy.Node.BypassAllLinksOnDelete", + category: ["LiteGraph", "Node", "BypassAllLinksOnDelete"], + name: "Keep all links when deleting nodes", + tooltip: "When deleting a node, attempt to reconnect all of its input and output links (bypassing the deleted node)", + type: "boolean", + defaultValue: true, + versionAdded: "1.3.40" + }, + { + id: "Comfy.Node.MiddleClickRerouteNode", + category: ["LiteGraph", "Node", "MiddleClickRerouteNode"], + name: "Middle-click creates a new Reroute node", + type: "boolean", + defaultValue: true, + versionAdded: "1.3.42" + }, + { + id: "Comfy.RerouteBeta", + category: ["LiteGraph", "RerouteBeta"], + name: "Opt-in to the reroute beta test", + tooltip: "Enables the new native reroutes.\n\nReroutes can be added by holding alt and dragging from a link line, or on the link menu.\n\nDisabling this option is non-destructive - reroutes are hidden.", + experimental: true, + type: "boolean", + defaultValue: false, + versionAdded: "1.3.42" + }, + { + id: "Comfy.Graph.LinkMarkers", + category: ["LiteGraph", "Link", "LinkMarkers"], + name: "Link midpoint markers", + defaultValue: LinkMarkerShape.Circle, + type: "combo", + options: [ + { value: LinkMarkerShape.None, text: "None" }, + { value: LinkMarkerShape.Circle, text: "Circle" }, + { value: LinkMarkerShape.Arrow, text: "Arrow" } + ], + versionAdded: "1.3.42" + }, + { + id: "Comfy.DOMClippingEnabled", + category: ["LiteGraph", "Node", "DOMClippingEnabled"], + name: "Enable DOM element clipping (enabling may reduce performance)", + type: "boolean", + defaultValue: true + }, + { + id: "Comfy.Graph.CtrlShiftZoom", + category: ["LiteGraph", "Canvas", "CtrlShiftZoom"], + name: "Enable fast-zoom shortcut (Ctrl + Shift + Drag)", + type: "boolean", + defaultValue: true, + versionAdded: "1.4.0" + }, + { + id: "Comfy.Pointer.ClickDrift", + category: ["LiteGraph", "Pointer", "ClickDrift"], + name: "Pointer click drift (maximum distance)", + tooltip: "If the pointer moves more than this distance while holding a button down, it is considered dragging (rather than clicking).\n\nHelps prevent objects from being unintentionally nudged if the pointer is moved whilst clicking.", + experimental: true, + type: "slider", + attrs: { + min: 0, + max: 20, + step: 1 + }, + defaultValue: 6, + versionAdded: "1.4.3" + }, + { + id: "Comfy.Pointer.ClickBufferTime", + category: ["LiteGraph", "Pointer", "ClickBufferTime"], + name: "Pointer click drift delay", + tooltip: "After pressing a pointer button down, this is the maximum time (in milliseconds) that pointer movement can be ignored for.\n\nHelps prevent objects from being unintentionally nudged if the pointer is moved whilst clicking.", + experimental: true, + type: "slider", + attrs: { + min: 0, + max: 1e3, + step: 25 + }, + defaultValue: 150, + versionAdded: "1.4.3" + }, + { + id: "Comfy.Pointer.DoubleClickTime", + category: ["LiteGraph", "Pointer", "DoubleClickTime"], + name: "Double click interval (maximum)", + tooltip: "The maximum time in milliseconds between the two clicks of a double-click. Increasing this value may assist if double-clicks are sometimes not registered.", + type: "slider", + attrs: { + min: 100, + max: 1e3, + step: 50 + }, + defaultValue: 300, + versionAdded: "1.4.3" + }, + { + id: "Comfy.SnapToGrid.GridSize", + category: ["LiteGraph", "Canvas", "GridSize"], + name: "Snap to grid size", + type: "slider", + attrs: { + min: 1, + max: 500 + }, + tooltip: "When dragging and resizing nodes while holding shift they will be aligned to the grid, this controls the size of that grid.", + defaultValue: LiteGraph.CANVAS_GRID_SIZE + }, + // Keep the 'pysssss.SnapToGrid' setting id so we don't need to migrate setting values. + // Using a new setting id can cause existing users to lose their existing settings. + { + id: "pysssss.SnapToGrid", + category: ["LiteGraph", "Canvas", "AlwaysSnapToGrid"], + name: "Always snap to grid", + type: "boolean", + defaultValue: false, + versionAdded: "1.3.13" + }, + { + id: "Comfy.Server.ServerConfigValues", + name: "Server config values for frontend display", + tooltip: "Server config values used for frontend display only", + type: "hidden", + // Mapping from server config id to value. + defaultValue: {}, + versionAdded: "1.4.8" + }, + { + id: "Comfy.Server.LaunchArgs", + name: "Server launch arguments", + tooltip: "These are the actual arguments that are passed to the server when it is launched.", + type: "hidden", + defaultValue: {}, + versionAdded: "1.4.8" + }, + { + id: "Comfy.Queue.MaxHistoryItems", + name: "Queue history size", + tooltip: "The maximum number of tasks that show in the queue history.", + type: "slider", + attrs: { + min: 16, + max: 256, + step: 16 + }, + defaultValue: 64, + versionAdded: "1.4.12" + }, + { + id: "LiteGraph.Canvas.MaximumFps", + name: "Maxium FPS", + tooltip: "The maximum frames per second that the canvas is allowed to render. Caps GPU usage at the cost of smoothness. If 0, the screen refresh rate is used. Default: 0", + type: "slider", + attrs: { + min: 0, + max: 120 + }, + defaultValue: 0, + versionAdded: "1.5.1" + }, + { + id: "Comfy.EnableWorkflowViewRestore", + category: ["Comfy", "Workflow", "EnableWorkflowViewRestore"], + name: "Save and restore canvas position and zoom level in workflows", + type: "boolean", + defaultValue: true, + versionModified: "1.5.4" + }, + { + id: "Comfy.Workflow.ConfirmDelete", + name: "Show confirmation when deleting workflows", + type: "boolean", + defaultValue: true, + versionAdded: "1.5.6" + }, + { + id: "Comfy.ColorPalette", + name: "The active color palette id", + type: "hidden", + defaultValue: "dark", + versionModified: "1.6.7", + migrateDeprecatedValue(value) { + return value.startsWith("custom_") ? value.replace("custom_", "") : value; + } + }, + { + id: "Comfy.CustomColorPalettes", + name: "Custom color palettes", + type: "hidden", + defaultValue: {}, + versionModified: "1.6.7" + }, + { + id: "Comfy.WidgetControlMode", + category: ["Comfy", "Node Widget", "WidgetControlMode"], + name: "Widget control mode", + tooltip: "Controls when widget values are updated (randomize/increment/decrement), either before the prompt is queued or after.", + type: "combo", + defaultValue: "after", + options: ["before", "after"], + versionModified: "1.6.10" + }, + { + id: "Comfy.TutorialCompleted", + name: "Tutorial completed", + type: "hidden", + defaultValue: false, + versionAdded: "1.8.7" + }, + { + id: "LiteGraph.ContextMenu.Scaling", + name: "Scale node combo widget menus (lists) when zoomed in", + defaultValue: false, + type: "boolean", + versionAdded: "1.8.8" + } +]; +const useCanvasDrop = /* @__PURE__ */ __name((canvasRef) => { + const modelToNodeStore = useModelToNodeStore(); + const litegraphService = useLitegraphService(); + usePragmaticDroppable(() => canvasRef.value, { + getDropEffect: /* @__PURE__ */ __name((args) => args.source.data.type === "tree-explorer-node" ? "copy" : "move", "getDropEffect"), + onDrop: /* @__PURE__ */ __name((event) => { + const loc = event.location.current.input; + const dndData = event.source.data; + if (dndData.type === "tree-explorer-node") { + const node = dndData.data; + if (node.data instanceof ComfyNodeDefImpl) { + const nodeDef = node.data; + const pos = app.clientPosToCanvasPos([ + loc.clientX, + loc.clientY + LiteGraph.NODE_TITLE_HEIGHT + ]); + litegraphService.addNodeOnGraph(nodeDef, { pos }); + } else if (node.data instanceof ComfyModelDef) { + const model = node.data; + const pos = app.clientPosToCanvasPos([loc.clientX, loc.clientY]); + const nodeAtPos = app.graph.getNodeOnPos(pos[0], pos[1]); + let targetProvider = null; + let targetGraphNode = null; + if (nodeAtPos) { + const providers = modelToNodeStore.getAllNodeProviders( + model.directory + ); + for (const provider of providers) { + if (provider.nodeDef.name === nodeAtPos.comfyClass) { + targetGraphNode = nodeAtPos; + targetProvider = provider; + } + } + } + if (!targetGraphNode) { + const provider = modelToNodeStore.getNodeProvider(model.directory); + if (provider) { + targetGraphNode = litegraphService.addNodeOnGraph( + provider.nodeDef, + { + pos + } + ); + targetProvider = provider; + } + } + if (targetGraphNode) { + const widget = targetGraphNode.widgets?.find( + (widget2) => widget2.name === targetProvider?.key + ); + if (widget) { + widget.value = model.file_name; + } + } + } + } + }, "onDrop") + }); +}, "useCanvasDrop"); +const useGlobalLitegraph = /* @__PURE__ */ __name(() => { + window["LiteGraph"] = LiteGraph; + window["LGraph"] = LGraph; + window["LLink"] = LLink; + window["LGraphNode"] = LGraphNode; + window["LGraphGroup"] = LGraphGroup; + window["DragAndScale"] = DragAndScale; + window["LGraphCanvas"] = LGraphCanvas; + window["ContextMenu"] = ContextMenu; + window["LGraphBadge"] = LGraphBadge; +}, "useGlobalLitegraph"); +function useWorkflowPersistence() { + const workflowStore = useWorkflowStore(); + const settingStore = useSettingStore(); + const persistCurrentWorkflow = /* @__PURE__ */ __name(() => { + const workflow = JSON.stringify(app.serializeGraph()); + localStorage.setItem("workflow", workflow); + if (api.clientId) { + sessionStorage.setItem(`workflow:${api.clientId}`, workflow); + } + }, "persistCurrentWorkflow"); + const loadWorkflowFromStorage = /* @__PURE__ */ __name(async (json, workflowName) => { + if (!json) return false; + const workflow = JSON.parse(json); + await app.loadGraphData(workflow, true, true, workflowName); + return true; + }, "loadWorkflowFromStorage"); + const loadPreviousWorkflowFromStorage = /* @__PURE__ */ __name(async () => { + const workflowName = getStorageValue("Comfy.PreviousWorkflow"); + const clientId = api.initialClientId ?? api.clientId; + if (clientId) { + const sessionWorkflow = sessionStorage.getItem(`workflow:${clientId}`); + if (await loadWorkflowFromStorage(sessionWorkflow, workflowName)) { + return true; + } + } + const localWorkflow = localStorage.getItem("workflow"); + return await loadWorkflowFromStorage(localWorkflow, workflowName); + }, "loadPreviousWorkflowFromStorage"); + const loadDefaultWorkflow = /* @__PURE__ */ __name(async () => { + if (!settingStore.get("Comfy.TutorialCompleted")) { + await settingStore.set("Comfy.TutorialCompleted", true); + await useModelStore().loadModelFolders(); + await useWorkflowService().loadTutorialWorkflow(); + } else { + await app.loadGraphData(); + } + }, "loadDefaultWorkflow"); + const restorePreviousWorkflow = /* @__PURE__ */ __name(async () => { + try { + const restored = await loadPreviousWorkflowFromStorage(); + if (!restored) { + await loadDefaultWorkflow(); + } + } catch (err) { + console.error("Error loading previous workflow", err); + await loadDefaultWorkflow(); + } + }, "restorePreviousWorkflow"); + watchEffect(() => { + if (workflowStore.activeWorkflow) { + const workflow = workflowStore.activeWorkflow; + setStorageValue("Comfy.PreviousWorkflow", workflow.key); + persistCurrentWorkflow(); + } + }); + api.addEventListener("graphChanged", persistCurrentWorkflow); + const openWorkflows = computed(() => workflowStore.openWorkflows); + const activeWorkflow = computed(() => workflowStore.activeWorkflow); + const restoreState = computed( + () => { + if (!openWorkflows.value || !activeWorkflow.value) { + return { paths: [], activeIndex: -1 }; + } + const paths = openWorkflows.value.filter((workflow) => workflow?.isPersisted && !workflow.isModified).map((workflow) => workflow.path); + const activeIndex = openWorkflows.value.findIndex( + (workflow) => workflow.path === activeWorkflow.value?.path + ); + return { paths, activeIndex }; + } + ); + const storedWorkflows = JSON.parse( + getStorageValue("Comfy.OpenWorkflowsPaths") || "[]" + ); + const storedActiveIndex = JSON.parse( + getStorageValue("Comfy.ActiveWorkflowIndex") || "-1" + ); + watch(restoreState, ({ paths, activeIndex }) => { + setStorageValue("Comfy.OpenWorkflowsPaths", JSON.stringify(paths)); + setStorageValue("Comfy.ActiveWorkflowIndex", JSON.stringify(activeIndex)); + }); + const restoreWorkflowTabsState = /* @__PURE__ */ __name(() => { + const isRestorable = storedWorkflows?.length > 0 && storedActiveIndex >= 0; + if (isRestorable) { + workflowStore.openWorkflowsInBackground({ + left: storedWorkflows.slice(0, storedActiveIndex), + right: storedWorkflows.slice(storedActiveIndex) + }); + } + }, "restoreWorkflowTabsState"); + return { + restorePreviousWorkflow, + restoreWorkflowTabsState + }; +} +__name(useWorkflowPersistence, "useWorkflowPersistence"); +const _sfc_main$8 = /* @__PURE__ */ defineComponent({ + __name: "GraphCanvas", + emits: ["ready"], + setup(__props, { emit: __emit }) { + const emit = __emit; + const canvasRef = ref(null); + const settingStore = useSettingStore(); + const nodeDefStore = useNodeDefStore(); + const workspaceStore = useWorkspaceStore(); + const canvasStore = useCanvasStore(); + const betaMenuEnabled = computed( + () => settingStore.get("Comfy.UseNewMenu") !== "Disabled" + ); + const workflowTabsPosition = computed( + () => settingStore.get("Comfy.Workflow.WorkflowTabsPosition") + ); + const canvasMenuEnabled = computed( + () => settingStore.get("Comfy.Graph.CanvasMenu") + ); + const tooltipEnabled = computed(() => settingStore.get("Comfy.EnableTooltips")); + watchEffect(() => { + const canvasInfoEnabled = settingStore.get("Comfy.Graph.CanvasInfo"); + if (canvasStore.canvas) { + canvasStore.canvas.show_info = canvasInfoEnabled; + } + }); + watchEffect(() => { + const zoomSpeed = settingStore.get("Comfy.Graph.ZoomSpeed"); + if (canvasStore.canvas) { + canvasStore.canvas.zoom_speed = zoomSpeed; + } + }); + watchEffect(() => { + LiteGraph.snaps_for_comfy = settingStore.get("Comfy.Node.AutoSnapLinkToSlot"); + }); + watchEffect(() => { + LiteGraph.snap_highlights_node = settingStore.get( + "Comfy.Node.SnapHighlightsNode" + ); + }); + watchEffect(() => { + LGraphNode.keepAllLinksOnBypass = settingStore.get( + "Comfy.Node.BypassAllLinksOnDelete" + ); + }); + watchEffect(() => { + LiteGraph.middle_click_slot_add_default_node = settingStore.get( + "Comfy.Node.MiddleClickRerouteNode" + ); + }); + watchEffect(() => { + nodeDefStore.showDeprecated = settingStore.get("Comfy.Node.ShowDeprecated"); + }); + watchEffect(() => { + nodeDefStore.showExperimental = settingStore.get( + "Comfy.Node.ShowExperimental" + ); + }); + watchEffect(() => { + const spellcheckEnabled = settingStore.get("Comfy.TextareaWidget.Spellcheck"); + const textareas = document.querySelectorAll("textarea.comfy-multiline-input"); + textareas.forEach((textarea) => { + textarea.spellcheck = spellcheckEnabled; + textarea.focus(); + textarea.blur(); + }); + }); + watchEffect(() => { + const linkRenderMode = settingStore.get("Comfy.LinkRenderMode"); + if (canvasStore.canvas) { + canvasStore.canvas.links_render_mode = linkRenderMode; + canvasStore.canvas.setDirty( + /* fg */ + false, + /* bg */ + true + ); + } + }); + watchEffect(() => { + const linkMarkerShape = settingStore.get("Comfy.Graph.LinkMarkers"); + const { canvas } = canvasStore; + if (canvas) { + canvas.linkMarkerShape = linkMarkerShape; + canvas.setDirty(false, true); + } + }); + watchEffect(() => { + const reroutesEnabled = settingStore.get("Comfy.RerouteBeta"); + const { canvas } = canvasStore; + if (canvas) { + canvas.reroutesEnabled = reroutesEnabled; + canvas.setDirty(false, true); + } + }); + watchEffect(() => { + const maximumFps = settingStore.get("LiteGraph.Canvas.MaximumFps"); + const { canvas } = canvasStore; + if (canvas) canvas.maximumFps = maximumFps; + }); + watchEffect(() => { + CanvasPointer.doubleClickTime = settingStore.get( + "Comfy.Pointer.DoubleClickTime" + ); + }); + watchEffect(() => { + CanvasPointer.bufferTime = settingStore.get("Comfy.Pointer.ClickBufferTime"); + }); + watchEffect(() => { + CanvasPointer.maxClickDrift = settingStore.get("Comfy.Pointer.ClickDrift"); + }); + watchEffect(() => { + LiteGraph.CANVAS_GRID_SIZE = settingStore.get("Comfy.SnapToGrid.GridSize"); + }); + watchEffect(() => { + LiteGraph.alwaysSnapToGrid = settingStore.get("pysssss.SnapToGrid"); + }); + watch( + () => settingStore.get("Comfy.WidgetControlMode"), + () => { + if (!canvasStore.canvas) return; + for (const n of app.graph.nodes) { + if (!n.widgets) continue; + for (const w of n.widgets) { + if (w[IS_CONTROL_WIDGET]) { + updateControlWidgetLabel(w); + if (w.linkedWidgets) { + for (const l of w.linkedWidgets) { + updateControlWidgetLabel(l); + } + } + } + } + } + app.graph.setDirtyCanvas(true); + } + ); + const colorPaletteService = useColorPaletteService(); + const colorPaletteStore = useColorPaletteStore(); + watch( + [() => canvasStore.canvas, () => settingStore.get("Comfy.ColorPalette")], + ([canvas, currentPaletteId]) => { + if (!canvas) return; + colorPaletteService.loadColorPalette(currentPaletteId); + } + ); + watch( + () => colorPaletteStore.activePaletteId, + (newValue) => { + settingStore.set("Comfy.ColorPalette", newValue); + } + ); + watchEffect(() => { + LiteGraph.context_menu_scaling = settingStore.get( + "LiteGraph.ContextMenu.Scaling" + ); + }); + const loadCustomNodesI18n = /* @__PURE__ */ __name(async () => { + try { + const i18nData = await api.getCustomNodesI18n(); + Object.entries(i18nData).forEach(([locale, message]) => { + i18n.global.mergeLocaleMessage(locale, message); + }); + } catch (error) { + console.error("Failed to load custom nodes i18n", error); + } + }, "loadCustomNodesI18n"); + const comfyAppReady = ref(false); + const workflowPersistence = useWorkflowPersistence(); + useCanvasDrop(canvasRef); + onMounted(async () => { + useGlobalLitegraph(); + app.vueAppReady = true; + workspaceStore.spinner = true; + ChangeTracker.init(app); + await loadCustomNodesI18n(); + await settingStore.loadSettingValues(); + CORE_SETTINGS.forEach((setting) => { + settingStore.addSetting(setting); + }); + await app.setup(canvasRef.value); + canvasStore.canvas = app.canvas; + canvasStore.canvas.render_canvas_border = false; + workspaceStore.spinner = false; + window["app"] = app; + window["graph"] = app.graph; + comfyAppReady.value = true; + colorPaletteStore.customPalettes = settingStore.get( + "Comfy.CustomColorPalettes" + ); + await workflowPersistence.restorePreviousWorkflow(); + workflowPersistence.restoreWorkflowTabsState(); + watch( + () => settingStore.get("Comfy.Locale"), + async () => { + await useCommandStore().execute("Comfy.RefreshNodeDefinitions"); + useWorkflowService().reloadCurrentWorkflow(); + } + ); + emit("ready"); + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock(Fragment, null, [ + (openBlock(), createBlock(Teleport, { to: ".graph-canvas-container" }, [ + comfyAppReady.value && betaMenuEnabled.value && !unref(workspaceStore).focusMode ? (openBlock(), createBlock(LiteGraphCanvasSplitterOverlay, { key: 0 }, { + "side-bar-panel": withCtx(() => [ + createVNode(SideToolbar) + ]), + "bottom-panel": withCtx(() => [ + createVNode(_sfc_main$p) + ]), + "graph-canvas-panel": withCtx(() => [ + workflowTabsPosition.value === "Topbar (2nd-row)" ? (openBlock(), createBlock(SecondRowWorkflowTabs, { key: 0 })) : createCommentVNode("", true), + canvasMenuEnabled.value ? (openBlock(), createBlock(GraphCanvasMenu, { key: 1 })) : createCommentVNode("", true) + ]), + _: 1 + })) : createCommentVNode("", true), + createVNode(TitleEditor), + !betaMenuEnabled.value && canvasMenuEnabled.value ? (openBlock(), createBlock(GraphCanvasMenu, { key: 1 })) : createCommentVNode("", true), + createBaseVNode("canvas", { + ref_key: "canvasRef", + ref: canvasRef, + id: "graph-canvas", + tabindex: "1" + }, null, 512) + ])), + createVNode(_sfc_main$h), + tooltipEnabled.value ? (openBlock(), createBlock(NodeTooltip, { key: 0 })) : createCommentVNode("", true), + createVNode(_sfc_main$n) + ], 64); + }; + } +}); +const _sfc_main$7 = /* @__PURE__ */ defineComponent({ + __name: "GlobalToast", + setup(__props) { + const toast = useToast(); + const toastStore = useToastStore(); + const settingStore = useSettingStore(); + watch( + () => toastStore.messagesToAdd, + (newMessages) => { + if (newMessages.length === 0) { + return; + } + newMessages.forEach((message) => { + toast.add(message); + }); + toastStore.messagesToAdd = []; + }, + { deep: true } + ); + watch( + () => toastStore.messagesToRemove, + (messagesToRemove) => { + if (messagesToRemove.length === 0) { + return; + } + messagesToRemove.forEach((message) => { + toast.remove(message); + }); + toastStore.messagesToRemove = []; + }, + { deep: true } + ); + watch( + () => toastStore.removeAllRequested, + (requested) => { + if (requested) { + toast.removeAllGroups(); + toastStore.removeAllRequested = false; + } + } + ); + function updateToastPosition() { + const styleElement = document.getElementById("dynamic-toast-style") || createStyleElement(); + const rect = document.querySelector(".graph-canvas-container").getBoundingClientRect(); + styleElement.textContent = ` + .p-toast.p-component.p-toast-top-right { + top: ${rect.top + 20}px !important; + right: ${window.innerWidth - (rect.left + rect.width) + 20}px !important; + } + `; + } + __name(updateToastPosition, "updateToastPosition"); + function createStyleElement() { + const style = document.createElement("style"); + style.id = "dynamic-toast-style"; + document.head.appendChild(style); + return style; + } + __name(createStyleElement, "createStyleElement"); + watch( + () => settingStore.get("Comfy.UseNewMenu"), + () => nextTick(updateToastPosition), + { immediate: true } + ); + watch( + () => settingStore.get("Comfy.Sidebar.Location"), + () => nextTick(updateToastPosition), + { immediate: true } + ); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(script$f)); + }; + } +}); +const _hoisted_1$9 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +function render$5(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$9, _cache[0] || (_cache[0] = [ + createBaseVNode("path", { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "2", + d: "M6 4v16m4-16l10 8l-10 8z" + }, null, -1) + ])); +} +__name(render$5, "render$5"); +const __unplugin_components_3 = markRaw({ name: "lucide-step-forward", render: render$5 }); +const _hoisted_1$8 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +function render$4(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$8, _cache[0] || (_cache[0] = [ + createBaseVNode("path", { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "2", + d: "m13 19l9-7l-9-7zM2 19l9-7l-9-7z" + }, null, -1) + ])); +} +__name(render$4, "render$4"); +const __unplugin_components_2 = markRaw({ name: "lucide-fast-forward", render: render$4 }); +const _hoisted_1$7 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +function render$3(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$7, _cache[0] || (_cache[0] = [ + createBaseVNode("path", { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "2", + d: "m6 3l14 9l-14 9z" + }, null, -1) + ])); +} +__name(render$3, "render$3"); +const __unplugin_components_1$1 = markRaw({ name: "lucide-play", render: render$3 }); +const _hoisted_1$6 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +function render$2(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$6, _cache[0] || (_cache[0] = [ + createBaseVNode("g", { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "2" + }, [ + createBaseVNode("path", { d: "M16 12H3m13 6H3m7-12H3m18 12V8a2 2 0 0 0-2-2h-5" }), + createBaseVNode("path", { d: "m16 8l-2-2l2-2" }) + ], -1) + ])); +} +__name(render$2, "render$2"); +const __unplugin_components_0$1 = markRaw({ name: "lucide-list-start", render: render$2 }); +const _hoisted_1$5 = ["aria-label"]; +const minQueueCount = 1; +const _sfc_main$6 = /* @__PURE__ */ defineComponent({ + __name: "BatchCountEdit", + props: { + class: { default: "" } + }, + setup(__props) { + const props = __props; + const queueSettingsStore = useQueueSettingsStore(); + const { batchCount } = storeToRefs(queueSettingsStore); + const settingStore = useSettingStore(); + const maxQueueCount = computed( + () => settingStore.get("Comfy.QueueButton.BatchCountLimit") + ); + const handleClick = /* @__PURE__ */ __name((increment) => { + let newCount; + if (increment) { + const originalCount = batchCount.value - 1; + newCount = Math.min(originalCount * 2, maxQueueCount.value); + } else { + const originalCount = batchCount.value + 1; + newCount = Math.floor(originalCount / 2); + } + batchCount.value = newCount; + }, "handleClick"); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return withDirectives((openBlock(), createElementBlock("div", { + class: normalizeClass(["batch-count", props.class]), + "aria-label": _ctx.$t("menu.batchCount") + }, [ + createVNode(unref(script$g), { + class: "w-14", + modelValue: unref(batchCount), + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(batchCount) ? batchCount.value = $event : null), + min: minQueueCount, + max: maxQueueCount.value, + fluid: "", + showButtons: "", + pt: { + incrementButton: { + class: "w-6", + onmousedown: /* @__PURE__ */ __name(() => { + handleClick(true); + }, "onmousedown") + }, + decrementButton: { + class: "w-6", + onmousedown: /* @__PURE__ */ __name(() => { + handleClick(false); + }, "onmousedown") + } + } + }, null, 8, ["modelValue", "max", "pt"]) + ], 10, _hoisted_1$5)), [ + [ + _directive_tooltip, + _ctx.$t("menu.batchCount"), + void 0, + { bottom: true } + ] + ]); + }; + } +}); +const BatchCountEdit = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-26957f1f"]]); +const _hoisted_1$4 = { class: "queue-button-group flex" }; +const _sfc_main$5 = /* @__PURE__ */ defineComponent({ + __name: "ComfyQueueButton", + setup(__props) { + const workspaceStore = useWorkspaceStore(); + const queueCountStore = storeToRefs(useQueuePendingTaskCountStore()); + const { mode: queueMode } = storeToRefs(useQueueSettingsStore()); + const { t: t2 } = useI18n(); + const queueModeMenuItemLookup = computed(() => ({ + disabled: { + key: "disabled", + label: t2("menu.queue"), + tooltip: t2("menu.disabledTooltip"), + command: /* @__PURE__ */ __name(() => { + queueMode.value = "disabled"; + }, "command") + }, + instant: { + key: "instant", + label: `${t2("menu.queue")} (${t2("menu.instant")})`, + tooltip: t2("menu.instantTooltip"), + command: /* @__PURE__ */ __name(() => { + queueMode.value = "instant"; + }, "command") + }, + change: { + key: "change", + label: `${t2("menu.queue")} (${t2("menu.onChange")})`, + tooltip: t2("menu.onChangeTooltip"), + command: /* @__PURE__ */ __name(() => { + queueMode.value = "change"; + }, "command") + } + })); + const activeQueueModeMenuItem = computed( + () => queueModeMenuItemLookup.value[queueMode.value] + ); + const queueModeMenuItems = computed( + () => Object.values(queueModeMenuItemLookup.value) + ); + const executingPrompt = computed(() => !!queueCountStore.count.value); + const hasPendingTasks = computed(() => queueCountStore.count.value > 1); + const commandStore = useCommandStore(); + const queuePrompt = /* @__PURE__ */ __name((e) => { + const commandId = e.shiftKey ? "Comfy.QueuePromptFront" : "Comfy.QueuePrompt"; + commandStore.execute(commandId); + }, "queuePrompt"); + return (_ctx, _cache) => { + const _component_i_lucide58list_start = __unplugin_components_0$1; + const _component_i_lucide58play = __unplugin_components_1$1; + const _component_i_lucide58fast_forward = __unplugin_components_2; + const _component_i_lucide58step_forward = __unplugin_components_3; + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createElementBlock("div", _hoisted_1$4, [ + withDirectives((openBlock(), createBlock(unref(script$h), { + class: "comfyui-queue-button", + label: activeQueueModeMenuItem.value.label, + severity: "primary", + size: "small", + onClick: queuePrompt, + model: queueModeMenuItems.value, + "data-testid": "queue-button" + }, { + icon: withCtx(() => [ + unref(workspaceStore).shiftDown ? (openBlock(), createBlock(_component_i_lucide58list_start, { key: 0 })) : unref(queueMode) === "disabled" ? (openBlock(), createBlock(_component_i_lucide58play, { key: 1 })) : unref(queueMode) === "instant" ? (openBlock(), createBlock(_component_i_lucide58fast_forward, { key: 2 })) : unref(queueMode) === "change" ? (openBlock(), createBlock(_component_i_lucide58step_forward, { key: 3 })) : createCommentVNode("", true) + ]), + item: withCtx(({ item }) => [ + withDirectives(createVNode(unref(script), { + label: String(item.label), + icon: item.icon, + severity: item.key === unref(queueMode) ? "primary" : "secondary", + size: "small", + text: "" + }, null, 8, ["label", "icon", "severity"]), [ + [_directive_tooltip, item.tooltip] + ]) + ]), + _: 1 + }, 8, ["label", "model"])), [ + [ + _directive_tooltip, + unref(workspaceStore).shiftDown ? _ctx.$t("menu.queueWorkflowFront") : _ctx.$t("menu.queueWorkflow"), + void 0, + { bottom: true } + ] + ]), + createVNode(BatchCountEdit), + createVNode(unref(script$6), { class: "execution-actions flex flex-nowrap" }, { + default: withCtx(() => [ + withDirectives(createVNode(unref(script), { + icon: "pi pi-times", + severity: executingPrompt.value ? "danger" : "secondary", + disabled: !executingPrompt.value, + text: "", + "aria-label": _ctx.$t("menu.interrupt"), + onClick: _cache[0] || (_cache[0] = () => unref(commandStore).execute("Comfy.Interrupt")) + }, null, 8, ["severity", "disabled", "aria-label"]), [ + [ + _directive_tooltip, + _ctx.$t("menu.interrupt"), + void 0, + { bottom: true } + ] + ]), + withDirectives(createVNode(unref(script), { + icon: "pi pi-stop", + severity: hasPendingTasks.value ? "danger" : "secondary", + disabled: !hasPendingTasks.value, + text: "", + "aria-label": _ctx.$t("sideToolbar.queueTab.clearPendingTasks"), + onClick: _cache[1] || (_cache[1] = () => unref(commandStore).execute("Comfy.ClearPendingTasks")) + }, null, 8, ["severity", "disabled", "aria-label"]), [ + [ + _directive_tooltip, + _ctx.$t("sideToolbar.queueTab.clearPendingTasks"), + void 0, + { bottom: true } + ] + ]) + ]), + _: 1 + }) + ]); + }; + } +}); +const ComfyQueueButton = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-91a628af"]]); +const overlapThreshold = 20; +const _sfc_main$4 = /* @__PURE__ */ defineComponent({ + __name: "ComfyActionbar", + setup(__props) { + const settingsStore = useSettingStore(); + const visible = computed( + () => settingsStore.get("Comfy.UseNewMenu") !== "Disabled" + ); + const panelRef = ref(null); + const dragHandleRef = ref(null); + const isDocked = useLocalStorage("Comfy.MenuPosition.Docked", false); + const storedPosition = useLocalStorage("Comfy.MenuPosition.Floating", { + x: 0, + y: 0 + }); + const { + x, + y, + style, + isDragging + } = useDraggable(panelRef, { + initialValue: { x: 0, y: 0 }, + handle: dragHandleRef, + containerElement: document.body + }); + watchDebounced( + [x, y], + ([newX, newY]) => { + storedPosition.value = { x: newX, y: newY }; + }, + { debounce: 300 } + ); + const setInitialPosition = /* @__PURE__ */ __name(() => { + if (x.value !== 0 || y.value !== 0) { + return; + } + if (storedPosition.value.x !== 0 || storedPosition.value.y !== 0) { + x.value = storedPosition.value.x; + y.value = storedPosition.value.y; + captureLastDragState(); + return; + } + if (panelRef.value) { + const screenWidth = window.innerWidth; + const screenHeight = window.innerHeight; + const menuWidth = panelRef.value.offsetWidth; + const menuHeight = panelRef.value.offsetHeight; + if (menuWidth === 0 || menuHeight === 0) { + return; + } + x.value = (screenWidth - menuWidth) / 2; + y.value = screenHeight - menuHeight - 10; + captureLastDragState(); + } + }, "setInitialPosition"); + onMounted(setInitialPosition); + watch(visible, (newVisible) => { + if (newVisible) { + nextTick(setInitialPosition); + } + }); + const lastDragState = ref({ + x: x.value, + y: y.value, + windowWidth: window.innerWidth, + windowHeight: window.innerHeight + }); + const captureLastDragState = /* @__PURE__ */ __name(() => { + lastDragState.value = { + x: x.value, + y: y.value, + windowWidth: window.innerWidth, + windowHeight: window.innerHeight + }; + }, "captureLastDragState"); + watch( + isDragging, + (newIsDragging) => { + if (!newIsDragging) { + captureLastDragState(); + } + }, + { immediate: true } + ); + const adjustMenuPosition = /* @__PURE__ */ __name(() => { + if (panelRef.value) { + const screenWidth = window.innerWidth; + const screenHeight = window.innerHeight; + const menuWidth = panelRef.value.offsetWidth; + const menuHeight = panelRef.value.offsetHeight; + const distanceLeft = lastDragState.value.x; + const distanceRight = lastDragState.value.windowWidth - (lastDragState.value.x + menuWidth); + const distanceTop = lastDragState.value.y; + const distanceBottom = lastDragState.value.windowHeight - (lastDragState.value.y + menuHeight); + const distances = [ + { edge: "left", distance: distanceLeft }, + { edge: "right", distance: distanceRight }, + { edge: "top", distance: distanceTop }, + { edge: "bottom", distance: distanceBottom } + ]; + const closestEdge = distances.reduce( + (min, curr) => curr.distance < min.distance ? curr : min + ); + const verticalRatio = lastDragState.value.y / lastDragState.value.windowHeight; + const horizontalRatio = lastDragState.value.x / lastDragState.value.windowWidth; + if (closestEdge.edge === "left") { + x.value = closestEdge.distance; + y.value = verticalRatio * screenHeight; + } else if (closestEdge.edge === "right") { + x.value = screenWidth - menuWidth - closestEdge.distance; + y.value = verticalRatio * screenHeight; + } else if (closestEdge.edge === "top") { + x.value = horizontalRatio * screenWidth; + y.value = closestEdge.distance; + } else { + x.value = horizontalRatio * screenWidth; + y.value = screenHeight - menuHeight - closestEdge.distance; + } + x.value = lodashExports.clamp(x.value, 0, screenWidth - menuWidth); + y.value = lodashExports.clamp(y.value, 0, screenHeight - menuHeight); + } + }, "adjustMenuPosition"); + useEventListener(window, "resize", adjustMenuPosition); + const topMenuRef = inject("topMenuRef"); + const topMenuBounds = useElementBounding(topMenuRef); + const isOverlappingWithTopMenu = computed(() => { + if (!panelRef.value) { + return false; + } + const { height } = panelRef.value.getBoundingClientRect(); + const actionbarBottom = y.value + height; + const topMenuBottom = topMenuBounds.bottom.value; + const overlapPixels = Math.min(actionbarBottom, topMenuBottom) - Math.max(y.value, topMenuBounds.top.value); + return overlapPixels > overlapThreshold; + }); + watch(isDragging, (newIsDragging) => { + if (!newIsDragging) { + isDocked.value = isOverlappingWithTopMenu.value; + } else { + isDocked.value = false; + } + }); + const eventBus = useEventBus("topMenu"); + watch([isDragging, isOverlappingWithTopMenu], ([dragging, overlapping]) => { + eventBus.emit("updateHighlight", { + isDragging: dragging, + isOverlapping: overlapping + }); + }); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(script$i), { + class: normalizeClass(["actionbar w-fit", { "is-dragging": unref(isDragging), "is-docked": unref(isDocked) }]), + style: normalizeStyle(unref(style)) + }, { + default: withCtx(() => [ + createBaseVNode("div", { + class: "actionbar-content flex items-center", + ref_key: "panelRef", + ref: panelRef + }, [ + createBaseVNode("span", { + class: "drag-handle cursor-move mr-2 p-0!", + ref_key: "dragHandleRef", + ref: dragHandleRef + }, null, 512), + createVNode(ComfyQueueButton) + ], 512) + ]), + _: 1 + }, 8, ["style", "class"]); + }; + } +}); +const Actionbar = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-915e5456"]]); +const _hoisted_1$3 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +function render$1(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$3, _cache[0] || (_cache[0] = [ + createBaseVNode("path", { + fill: "currentColor", + d: "M5 21q-.825 0-1.412-.587T3 19V5q0-.825.588-1.412T5 3h14q.825 0 1.413.588T21 5v14q0 .825-.587 1.413T19 21zm0-5v3h14v-3zm0-2h14V5H5zm0 2v3z" + }, null, -1) + ])); +} +__name(render$1, "render$1"); +const __unplugin_components_1 = markRaw({ name: "material-symbols-dock-to-bottom-outline", render: render$1 }); +const _hoisted_1$2 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +function render(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$2, _cache[0] || (_cache[0] = [ + createBaseVNode("path", { + fill: "currentColor", + d: "M5 21q-.825 0-1.412-.587T3 19V5q0-.825.588-1.412T5 3h14q.825 0 1.413.588T21 5v14q0 .825-.587 1.413T19 21zm0-7h14V5H5z" + }, null, -1) + ])); +} +__name(render, "render"); +const __unplugin_components_0 = markRaw({ name: "material-symbols-dock-to-bottom", render }); +const _sfc_main$3 = /* @__PURE__ */ defineComponent({ + __name: "BottomPanelToggleButton", + setup(__props) { + const bottomPanelStore = useBottomPanelStore(); + return (_ctx, _cache) => { + const _component_i_material_symbols58dock_to_bottom = __unplugin_components_0; + const _component_i_material_symbols58dock_to_bottom_outline = __unplugin_components_1; + const _directive_tooltip = resolveDirective("tooltip"); + return withDirectives((openBlock(), createBlock(unref(script), { + severity: "secondary", + text: "", + "aria-label": _ctx.$t("menu.toggleBottomPanel"), + onClick: unref(bottomPanelStore).toggleBottomPanel + }, { + icon: withCtx(() => [ + unref(bottomPanelStore).bottomPanelVisible ? (openBlock(), createBlock(_component_i_material_symbols58dock_to_bottom, { key: 0 })) : (openBlock(), createBlock(_component_i_material_symbols58dock_to_bottom_outline, { key: 1 })) + ]), + _: 1 + }, 8, ["aria-label", "onClick"])), [ + [vShow, unref(bottomPanelStore).bottomPanelTabs.length > 0], + [_directive_tooltip, { value: _ctx.$t("menu.toggleBottomPanel"), showDelay: 300 }] + ]); + }; + } +}); +const _hoisted_1$1 = ["href"]; +const _hoisted_2$1 = { class: "p-menubar-item-label" }; +const _hoisted_3$1 = { + key: 1, + class: "ml-auto border border-surface rounded text-muted text-xs text-nowrap p-1 keybinding-tag" +}; +const _sfc_main$2 = /* @__PURE__ */ defineComponent({ + __name: "CommandMenubar", + setup(__props) { + const settingStore = useSettingStore(); + const dropdownDirection = computed( + () => settingStore.get("Comfy.UseNewMenu") === "Top" ? "down" : "up" + ); + const menuItemsStore = useMenuItemStore(); + const { t: t2 } = useI18n(); + const translateMenuItem = /* @__PURE__ */ __name((item) => { + const label = typeof item.label === "function" ? item.label() : item.label; + const translatedLabel = label ? t2(`menuLabels.${normalizeI18nKey(label)}`, label) : void 0; + return { + ...item, + label: translatedLabel, + items: item.items?.map(translateMenuItem) + }; + }, "translateMenuItem"); + const translatedItems = computed( + () => menuItemsStore.menuItems.map(translateMenuItem) + ); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(script$j), { + model: translatedItems.value, + class: "top-menubar border-none p-0 bg-transparent", + pt: { + rootList: "gap-0 flex-nowrap w-auto", + submenu: `dropdown-direction-${dropdownDirection.value}`, + item: "relative" + } + }, { + item: withCtx(({ item, props }) => [ + createBaseVNode("a", mergeProps({ class: "p-menubar-item-link" }, props.action, { + href: item.url, + target: "_blank" + }), [ + item.icon ? (openBlock(), createElementBlock("span", { + key: 0, + class: normalizeClass(["p-menubar-item-icon", item.icon]) + }, null, 2)) : createCommentVNode("", true), + createBaseVNode("span", _hoisted_2$1, toDisplayString(item.label), 1), + item?.comfyCommand?.keybinding ? (openBlock(), createElementBlock("span", _hoisted_3$1, toDisplayString(item.comfyCommand.keybinding.combo.toString()), 1)) : createCommentVNode("", true) + ], 16, _hoisted_1$1) + ]), + _: 1 + }, 8, ["model", "pt"]); + }; + } +}); +const CommandMenubar = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-56df69d2"]]); +const _hoisted_1 = { class: "flex-grow min-w-0 app-drag h-full" }; +const _hoisted_2 = { class: "window-actions-spacer flex-shrink-0" }; +const _hoisted_3 = { class: "fixed top-0 left-0 app-drag w-full h-[var(--comfy-topbar-height)]" }; +const _sfc_main$1 = /* @__PURE__ */ defineComponent({ + __name: "TopMenubar", + setup(__props) { + const workspaceState = useWorkspaceStore(); + const settingStore = useSettingStore(); + const workflowTabsPosition = computed( + () => settingStore.get("Comfy.Workflow.WorkflowTabsPosition") + ); + const menuSetting = computed(() => settingStore.get("Comfy.UseNewMenu")); + const betaMenuEnabled = computed(() => menuSetting.value !== "Disabled"); + const teleportTarget = computed( + () => settingStore.get("Comfy.UseNewMenu") === "Top" ? ".comfyui-body-top" : ".comfyui-body-bottom" + ); + const showTopMenu = computed( + () => betaMenuEnabled.value && !workspaceState.focusMode + ); + const menuRight = ref(null); + onMounted(() => { + if (menuRight.value) { + menuRight.value.appendChild(app.menu.element); + } + }); + const topMenuRef = ref(null); + provide("topMenuRef", topMenuRef); + const eventBus = useEventBus("topMenu"); + const isDropZone = ref(false); + const isDroppable = ref(false); + eventBus.on((event, payload) => { + if (event === "updateHighlight") { + isDropZone.value = payload.isDragging; + isDroppable.value = payload.isOverlapping && payload.isDragging; + } + }); + onMounted(() => { + if (isElectron()) { + electronAPI().changeTheme({ + height: topMenuRef.value.getBoundingClientRect().height + }); + } + }); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createElementBlock(Fragment, null, [ + (openBlock(), createBlock(Teleport, { to: teleportTarget.value }, [ + withDirectives(createBaseVNode("div", { + ref_key: "topMenuRef", + ref: topMenuRef, + class: normalizeClass(["comfyui-menu flex items-center", { dropzone: isDropZone.value, "dropzone-active": isDroppable.value }]) + }, [ + _cache[1] || (_cache[1] = createBaseVNode("h1", { class: "comfyui-logo mx-2 app-drag" }, "ComfyUI", -1)), + createVNode(CommandMenubar), + createBaseVNode("div", _hoisted_1, [ + workflowTabsPosition.value === "Topbar" ? (openBlock(), createBlock(WorkflowTabs, { key: 0 })) : createCommentVNode("", true) + ]), + createBaseVNode("div", { + class: "comfyui-menu-right", + ref_key: "menuRight", + ref: menuRight + }, null, 512), + createVNode(Actionbar), + createVNode(_sfc_main$3, { class: "flex-shrink-0" }), + withDirectives(createVNode(unref(script), { + class: "flex-shrink-0", + icon: "pi pi-bars", + severity: "secondary", + text: "", + "aria-label": _ctx.$t("menu.hideMenu"), + onClick: _cache[0] || (_cache[0] = ($event) => unref(workspaceState).focusMode = true), + onContextmenu: unref(showNativeMenu) + }, null, 8, ["aria-label", "onContextmenu"]), [ + [_directive_tooltip, { value: _ctx.$t("menu.hideMenu"), showDelay: 300 }] + ]), + withDirectives(createBaseVNode("div", _hoisted_2, null, 512), [ + [vShow, menuSetting.value !== "Bottom"] + ]) + ], 2), [ + [vShow, showTopMenu.value] + ]) + ], 8, ["to"])), + withDirectives(createBaseVNode("div", _hoisted_3, null, 512), [ + [vShow, unref(isNativeWindow)() && !showTopMenu.value] + ]) + ], 64); + }; + } +}); +const TopMenubar = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-929e7543"]]); +var LatentPreviewMethod = /* @__PURE__ */ ((LatentPreviewMethod2) => { + LatentPreviewMethod2["NoPreviews"] = "none"; + LatentPreviewMethod2["Auto"] = "auto"; + LatentPreviewMethod2["Latent2RGB"] = "latent2rgb"; + LatentPreviewMethod2["TAESD"] = "taesd"; + return LatentPreviewMethod2; +})(LatentPreviewMethod || {}); +var LogLevel = /* @__PURE__ */ ((LogLevel2) => { + LogLevel2["DEBUG"] = "DEBUG"; + LogLevel2["INFO"] = "INFO"; + LogLevel2["WARNING"] = "WARNING"; + LogLevel2["ERROR"] = "ERROR"; + LogLevel2["CRITICAL"] = "CRITICAL"; + return LogLevel2; +})(LogLevel || {}); +var HashFunction = /* @__PURE__ */ ((HashFunction2) => { + HashFunction2["MD5"] = "md5"; + HashFunction2["SHA1"] = "sha1"; + HashFunction2["SHA256"] = "sha256"; + HashFunction2["SHA512"] = "sha512"; + return HashFunction2; +})(HashFunction || {}); +var AutoLaunch = /* @__PURE__ */ ((AutoLaunch2) => { + AutoLaunch2["Auto"] = "auto"; + AutoLaunch2["Disable"] = "disable"; + AutoLaunch2["Enable"] = "enable"; + return AutoLaunch2; +})(AutoLaunch || {}); +var CudaMalloc = /* @__PURE__ */ ((CudaMalloc2) => { + CudaMalloc2["Auto"] = "auto"; + CudaMalloc2["Disable"] = "disable"; + CudaMalloc2["Enable"] = "enable"; + return CudaMalloc2; +})(CudaMalloc || {}); +var FloatingPointPrecision = /* @__PURE__ */ ((FloatingPointPrecision2) => { + FloatingPointPrecision2["AUTO"] = "auto"; + FloatingPointPrecision2["FP64"] = "fp64"; + FloatingPointPrecision2["FP32"] = "fp32"; + FloatingPointPrecision2["FP16"] = "fp16"; + FloatingPointPrecision2["BF16"] = "bf16"; + FloatingPointPrecision2["FP8E4M3FN"] = "fp8_e4m3fn"; + FloatingPointPrecision2["FP8E5M2"] = "fp8_e5m2"; + return FloatingPointPrecision2; +})(FloatingPointPrecision || {}); +var CrossAttentionMethod = /* @__PURE__ */ ((CrossAttentionMethod2) => { + CrossAttentionMethod2["Auto"] = "auto"; + CrossAttentionMethod2["Split"] = "split"; + CrossAttentionMethod2["Quad"] = "quad"; + CrossAttentionMethod2["Pytorch"] = "pytorch"; + return CrossAttentionMethod2; +})(CrossAttentionMethod || {}); +var VramManagement = /* @__PURE__ */ ((VramManagement2) => { + VramManagement2["Auto"] = "auto"; + VramManagement2["GPUOnly"] = "gpu-only"; + VramManagement2["HighVram"] = "highvram"; + VramManagement2["NormalVram"] = "normalvram"; + VramManagement2["LowVram"] = "lowvram"; + VramManagement2["NoVram"] = "novram"; + VramManagement2["CPU"] = "cpu"; + return VramManagement2; +})(VramManagement || {}); +const WEB_ONLY_CONFIG_ITEMS = [ + // Launch behavior + { + id: "auto-launch", + name: "Automatically opens in the browser on startup", + category: ["Launch"], + type: "combo", + options: Object.values(AutoLaunch), + defaultValue: AutoLaunch.Auto, + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case AutoLaunch.Auto: + return {}; + case AutoLaunch.Enable: + return { + ["auto-launch"]: true + }; + case AutoLaunch.Disable: + return { + ["disable-auto-launch"]: true + }; + } + }, "getValue") + } +]; +const SERVER_CONFIG_ITEMS = [ + // Network settings + { + id: "listen", + name: "Host: The IP address to listen on", + category: ["Network"], + type: "text", + defaultValue: "127.0.0.1" + }, + { + id: "port", + name: "Port: The port to listen on", + category: ["Network"], + type: "number", + // The default launch port for desktop app is 8000 instead of 8188. + defaultValue: 8e3 + }, + { + id: "tls-keyfile", + name: "TLS Key File: Path to TLS key file for HTTPS", + category: ["Network"], + type: "text", + defaultValue: "" + }, + { + id: "tls-certfile", + name: "TLS Certificate File: Path to TLS certificate file for HTTPS", + category: ["Network"], + type: "text", + defaultValue: "" + }, + { + id: "enable-cors-header", + name: 'Enable CORS header: Use "*" for all origins or specify domain', + category: ["Network"], + type: "text", + defaultValue: "" + }, + { + id: "max-upload-size", + name: "Maximum upload size (MB)", + category: ["Network"], + type: "number", + defaultValue: 100 + }, + // CUDA settings + { + id: "cuda-device", + name: "CUDA device index to use", + category: ["CUDA"], + type: "number", + defaultValue: null + }, + { + id: "cuda-malloc", + name: "Use CUDA malloc for memory allocation", + category: ["CUDA"], + type: "combo", + options: Object.values(CudaMalloc), + defaultValue: CudaMalloc.Auto, + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case CudaMalloc.Auto: + return {}; + case CudaMalloc.Enable: + return { + ["cuda-malloc"]: true + }; + case CudaMalloc.Disable: + return { + ["disable-cuda-malloc"]: true + }; + } + }, "getValue") + }, + // Precision settings + { + id: "global-precision", + name: "Global floating point precision", + category: ["Inference"], + type: "combo", + options: [ + FloatingPointPrecision.AUTO, + FloatingPointPrecision.FP32, + FloatingPointPrecision.FP16 + ], + defaultValue: FloatingPointPrecision.AUTO, + tooltip: "Global floating point precision", + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case FloatingPointPrecision.AUTO: + return {}; + case FloatingPointPrecision.FP32: + return { + ["force-fp32"]: true + }; + case FloatingPointPrecision.FP16: + return { + ["force-fp16"]: true + }; + default: + return {}; + } + }, "getValue") + }, + // UNET precision + { + id: "unet-precision", + name: "UNET precision", + category: ["Inference"], + type: "combo", + options: [ + FloatingPointPrecision.AUTO, + FloatingPointPrecision.FP64, + FloatingPointPrecision.FP32, + FloatingPointPrecision.FP16, + FloatingPointPrecision.BF16, + FloatingPointPrecision.FP8E4M3FN, + FloatingPointPrecision.FP8E5M2 + ], + defaultValue: FloatingPointPrecision.AUTO, + tooltip: "UNET precision", + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case FloatingPointPrecision.AUTO: + return {}; + default: + return { + [`${value.toLowerCase()}-unet`]: true + }; + } + }, "getValue") + }, + // VAE settings + { + id: "vae-precision", + name: "VAE precision", + category: ["Inference"], + type: "combo", + options: [ + FloatingPointPrecision.AUTO, + FloatingPointPrecision.FP16, + FloatingPointPrecision.FP32, + FloatingPointPrecision.BF16 + ], + defaultValue: FloatingPointPrecision.AUTO, + tooltip: "VAE precision", + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case FloatingPointPrecision.AUTO: + return {}; + default: + return { + [`${value.toLowerCase()}-vae`]: true + }; + } + }, "getValue") + }, + { + id: "cpu-vae", + name: "Run VAE on CPU", + category: ["Inference"], + type: "boolean", + defaultValue: false + }, + // Text Encoder settings + { + id: "text-encoder-precision", + name: "Text Encoder precision", + category: ["Inference"], + type: "combo", + options: [ + FloatingPointPrecision.AUTO, + FloatingPointPrecision.FP8E4M3FN, + FloatingPointPrecision.FP8E5M2, + FloatingPointPrecision.FP16, + FloatingPointPrecision.FP32 + ], + defaultValue: FloatingPointPrecision.AUTO, + tooltip: "Text Encoder precision", + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case FloatingPointPrecision.AUTO: + return {}; + default: + return { + [`${value.toLowerCase()}-text-enc`]: true + }; + } + }, "getValue") + }, + // Memory and performance settings + { + id: "force-channels-last", + name: "Force channels-last memory format", + category: ["Memory"], + type: "boolean", + defaultValue: false + }, + { + id: "directml", + name: "DirectML device index", + category: ["Memory"], + type: "number", + defaultValue: null + }, + { + id: "disable-ipex-optimize", + name: "Disable IPEX optimization", + category: ["Memory"], + type: "boolean", + defaultValue: false + }, + // Preview settings + { + id: "preview-method", + name: "Method used for latent previews", + category: ["Preview"], + type: "combo", + options: Object.values(LatentPreviewMethod), + defaultValue: LatentPreviewMethod.NoPreviews + }, + { + id: "preview-size", + name: "Size of preview images", + category: ["Preview"], + type: "slider", + defaultValue: 512, + attrs: { + min: 128, + max: 2048, + step: 128 + } + }, + // Cache settings + { + id: "cache-classic", + name: "Use classic cache system", + category: ["Cache"], + type: "boolean", + defaultValue: false + }, + { + id: "cache-lru", + name: "Use LRU caching with a maximum of N node results cached.", + category: ["Cache"], + type: "number", + defaultValue: null, + tooltip: "May use more RAM/VRAM." + }, + // Attention settings + { + id: "cross-attention-method", + name: "Cross attention method", + category: ["Attention"], + type: "combo", + options: Object.values(CrossAttentionMethod), + defaultValue: CrossAttentionMethod.Auto, + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case CrossAttentionMethod.Auto: + return {}; + default: + return { + [`use-${value.toLowerCase()}-cross-attention`]: true + }; + } + }, "getValue") + }, + { + id: "disable-xformers", + name: "Disable xFormers optimization", + type: "boolean", + defaultValue: false + }, + { + id: "force-upcast-attention", + name: "Force attention upcast", + category: ["Attention"], + type: "boolean", + defaultValue: false + }, + { + id: "dont-upcast-attention", + name: "Prevent attention upcast", + category: ["Attention"], + type: "boolean", + defaultValue: false + }, + // VRAM management + { + id: "vram-management", + name: "VRAM management mode", + category: ["Memory"], + type: "combo", + options: Object.values(VramManagement), + defaultValue: VramManagement.Auto, + getValue: /* @__PURE__ */ __name((value) => { + switch (value) { + case VramManagement.Auto: + return {}; + default: + return { + [value]: true + }; + } + }, "getValue") + }, + { + id: "reserve-vram", + name: "Reserved VRAM (GB)", + category: ["Memory"], + type: "number", + defaultValue: null, + tooltip: "Set the amount of vram in GB you want to reserve for use by your OS/other software. By default some amount is reverved depending on your OS." + }, + // Misc settings + { + id: "default-hashing-function", + name: "Default hashing function for model files", + type: "combo", + options: Object.values(HashFunction), + defaultValue: HashFunction.SHA256 + }, + { + id: "disable-smart-memory", + name: "Disable smart memory management", + tooltip: "Force ComfyUI to aggressively offload to regular ram instead of keeping models in vram when it can.", + category: ["Memory"], + type: "boolean", + defaultValue: false + }, + { + id: "deterministic", + name: "Make pytorch use slower deterministic algorithms when it can.", + type: "boolean", + defaultValue: false, + tooltip: "Note that this might not make images deterministic in all cases." + }, + { + id: "fast", + name: "Enable some untested and potentially quality deteriorating optimizations.", + type: "boolean", + defaultValue: false + }, + { + id: "dont-print-server", + name: "Don't print server output to console.", + type: "boolean", + defaultValue: false + }, + { + id: "disable-metadata", + name: "Disable saving prompt metadata in files.", + type: "boolean", + defaultValue: false + }, + { + id: "disable-all-custom-nodes", + name: "Disable loading all custom nodes.", + type: "boolean", + defaultValue: false + }, + { + id: "log-level", + name: "Logging verbosity level", + type: "combo", + options: Object.values(LogLevel), + defaultValue: LogLevel.INFO, + getValue: /* @__PURE__ */ __name((value) => { + return { + verbose: value + }; + }, "getValue") + }, + // Directories + { + id: "input-directory", + name: "Input directory", + category: ["Directories"], + type: "text", + defaultValue: "" + }, + { + id: "output-directory", + name: "Output directory", + category: ["Directories"], + type: "text", + defaultValue: "" + } +]; +function useCoreCommands() { + const workflowService = useWorkflowService(); + const workflowStore = useWorkflowStore(); + const dialogService = useDialogService(); + const colorPaletteStore = useColorPaletteStore(); + const getTracker = /* @__PURE__ */ __name(() => workflowStore.activeWorkflow?.changeTracker, "getTracker"); + const getSelectedNodes = /* @__PURE__ */ __name(() => { + const selectedNodes = app.canvas.selected_nodes; + const result = []; + if (selectedNodes) { + for (const i in selectedNodes) { + const node = selectedNodes[i]; + result.push(node); + } + } + return result; + }, "getSelectedNodes"); + const toggleSelectedNodesMode = /* @__PURE__ */ __name((mode) => { + getSelectedNodes().forEach((node) => { + if (node.mode === mode) { + node.mode = LGraphEventMode.ALWAYS; + } else { + node.mode = mode; + } + }); + }, "toggleSelectedNodesMode"); + return [ + { + id: "Comfy.NewBlankWorkflow", + icon: "pi pi-plus", + label: "New Blank Workflow", + menubarLabel: "New", + function: /* @__PURE__ */ __name(() => workflowService.loadBlankWorkflow(), "function") + }, + { + id: "Comfy.OpenWorkflow", + icon: "pi pi-folder-open", + label: "Open Workflow", + menubarLabel: "Open", + function: /* @__PURE__ */ __name(() => { + app.ui.loadFile(); + }, "function") + }, + { + id: "Comfy.LoadDefaultWorkflow", + icon: "pi pi-code", + label: "Load Default Workflow", + function: /* @__PURE__ */ __name(() => workflowService.loadDefaultWorkflow(), "function") + }, + { + id: "Comfy.SaveWorkflow", + icon: "pi pi-save", + label: "Save Workflow", + menubarLabel: "Save", + function: /* @__PURE__ */ __name(async () => { + const workflow = useWorkflowStore().activeWorkflow; + if (!workflow) return; + await workflowService.saveWorkflow(workflow); + }, "function") + }, + { + id: "Comfy.SaveWorkflowAs", + icon: "pi pi-save", + label: "Save Workflow As", + menubarLabel: "Save As", + function: /* @__PURE__ */ __name(async () => { + const workflow = useWorkflowStore().activeWorkflow; + if (!workflow) return; + await workflowService.saveWorkflowAs(workflow); + }, "function") + }, + { + id: "Comfy.ExportWorkflow", + icon: "pi pi-download", + label: "Export Workflow", + menubarLabel: "Export", + function: /* @__PURE__ */ __name(() => { + workflowService.exportWorkflow("workflow", "workflow"); + }, "function") + }, + { + id: "Comfy.ExportWorkflowAPI", + icon: "pi pi-download", + label: "Export Workflow (API Format)", + menubarLabel: "Export (API)", + function: /* @__PURE__ */ __name(() => { + workflowService.exportWorkflow("workflow_api", "output"); + }, "function") + }, + { + id: "Comfy.Undo", + icon: "pi pi-undo", + label: "Undo", + function: /* @__PURE__ */ __name(async () => { + await getTracker()?.undo?.(); + }, "function") + }, + { + id: "Comfy.Redo", + icon: "pi pi-refresh", + label: "Redo", + function: /* @__PURE__ */ __name(async () => { + await getTracker()?.redo?.(); + }, "function") + }, + { + id: "Comfy.ClearWorkflow", + icon: "pi pi-trash", + label: "Clear Workflow", + function: /* @__PURE__ */ __name(() => { + const settingStore = useSettingStore(); + if (!settingStore.get("Comfy.ComfirmClear") || confirm("Clear workflow?")) { + app.clean(); + app.graph.clear(); + api.dispatchCustomEvent("graphCleared"); + } + }, "function") + }, + { + id: "Comfy.Canvas.ResetView", + icon: "pi pi-expand", + label: "Reset View", + function: /* @__PURE__ */ __name(() => { + app.resetView(); + }, "function") + }, + { + id: "Comfy.OpenClipspace", + icon: "pi pi-clipboard", + label: "Clipspace", + function: /* @__PURE__ */ __name(() => { + app.openClipspace(); + }, "function") + }, + { + id: "Comfy.RefreshNodeDefinitions", + icon: "pi pi-refresh", + label: "Refresh Node Definitions", + function: /* @__PURE__ */ __name(async () => { + await app.refreshComboInNodes(); + }, "function") + }, + { + id: "Comfy.Interrupt", + icon: "pi pi-stop", + label: "Interrupt", + function: /* @__PURE__ */ __name(async () => { + await api.interrupt(); + useToastStore().add({ + severity: "info", + summary: "Interrupted", + detail: "Execution has been interrupted", + life: 1e3 + }); + }, "function") + }, + { + id: "Comfy.ClearPendingTasks", + icon: "pi pi-stop", + label: "Clear Pending Tasks", + function: /* @__PURE__ */ __name(async () => { + await useQueueStore().clear(["queue"]); + useToastStore().add({ + severity: "info", + summary: "Confirmed", + detail: "Pending tasks deleted", + life: 3e3 + }); + }, "function") + }, + { + id: "Comfy.BrowseTemplates", + icon: "pi pi-folder-open", + label: "Browse Templates", + function: /* @__PURE__ */ __name(() => { + dialogService.showTemplateWorkflowsDialog(); + }, "function") + }, + { + id: "Comfy.Canvas.ZoomIn", + icon: "pi pi-plus", + label: "Zoom In", + function: /* @__PURE__ */ __name(() => { + const ds = app.canvas.ds; + ds.changeScale( + ds.scale * 1.1, + ds.element ? [ds.element.width / 2, ds.element.height / 2] : void 0 + ); + app.canvas.setDirty(true, true); + }, "function") + }, + { + id: "Comfy.Canvas.ZoomOut", + icon: "pi pi-minus", + label: "Zoom Out", + function: /* @__PURE__ */ __name(() => { + const ds = app.canvas.ds; + ds.changeScale( + ds.scale / 1.1, + ds.element ? [ds.element.width / 2, ds.element.height / 2] : void 0 + ); + app.canvas.setDirty(true, true); + }, "function") + }, + { + id: "Comfy.Canvas.FitView", + icon: "pi pi-expand", + label: "Fit view to selected nodes", + function: /* @__PURE__ */ __name(() => { + if (app.canvas.empty) { + useToastStore().add({ + severity: "error", + summary: "Empty canvas", + life: 3e3 + }); + return; + } + app.canvas.fitViewToSelectionAnimated(); + }, "function") + }, + { + id: "Comfy.Canvas.ToggleLock", + icon: "pi pi-lock", + label: "Canvas Toggle Lock", + function: /* @__PURE__ */ __name(() => { + app.canvas["read_only"] = !app.canvas["read_only"]; + }, "function") + }, + { + id: "Comfy.Canvas.ToggleLinkVisibility", + icon: "pi pi-eye", + label: "Canvas Toggle Link Visibility", + versionAdded: "1.3.6", + function: (() => { + const settingStore = useSettingStore(); + let lastLinksRenderMode = LiteGraph.SPLINE_LINK; + return () => { + const currentMode = settingStore.get("Comfy.LinkRenderMode"); + if (currentMode === LiteGraph.HIDDEN_LINK) { + settingStore.set("Comfy.LinkRenderMode", lastLinksRenderMode); + } else { + lastLinksRenderMode = currentMode; + settingStore.set("Comfy.LinkRenderMode", LiteGraph.HIDDEN_LINK); + } + }; + })() + }, + { + id: "Comfy.QueuePrompt", + icon: "pi pi-play", + label: "Queue Prompt", + versionAdded: "1.3.7", + function: /* @__PURE__ */ __name(() => { + const batchCount = useQueueSettingsStore().batchCount; + app.queuePrompt(0, batchCount); + }, "function") + }, + { + id: "Comfy.QueuePromptFront", + icon: "pi pi-play", + label: "Queue Prompt (Front)", + versionAdded: "1.3.7", + function: /* @__PURE__ */ __name(() => { + const batchCount = useQueueSettingsStore().batchCount; + app.queuePrompt(-1, batchCount); + }, "function") + }, + { + id: "Comfy.ShowSettingsDialog", + icon: "pi pi-cog", + label: "Show Settings Dialog", + versionAdded: "1.3.7", + function: /* @__PURE__ */ __name(() => { + dialogService.showSettingsDialog(); + }, "function") + }, + { + id: "Comfy.Graph.GroupSelectedNodes", + icon: "pi pi-sitemap", + label: "Group Selected Nodes", + versionAdded: "1.3.7", + function: /* @__PURE__ */ __name(() => { + const { canvas } = app; + if (!canvas.selectedItems?.size) { + useToastStore().add({ + severity: "error", + summary: "Nothing to group", + detail: "Please select the nodes (or other groups) to create a group for", + life: 3e3 + }); + return; + } + const group = new LGraphGroup(); + const padding = useSettingStore().get( + "Comfy.GroupSelectedNodes.Padding" + ); + group.resizeTo(canvas.selectedItems, padding); + canvas.graph.add(group); + useTitleEditorStore().titleEditorTarget = group; + }, "function") + }, + { + id: "Workspace.NextOpenedWorkflow", + icon: "pi pi-step-forward", + label: "Next Opened Workflow", + versionAdded: "1.3.9", + function: /* @__PURE__ */ __name(() => { + workflowService.loadNextOpenedWorkflow(); + }, "function") + }, + { + id: "Workspace.PreviousOpenedWorkflow", + icon: "pi pi-step-backward", + label: "Previous Opened Workflow", + versionAdded: "1.3.9", + function: /* @__PURE__ */ __name(() => { + workflowService.loadPreviousOpenedWorkflow(); + }, "function") + }, + { + id: "Comfy.Canvas.ToggleSelectedNodes.Mute", + icon: "pi pi-volume-off", + label: "Mute/Unmute Selected Nodes", + versionAdded: "1.3.11", + function: /* @__PURE__ */ __name(() => { + toggleSelectedNodesMode(LGraphEventMode.NEVER); + }, "function") + }, + { + id: "Comfy.Canvas.ToggleSelectedNodes.Bypass", + icon: "pi pi-shield", + label: "Bypass/Unbypass Selected Nodes", + versionAdded: "1.3.11", + function: /* @__PURE__ */ __name(() => { + toggleSelectedNodesMode(LGraphEventMode.BYPASS); + }, "function") + }, + { + id: "Comfy.Canvas.ToggleSelectedNodes.Pin", + icon: "pi pi-pin", + label: "Pin/Unpin Selected Nodes", + versionAdded: "1.3.11", + function: /* @__PURE__ */ __name(() => { + getSelectedNodes().forEach((node) => { + node.pin(!node.pinned); + }); + }, "function") + }, + { + id: "Comfy.Canvas.ToggleSelected.Pin", + icon: "pi pi-pin", + label: "Pin/Unpin Selected Items", + versionAdded: "1.3.33", + function: /* @__PURE__ */ __name(() => { + for (const item of app.canvas.selectedItems) { + if (item instanceof LGraphNode || item instanceof LGraphGroup) { + item.pin(!item.pinned); + } + } + }, "function") + }, + { + id: "Comfy.Canvas.ToggleSelectedNodes.Collapse", + icon: "pi pi-minus", + label: "Collapse/Expand Selected Nodes", + versionAdded: "1.3.11", + function: /* @__PURE__ */ __name(() => { + getSelectedNodes().forEach((node) => { + node.collapse(); + }); + }, "function") + }, + { + id: "Comfy.ToggleTheme", + icon: "pi pi-moon", + label: "Toggle Theme (Dark/Light)", + versionAdded: "1.3.12", + function: (() => { + let previousDarkTheme = DEFAULT_DARK_COLOR_PALETTE.id; + let previousLightTheme = DEFAULT_LIGHT_COLOR_PALETTE.id; + return () => { + const settingStore = useSettingStore(); + const theme = colorPaletteStore.completedActivePalette; + if (theme.light_theme) { + previousLightTheme = theme.id; + settingStore.set("Comfy.ColorPalette", previousDarkTheme); + } else { + previousDarkTheme = theme.id; + settingStore.set("Comfy.ColorPalette", previousLightTheme); + } + }; + })() + }, + { + id: "Workspace.ToggleBottomPanel", + icon: "pi pi-list", + label: "Toggle Bottom Panel", + versionAdded: "1.3.22", + function: /* @__PURE__ */ __name(() => { + useBottomPanelStore().toggleBottomPanel(); + }, "function") + }, + { + id: "Workspace.ToggleFocusMode", + icon: "pi pi-eye", + label: "Toggle Focus Mode", + versionAdded: "1.3.27", + function: /* @__PURE__ */ __name(() => { + useWorkspaceStore().toggleFocusMode(); + }, "function") + }, + { + id: "Comfy.Graph.FitGroupToContents", + icon: "pi pi-expand", + label: "Fit Group To Contents", + versionAdded: "1.4.9", + function: /* @__PURE__ */ __name(() => { + for (const group of app.canvas.selectedItems) { + if (group instanceof LGraphGroup) { + group.recomputeInsideNodes(); + const padding = useSettingStore().get( + "Comfy.GroupSelectedNodes.Padding" + ); + group.resizeTo(group.children, padding); + app.graph.change(); + } + } + }, "function") + }, + { + id: "Comfy.Help.OpenComfyUIIssues", + icon: "pi pi-github", + label: "Open ComfyUI Issues", + menubarLabel: "ComfyUI Issues", + versionAdded: "1.5.5", + function: /* @__PURE__ */ __name(() => { + window.open( + "https://github.com/comfyanonymous/ComfyUI/issues", + "_blank" + ); + }, "function") + }, + { + id: "Comfy.Help.OpenComfyUIDocs", + icon: "pi pi-info-circle", + label: "Open ComfyUI Docs", + menubarLabel: "ComfyUI Docs", + versionAdded: "1.5.5", + function: /* @__PURE__ */ __name(() => { + window.open("https://docs.comfy.org/", "_blank"); + }, "function") + }, + { + id: "Comfy.Help.OpenComfyOrgDiscord", + icon: "pi pi-discord", + label: "Open Comfy-Org Discord", + menubarLabel: "Comfy-Org Discord", + versionAdded: "1.5.5", + function: /* @__PURE__ */ __name(() => { + window.open("https://www.comfy.org/discord", "_blank"); + }, "function") + }, + { + id: "Workspace.SearchBox.Toggle", + icon: "pi pi-search", + label: "Toggle Search Box", + versionAdded: "1.5.7", + function: /* @__PURE__ */ __name(() => { + useSearchBoxStore().toggleVisible(); + }, "function") + }, + { + id: "Comfy.Help.AboutComfyUI", + icon: "pi pi-info-circle", + label: "Open About ComfyUI", + menubarLabel: "About ComfyUI", + versionAdded: "1.6.4", + function: /* @__PURE__ */ __name(() => { + dialogService.showSettingsDialog("about"); + }, "function") + }, + { + id: "Comfy.DuplicateWorkflow", + icon: "pi pi-clone", + label: "Duplicate Current Workflow", + versionAdded: "1.6.15", + function: /* @__PURE__ */ __name(() => { + workflowService.duplicateWorkflow(workflowStore.activeWorkflow); + }, "function") + }, + { + id: "Workspace.CloseWorkflow", + icon: "pi pi-times", + label: "Close Current Workflow", + versionAdded: "1.7.3", + function: /* @__PURE__ */ __name(() => { + if (workflowStore.activeWorkflow) + workflowService.closeWorkflow(workflowStore.activeWorkflow); + }, "function") + }, + { + id: "Comfy.Feedback", + icon: "pi pi-megaphone", + label: "Give Feedback", + versionAdded: "1.8.2", + function: /* @__PURE__ */ __name(() => { + dialogService.showIssueReportDialog({ + title: t("g.feedback"), + subtitle: t("issueReport.feedbackTitle"), + panelProps: { + errorType: "Feedback", + defaultFields: ["SystemStats", "Settings"] + } + }); + }, "function") + }, + { + id: "Comfy.Help.OpenComfyUIForum", + icon: "pi pi-comments", + label: "Open ComfyUI Forum", + menubarLabel: "ComfyUI Forum", + versionAdded: "1.8.2", + function: /* @__PURE__ */ __name(() => { + window.open("https://forum.comfy.org/", "_blank"); + }, "function") + } + ]; +} +__name(useCoreCommands, "useCoreCommands"); +function setupAutoQueueHandler() { + const queueCountStore = useQueuePendingTaskCountStore(); + const queueSettingsStore = useQueueSettingsStore(); + let graphHasChanged = false; + let internalCount = 0; + api.addEventListener("graphChanged", () => { + if (queueSettingsStore.mode === "change") { + if (internalCount) { + graphHasChanged = true; + } else { + graphHasChanged = false; + app.queuePrompt(0, queueSettingsStore.batchCount); + internalCount++; + } + } + }); + queueCountStore.$subscribe( + () => { + internalCount = queueCountStore.count; + if (!internalCount && !app.lastExecutionError) { + if (queueSettingsStore.mode === "instant" || queueSettingsStore.mode === "change" && graphHasChanged) { + graphHasChanged = false; + app.queuePrompt(0, queueSettingsStore.batchCount); + } + } + }, + { detached: true } + ); +} +__name(setupAutoQueueHandler, "setupAutoQueueHandler"); +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "GraphView", + setup(__props) { + setupAutoQueueHandler(); + const { t: t2 } = useI18n(); + const toast = useToast(); + const settingStore = useSettingStore(); + const executionStore = useExecutionStore(); + const colorPaletteStore = useColorPaletteStore(); + const queueStore = useQueueStore(); + watch( + () => colorPaletteStore.completedActivePalette, + (newTheme) => { + const DARK_THEME_CLASS = "dark-theme"; + if (newTheme.light_theme) { + document.body.classList.remove(DARK_THEME_CLASS); + } else { + document.body.classList.add(DARK_THEME_CLASS); + } + if (isElectron()) { + electronAPI().changeTheme({ + color: "rgba(0, 0, 0, 0)", + symbolColor: newTheme.colors.comfy_base["input-text"] + }); + } + }, + { immediate: true } + ); + if (isElectron()) { + watch( + () => queueStore.tasks, + (newTasks, oldTasks) => { + const oldRunningTaskIds = new Set( + oldTasks.filter((task) => task.isRunning).map((task) => task.promptId) + ); + newTasks.filter( + (task) => oldRunningTaskIds.has(task.promptId) && task.isHistory + ).forEach((task) => { + electronAPI().Events.incrementUserProperty( + `execution:${task.displayStatus.toLowerCase()}`, + 1 + ); + electronAPI().Events.trackEvent("execution", { + status: task.displayStatus.toLowerCase() + }); + }); + }, + { deep: true } + ); + } + watchEffect(() => { + const fontSize = settingStore.get("Comfy.TextareaWidget.FontSize"); + document.documentElement.style.setProperty( + "--comfy-textarea-font-size", + `${fontSize}px` + ); + }); + watchEffect(() => { + const padding = settingStore.get("Comfy.TreeExplorer.ItemPadding"); + document.documentElement.style.setProperty( + "--comfy-tree-explorer-item-padding", + `${padding}px` + ); + }); + watchEffect(() => { + const locale = settingStore.get("Comfy.Locale"); + if (locale) { + i18n.global.locale.value = locale; + } + }); + watchEffect(() => { + const useNewMenu = settingStore.get("Comfy.UseNewMenu"); + if (useNewMenu === "Disabled") { + app.ui.menuContainer.style.setProperty("display", "block"); + app.ui.restoreMenuPosition(); + } else { + app.ui.menuContainer.style.setProperty("display", "none"); + } + }); + watchEffect(() => { + queueStore.maxHistoryItems = settingStore.get("Comfy.Queue.MaxHistoryItems"); + }); + const init = /* @__PURE__ */ __name(() => { + const coreCommands = useCoreCommands(); + useCommandStore().registerCommands(coreCommands); + useMenuItemStore().registerCoreMenuCommands(); + useKeybindingService().registerCoreKeybindings(); + useSidebarTabStore().registerCoreSidebarTabs(); + useBottomPanelStore().registerCoreBottomPanelTabs(); + app.extensionManager = useWorkspaceStore(); + }, "init"); + const queuePendingTaskCountStore = useQueuePendingTaskCountStore(); + const onStatus = /* @__PURE__ */ __name(async (e) => { + queuePendingTaskCountStore.update(e); + await queueStore.update(); + }, "onStatus"); + const reconnectingMessage = { + severity: "error", + summary: t2("g.reconnecting") + }; + const onReconnecting = /* @__PURE__ */ __name(() => { + toast.remove(reconnectingMessage); + toast.add(reconnectingMessage); + }, "onReconnecting"); + const onReconnected = /* @__PURE__ */ __name(() => { + toast.remove(reconnectingMessage); + toast.add({ + severity: "success", + summary: t2("g.reconnected"), + life: 2e3 + }); + }, "onReconnected"); + onMounted(() => { + api.addEventListener("status", onStatus); + api.addEventListener("reconnecting", onReconnecting); + api.addEventListener("reconnected", onReconnected); + executionStore.bindExecutionEvents(); + try { + init(); + } catch (e) { + console.error("Failed to init ComfyUI frontend", e); + } + }); + onBeforeUnmount(() => { + api.removeEventListener("status", onStatus); + api.removeEventListener("reconnecting", onReconnecting); + api.removeEventListener("reconnected", onReconnected); + executionStore.unbindExecutionEvents(); + }); + useEventListener(window, "keydown", useKeybindingService().keybindHandler); + const { wrapWithErrorHandling, wrapWithErrorHandlingAsync } = useErrorHandling(); + const onGraphReady = /* @__PURE__ */ __name(() => { + requestIdleCallback( + () => { + wrapWithErrorHandling(useKeybindingService().registerUserKeybindings)(); + wrapWithErrorHandling(useServerConfigStore().loadServerConfig)( + SERVER_CONFIG_ITEMS, + settingStore.get("Comfy.Server.ServerConfigValues") + ); + wrapWithErrorHandlingAsync(useModelStore().loadModelFolders)(); + wrapWithErrorHandlingAsync(useNodeFrequencyStore().loadNodeFrequencies)(); + useNodeDefStore().nodeSearchService.endsWithFilterStartSequence(""); + }, + { timeout: 1e3 } + ); + }, "onGraphReady"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock(Fragment, null, [ + createVNode(TopMenubar), + createVNode(_sfc_main$8, { onReady: onGraphReady }), + createVNode(_sfc_main$7), + !unref(isElectron)() ? (openBlock(), createBlock(_sfc_main$s, { key: 0 })) : createCommentVNode("", true), + createVNode(_sfc_main$u), + createVNode(MenuHamburger) + ], 64); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=GraphView-CUSGEqGS.js.map diff --git a/web/assets/GraphView-CVCdiww1.css b/web/assets/GraphView-CVCdiww1.css new file mode 100644 index 0000000000000000000000000000000000000000..765b2a0e728da0c5774caa6c0f9dae38ccab46da --- /dev/null +++ b/web/assets/GraphView-CVCdiww1.css @@ -0,0 +1,306 @@ + +.comfy-menu-hamburger[data-v-7ed57d1a] { + pointer-events: auto; + position: fixed; + z-index: 9999; + display: flex; + flex-direction: row +} + +[data-v-e50caa15] .p-splitter-gutter { + pointer-events: auto; +} +[data-v-e50caa15] .p-splitter-gutter:hover,[data-v-e50caa15] .p-splitter-gutter[data-p-gutter-resizing='true'] { + transition: background-color 0.2s ease 300ms; + background-color: var(--p-primary-color); +} +.side-bar-panel[data-v-e50caa15] { + background-color: var(--bg-color); + pointer-events: auto; +} +.bottom-panel[data-v-e50caa15] { + background-color: var(--bg-color); + pointer-events: auto; +} +.splitter-overlay[data-v-e50caa15] { + pointer-events: none; + border-style: none; + background-color: transparent; +} +.splitter-overlay-root[data-v-e50caa15] { + position: absolute; + top: 0px; + left: 0px; + height: 100%; + width: 100%; + + /* Set it the same as the ComfyUI menu */ + /* Note: Lite-graph DOM widgets have the same z-index as the node id, so + 999 should be sufficient to make sure splitter overlays on node's DOM + widgets */ + z-index: 999; +} + +.p-buttongroup-vertical[data-v-cb8f9a1a] { + display: flex; + flex-direction: column; + border-radius: var(--p-button-border-radius); + overflow: hidden; + border: 1px solid var(--p-panel-border-color); +} +.p-buttongroup-vertical .p-button[data-v-cb8f9a1a] { + margin: 0; + border-radius: 0; +} + +.node-tooltip[data-v-46859edf] { + background: var(--comfy-input-bg); + border-radius: 5px; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.4); + color: var(--input-text); + font-family: sans-serif; + left: 0; + max-width: 30vw; + padding: 4px 8px; + position: absolute; + top: 0; + transform: translate(5px, calc(-100% - 5px)); + white-space: pre-wrap; + z-index: 99999; +} + +.group-title-editor.node-title-editor[data-v-12d3fd12] { + z-index: 9999; + padding: 0.25rem; +} +[data-v-12d3fd12] .editable-text { + width: 100%; + height: 100%; +} +[data-v-12d3fd12] .editable-text input { + width: 100%; + height: 100%; + /* Override the default font size */ + font-size: inherit; +} + +[data-v-fd0a74bd] .highlight { + background-color: var(--p-primary-color); + color: var(--p-primary-contrast-color); + font-weight: bold; + border-radius: 0.25rem; + padding: 0rem 0.125rem; + margin: -0.125rem 0.125rem; +} + +.invisible-dialog-root { + width: 60%; + min-width: 24rem; + max-width: 48rem; + border: 0 !important; + background-color: transparent !important; + margin-top: 25vh; + margin-left: 400px; +} +@media all and (max-width: 768px) { +.invisible-dialog-root { + margin-left: 0px; +} +} +.node-search-box-dialog-mask { + align-items: flex-start !important; +} + +.side-bar-button-icon { + font-size: var(--sidebar-icon-size) !important; +} +.side-bar-button-selected .side-bar-button-icon { + font-size: var(--sidebar-icon-size) !important; + font-weight: bold; +} + +.side-bar-button[data-v-6ab4daa6] { + width: var(--sidebar-width); + height: var(--sidebar-width); + border-radius: 0; +} +.comfyui-body-left .side-bar-button.side-bar-button-selected[data-v-6ab4daa6], +.comfyui-body-left .side-bar-button.side-bar-button-selected[data-v-6ab4daa6]:hover { + border-left: 4px solid var(--p-button-text-primary-color); +} +.comfyui-body-right .side-bar-button.side-bar-button-selected[data-v-6ab4daa6], +.comfyui-body-right .side-bar-button.side-bar-button-selected[data-v-6ab4daa6]:hover { + border-right: 4px solid var(--p-button-text-primary-color); +} + +.side-tool-bar-container[data-v-33cac83a] { + display: flex; + flex-direction: column; + align-items: center; + + pointer-events: auto; + + width: var(--sidebar-width); + height: 100%; + + background-color: var(--comfy-menu-secondary-bg); + color: var(--fg-color); + box-shadow: var(--bar-shadow); + + --sidebar-width: 4rem; + --sidebar-icon-size: 1.5rem; +} +.side-tool-bar-container.small-sidebar[data-v-33cac83a] { + --sidebar-width: 2.5rem; + --sidebar-icon-size: 1rem; +} +.side-tool-bar-end[data-v-33cac83a] { + align-self: flex-end; + margin-top: auto; +} + +.status-indicator[data-v-8d011a31] { + position: absolute; + font-weight: 700; + font-size: 1.5rem; + top: 50%; + left: 50%; + transform: translate(-50%, -50%) +} + +[data-v-54fadc45] .p-togglebutton { + position: relative; + flex-shrink: 0; + border-radius: 0px; + border-width: 0px; + border-right-width: 1px; + border-style: solid; + background-color: transparent; + padding: 0px; + border-right-color: var(--border-color) +} +[data-v-54fadc45] .p-togglebutton::before { + display: none +} +[data-v-54fadc45] .p-togglebutton:first-child { + border-left-width: 1px; + border-style: solid; + border-left-color: var(--border-color) +} +[data-v-54fadc45] .p-togglebutton:not(:first-child) { + border-left-width: 0px +} +[data-v-54fadc45] .p-togglebutton.p-togglebutton-checked { + height: 100%; + border-bottom-width: 1px; + border-style: solid; + border-bottom-color: var(--p-button-text-primary-color) +} +[data-v-54fadc45] .p-togglebutton:not(.p-togglebutton-checked) { + opacity: 0.75 +} +[data-v-54fadc45] .p-togglebutton-checked .close-button,[data-v-54fadc45] .p-togglebutton:hover .close-button { + visibility: visible +} +[data-v-54fadc45] .p-togglebutton:hover .status-indicator { + display: none +} +[data-v-54fadc45] .p-togglebutton .close-button { + visibility: hidden +} +[data-v-54fadc45] .p-scrollpanel-content { + height: 100% +} + +/* Scrollbar half opacity to avoid blocking the active tab bottom border */ +[data-v-54fadc45] .p-scrollpanel:hover .p-scrollpanel-bar,[data-v-54fadc45] .p-scrollpanel:active .p-scrollpanel-bar { + opacity: 0.5 +} +[data-v-54fadc45] .p-selectbutton { + height: 100%; + border-radius: 0px +} + +[data-v-38831d8e] .workflow-tabs { + background-color: var(--comfy-menu-bg); +} + +[data-v-26957f1f] .p-inputtext { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.comfyui-queue-button[data-v-91a628af] .p-splitbutton-dropdown { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.actionbar[data-v-915e5456] { + pointer-events: all; + position: fixed; + z-index: 1000; +} +.actionbar.is-docked[data-v-915e5456] { + position: static; + border-style: none; + background-color: transparent; + padding: 0px; +} +.actionbar.is-dragging[data-v-915e5456] { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +[data-v-915e5456] .p-panel-content { + padding: 0.25rem; +} +.is-docked[data-v-915e5456] .p-panel-content { + padding: 0px; +} +[data-v-915e5456] .p-panel-header { + display: none; +} + +.top-menubar[data-v-56df69d2] .p-menubar-item-link svg { + display: none; +} +[data-v-56df69d2] .p-menubar-submenu.dropdown-direction-up { + top: auto; + bottom: 100%; + flex-direction: column-reverse; +} +.keybinding-tag[data-v-56df69d2] { + background: var(--p-content-hover-background); + border-color: var(--p-content-border-color); + border-style: solid; +} + +.comfyui-menu[data-v-929e7543] { + width: 100vw; + height: var(--comfy-topbar-height); + background: var(--comfy-menu-bg); + color: var(--fg-color); + box-shadow: var(--bar-shadow); + font-family: Arial, Helvetica, sans-serif; + font-size: 0.8em; + box-sizing: border-box; + z-index: 1000; + order: 0; + grid-column: 1/-1; +} +.comfyui-menu.dropzone[data-v-929e7543] { + background: var(--p-highlight-background); +} +.comfyui-menu.dropzone-active[data-v-929e7543] { + background: var(--p-highlight-background-focus); +} +[data-v-929e7543] .p-menubar-item-label { + line-height: revert; +} +.comfyui-logo[data-v-929e7543] { + font-size: 1.2em; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + cursor: default; +} diff --git a/web/assets/InstallView-DTDlVr0Z.js b/web/assets/InstallView-DTDlVr0Z.js new file mode 100644 index 0000000000000000000000000000000000000000..380d7a9f1db41d8a38cd83ddbbb7c369a4d0d5a4 --- /dev/null +++ b/web/assets/InstallView-DTDlVr0Z.js @@ -0,0 +1,945 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { d as defineComponent, U as ref, bm as useModel, o as openBlock, f as createElementBlock, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, bn as script, bh as script$1, ar as withModifiers, z as withCtx, ab as script$2, K as useI18n, c as computed, ai as normalizeClass, B as createCommentVNode, a4 as script$3, a7 as createTextVNode, b5 as electronAPI, _ as _export_sfc, p as onMounted, r as resolveDirective, bg as script$4, i as withDirectives, bo as script$5, bp as script$6, l as script$7, y as createBlock, bj as script$8, bq as MigrationItems, w as watchEffect, F as Fragment, D as renderList, br as script$9, bs as mergeModels, bt as ValidationState, Y as normalizeI18nKey, O as watch, bu as checkMirrorReachable, bv as _sfc_main$7, bw as mergeValidationStates, bc as t, a$ as script$a, bx as CUDA_TORCH_URL, by as NIGHTLY_CPU_TORCH_URL, be as useRouter, ag as toRaw } from "./index-4Hb32CNk.js"; +import { s as script$b, a as script$c, b as script$d, c as script$e, d as script$f } from "./index-hkkV7N7e.js"; +import { P as PYTHON_MIRROR, a as PYPI_MIRROR } from "./uvMirrors-B-HKMf6X.js"; +import { _ as _sfc_main$8 } from "./BaseViewTemplate-v6omkdXg.js"; +const _hoisted_1$5 = { class: "flex flex-col gap-6 w-[600px]" }; +const _hoisted_2$5 = { class: "flex flex-col gap-4" }; +const _hoisted_3$5 = { class: "text-2xl font-semibold text-neutral-100" }; +const _hoisted_4$5 = { class: "text-neutral-400 my-0" }; +const _hoisted_5$3 = { class: "flex flex-col bg-neutral-800 p-4 rounded-lg" }; +const _hoisted_6$3 = { class: "flex items-center gap-4" }; +const _hoisted_7$3 = { class: "flex-1" }; +const _hoisted_8$3 = { class: "text-lg font-medium text-neutral-100" }; +const _hoisted_9$3 = { class: "text-sm text-neutral-400 mt-1" }; +const _hoisted_10$3 = { class: "flex items-center gap-4" }; +const _hoisted_11$3 = { class: "flex-1" }; +const _hoisted_12$3 = { class: "text-lg font-medium text-neutral-100" }; +const _hoisted_13$1 = { class: "text-sm text-neutral-400 mt-1" }; +const _hoisted_14$1 = { class: "text-neutral-300" }; +const _hoisted_15 = { class: "font-medium mb-2" }; +const _hoisted_16 = { class: "list-disc pl-6 space-y-1" }; +const _hoisted_17 = { class: "font-medium mt-4 mb-2" }; +const _hoisted_18 = { class: "list-disc pl-6 space-y-1" }; +const _hoisted_19 = { class: "mt-4" }; +const _hoisted_20 = { + href: "https://comfy.org/privacy", + target: "_blank", + class: "text-blue-400 hover:text-blue-300 underline" +}; +const _sfc_main$6 = /* @__PURE__ */ defineComponent({ + __name: "DesktopSettingsConfiguration", + props: { + "autoUpdate": { type: Boolean, ...{ required: true } }, + "autoUpdateModifiers": {}, + "allowMetrics": { type: Boolean, ...{ required: true } }, + "allowMetricsModifiers": {} + }, + emits: ["update:autoUpdate", "update:allowMetrics"], + setup(__props) { + const showDialog = ref(false); + const autoUpdate = useModel(__props, "autoUpdate"); + const allowMetrics = useModel(__props, "allowMetrics"); + const showMetricsInfo = /* @__PURE__ */ __name(() => { + showDialog.value = true; + }, "showMetricsInfo"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$5, [ + createBaseVNode("div", _hoisted_2$5, [ + createBaseVNode("h2", _hoisted_3$5, toDisplayString(_ctx.$t("install.desktopAppSettings")), 1), + createBaseVNode("p", _hoisted_4$5, toDisplayString(_ctx.$t("install.desktopAppSettingsDescription")), 1) + ]), + createBaseVNode("div", _hoisted_5$3, [ + createBaseVNode("div", _hoisted_6$3, [ + createBaseVNode("div", _hoisted_7$3, [ + createBaseVNode("h3", _hoisted_8$3, toDisplayString(_ctx.$t("install.settings.autoUpdate")), 1), + createBaseVNode("p", _hoisted_9$3, toDisplayString(_ctx.$t("install.settings.autoUpdateDescription")), 1) + ]), + createVNode(unref(script), { + modelValue: autoUpdate.value, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => autoUpdate.value = $event) + }, null, 8, ["modelValue"]) + ]), + createVNode(unref(script$1)), + createBaseVNode("div", _hoisted_10$3, [ + createBaseVNode("div", _hoisted_11$3, [ + createBaseVNode("h3", _hoisted_12$3, toDisplayString(_ctx.$t("install.settings.allowMetrics")), 1), + createBaseVNode("p", _hoisted_13$1, toDisplayString(_ctx.$t("install.settings.allowMetricsDescription")), 1), + createBaseVNode("a", { + href: "#", + class: "text-sm text-blue-400 hover:text-blue-300 mt-1 inline-block", + onClick: withModifiers(showMetricsInfo, ["prevent"]) + }, toDisplayString(_ctx.$t("install.settings.learnMoreAboutData")), 1) + ]), + createVNode(unref(script), { + modelValue: allowMetrics.value, + "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => allowMetrics.value = $event) + }, null, 8, ["modelValue"]) + ]) + ]), + createVNode(unref(script$2), { + visible: showDialog.value, + "onUpdate:visible": _cache[2] || (_cache[2] = ($event) => showDialog.value = $event), + modal: "", + header: _ctx.$t("install.settings.dataCollectionDialog.title") + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_14$1, [ + createBaseVNode("h4", _hoisted_15, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.whatWeCollect")), 1), + createBaseVNode("ul", _hoisted_16, [ + createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.collect.errorReports")), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.collect.systemInfo")), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t( + "install.settings.dataCollectionDialog.collect.userJourneyEvents" + )), 1) + ]), + createBaseVNode("h4", _hoisted_17, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.whatWeDoNotCollect")), 1), + createBaseVNode("ul", _hoisted_18, [ + createBaseVNode("li", null, toDisplayString(_ctx.$t( + "install.settings.dataCollectionDialog.doNotCollect.personalInformation" + )), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t( + "install.settings.dataCollectionDialog.doNotCollect.workflowContents" + )), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t( + "install.settings.dataCollectionDialog.doNotCollect.fileSystemInformation" + )), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t( + "install.settings.dataCollectionDialog.doNotCollect.customNodeConfigurations" + )), 1) + ]), + createBaseVNode("div", _hoisted_19, [ + createBaseVNode("a", _hoisted_20, toDisplayString(_ctx.$t("install.settings.dataCollectionDialog.viewFullPolicy")), 1) + ]) + ]) + ]), + _: 1 + }, 8, ["visible", "header"]) + ]); + }; + } +}); +const _imports_0 = "" + new URL("images/nvidia-logo.svg", import.meta.url).href; +const _imports_1 = "" + new URL("images/apple-mps-logo.png", import.meta.url).href; +const _imports_2 = "" + new URL("images/manual-configuration.svg", import.meta.url).href; +const _hoisted_1$4 = { class: "flex flex-col gap-6 w-[600px] h-[30rem] select-none" }; +const _hoisted_2$4 = { class: "grow flex flex-col gap-4 text-neutral-300" }; +const _hoisted_3$4 = { class: "text-2xl font-semibold text-neutral-100" }; +const _hoisted_4$4 = { class: "m-1 text-neutral-400" }; +const _hoisted_5$2 = { + key: 0, + class: "m-1" +}; +const _hoisted_6$2 = { + key: 1, + class: "m-1" +}; +const _hoisted_7$2 = { + key: 2, + class: "text-neutral-300" +}; +const _hoisted_8$2 = { class: "m-1" }; +const _hoisted_9$2 = { key: 3 }; +const _hoisted_10$2 = { class: "m-1" }; +const _hoisted_11$2 = { class: "m-1" }; +const _hoisted_12$2 = { + for: "cpu-mode", + class: "select-none" +}; +const _sfc_main$5 = /* @__PURE__ */ defineComponent({ + __name: "GpuPicker", + props: { + "device": { + required: true + }, + "deviceModifiers": {} + }, + emits: ["update:device"], + setup(__props) { + const { t: t2 } = useI18n(); + const cpuMode = computed({ + get: /* @__PURE__ */ __name(() => selected.value === "cpu", "get"), + set: /* @__PURE__ */ __name((value) => { + selected.value = value ? "cpu" : null; + }, "set") + }); + const selected = useModel(__props, "device"); + const electron = electronAPI(); + const platform = electron.getPlatform(); + const pickGpu = /* @__PURE__ */ __name((value) => { + const newValue = selected.value === value ? null : value; + selected.value = newValue; + }, "pickGpu"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$4, [ + createBaseVNode("div", _hoisted_2$4, [ + createBaseVNode("h2", _hoisted_3$4, toDisplayString(_ctx.$t("install.gpuSelection.selectGpu")), 1), + createBaseVNode("p", _hoisted_4$4, toDisplayString(_ctx.$t("install.gpuSelection.selectGpuDescription")) + ": ", 1), + createBaseVNode("div", { + class: normalizeClass(["flex gap-2 text-center transition-opacity", { selected: selected.value }]) + }, [ + unref(platform) !== "darwin" ? (openBlock(), createElementBlock("div", { + key: 0, + class: normalizeClass(["gpu-button", { selected: selected.value === "nvidia" }]), + role: "button", + onClick: _cache[0] || (_cache[0] = ($event) => pickGpu("nvidia")) + }, _cache[4] || (_cache[4] = [ + createBaseVNode("img", { + class: "m-12", + alt: "NVIDIA logo", + width: "196", + height: "32", + src: _imports_0 + }, null, -1) + ]), 2)) : createCommentVNode("", true), + unref(platform) === "darwin" ? (openBlock(), createElementBlock("div", { + key: 1, + class: normalizeClass(["gpu-button", { selected: selected.value === "mps" }]), + role: "button", + onClick: _cache[1] || (_cache[1] = ($event) => pickGpu("mps")) + }, _cache[5] || (_cache[5] = [ + createBaseVNode("img", { + class: "rounded-lg hover-brighten", + alt: "Apple Metal Performance Shaders Logo", + width: "292", + ratio: "", + src: _imports_1 + }, null, -1) + ]), 2)) : createCommentVNode("", true), + createBaseVNode("div", { + class: normalizeClass(["gpu-button", { selected: selected.value === "unsupported" }]), + role: "button", + onClick: _cache[2] || (_cache[2] = ($event) => pickGpu("unsupported")) + }, _cache[6] || (_cache[6] = [ + createBaseVNode("img", { + class: "m-12", + alt: "Manual configuration", + width: "196", + src: _imports_2 + }, null, -1) + ]), 2) + ], 2), + selected.value === "nvidia" ? (openBlock(), createElementBlock("p", _hoisted_5$2, [ + createVNode(unref(script$3), { + icon: "pi pi-check", + severity: "success", + value: "CUDA" + }), + createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.nvidiaDescription")), 1) + ])) : createCommentVNode("", true), + selected.value === "mps" ? (openBlock(), createElementBlock("p", _hoisted_6$2, [ + createVNode(unref(script$3), { + icon: "pi pi-check", + severity: "success", + value: "MPS" + }), + createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.mpsDescription")), 1) + ])) : createCommentVNode("", true), + selected.value === "unsupported" ? (openBlock(), createElementBlock("div", _hoisted_7$2, [ + createBaseVNode("p", _hoisted_8$2, [ + createVNode(unref(script$3), { + icon: "pi pi-exclamation-triangle", + severity: "warn", + value: unref(t2)("icon.exclamation-triangle") + }, null, 8, ["value"]), + createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.customSkipsPython")), 1) + ]), + createBaseVNode("ul", null, [ + createBaseVNode("li", null, [ + createBaseVNode("strong", null, toDisplayString(_ctx.$t("install.gpuSelection.customComfyNeedsPython")), 1) + ]), + createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customManualVenv")), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customInstallRequirements")), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customMayNotWork")), 1) + ]) + ])) : createCommentVNode("", true), + selected.value === "cpu" ? (openBlock(), createElementBlock("div", _hoisted_9$2, [ + createBaseVNode("p", _hoisted_10$2, [ + createVNode(unref(script$3), { + icon: "pi pi-exclamation-triangle", + severity: "warn", + value: unref(t2)("icon.exclamation-triangle") + }, null, 8, ["value"]), + createTextVNode(" " + toDisplayString(_ctx.$t("install.gpuSelection.cpuModeDescription")), 1) + ]), + createBaseVNode("p", _hoisted_11$2, toDisplayString(_ctx.$t("install.gpuSelection.cpuModeDescription2")), 1) + ])) : createCommentVNode("", true) + ]), + createBaseVNode("div", { + class: normalizeClass(["transition-opacity flex gap-3 h-0", { + "opacity-40": selected.value && selected.value !== "cpu" + }]) + }, [ + createVNode(unref(script), { + modelValue: cpuMode.value, + "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => cpuMode.value = $event), + inputId: "cpu-mode", + class: "-translate-y-40" + }, null, 8, ["modelValue"]), + createBaseVNode("label", _hoisted_12$2, toDisplayString(_ctx.$t("install.gpuSelection.enableCpuMode")), 1) + ], 2) + ]); + }; + } +}); +const GpuPicker = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-79125ff6"]]); +const _hoisted_1$3 = { class: "flex flex-col gap-6 w-[600px]" }; +const _hoisted_2$3 = { class: "flex flex-col gap-4" }; +const _hoisted_3$3 = { class: "text-2xl font-semibold text-neutral-100" }; +const _hoisted_4$3 = { class: "text-neutral-400 my-0" }; +const _hoisted_5$1 = { class: "flex gap-2" }; +const _hoisted_6$1 = { class: "bg-neutral-800 p-4 rounded-lg" }; +const _hoisted_7$1 = { class: "text-lg font-medium mt-0 mb-3 text-neutral-100" }; +const _hoisted_8$1 = { class: "flex flex-col gap-2" }; +const _hoisted_9$1 = { class: "flex items-center gap-2" }; +const _hoisted_10$1 = { class: "text-neutral-200" }; +const _hoisted_11$1 = { class: "pi pi-info-circle" }; +const _hoisted_12$1 = { class: "flex items-center gap-2" }; +const _hoisted_13 = { class: "text-neutral-200" }; +const _hoisted_14 = { class: "pi pi-info-circle" }; +const _sfc_main$4 = /* @__PURE__ */ defineComponent({ + __name: "InstallLocationPicker", + props: { + "installPath": { required: true }, + "installPathModifiers": {}, + "pathError": { required: true }, + "pathErrorModifiers": {} + }, + emits: ["update:installPath", "update:pathError"], + setup(__props) { + const { t: t2 } = useI18n(); + const installPath = useModel(__props, "installPath"); + const pathError = useModel(__props, "pathError"); + const pathExists = ref(false); + const appData = ref(""); + const appPath = ref(""); + const electron = electronAPI(); + onMounted(async () => { + const paths = await electron.getSystemPaths(); + appData.value = paths.appData; + appPath.value = paths.appPath; + installPath.value = paths.defaultInstallPath; + await validatePath(paths.defaultInstallPath); + }); + const validatePath = /* @__PURE__ */ __name(async (path) => { + try { + pathError.value = ""; + pathExists.value = false; + const validation = await electron.validateInstallPath(path); + if (!validation.isValid) { + const errors = []; + if (validation.cannotWrite) errors.push(t2("install.cannotWrite")); + if (validation.freeSpace < validation.requiredSpace) { + const requiredGB = validation.requiredSpace / 1024 / 1024 / 1024; + errors.push(`${t2("install.insufficientFreeSpace")}: ${requiredGB} GB`); + } + if (validation.parentMissing) errors.push(t2("install.parentMissing")); + if (validation.error) + errors.push(`${t2("install.unhandledError")}: ${validation.error}`); + pathError.value = errors.join("\n"); + } + if (validation.exists) pathExists.value = true; + } catch (error) { + pathError.value = t2("install.pathValidationFailed"); + } + }, "validatePath"); + const browsePath = /* @__PURE__ */ __name(async () => { + try { + const result = await electron.showDirectoryPicker(); + if (result) { + installPath.value = result; + await validatePath(result); + } + } catch (error) { + pathError.value = t2("install.failedToSelectDirectory"); + } + }, "browsePath"); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createElementBlock("div", _hoisted_1$3, [ + createBaseVNode("div", _hoisted_2$3, [ + createBaseVNode("h2", _hoisted_3$3, toDisplayString(_ctx.$t("install.chooseInstallationLocation")), 1), + createBaseVNode("p", _hoisted_4$3, toDisplayString(_ctx.$t("install.installLocationDescription")), 1), + createBaseVNode("div", _hoisted_5$1, [ + createVNode(unref(script$6), { class: "flex-1" }, { + default: withCtx(() => [ + createVNode(unref(script$4), { + modelValue: installPath.value, + "onUpdate:modelValue": [ + _cache[0] || (_cache[0] = ($event) => installPath.value = $event), + validatePath + ], + class: normalizeClass(["w-full", { "p-invalid": pathError.value }]) + }, null, 8, ["modelValue", "class"]), + withDirectives(createVNode(unref(script$5), { class: "pi pi-info-circle" }, null, 512), [ + [_directive_tooltip, _ctx.$t("install.installLocationTooltip")] + ]) + ]), + _: 1 + }), + createVNode(unref(script$7), { + icon: "pi pi-folder", + onClick: browsePath, + class: "w-12" + }) + ]), + pathError.value ? (openBlock(), createBlock(unref(script$8), { + key: 0, + severity: "error", + class: "whitespace-pre-line" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(pathError.value), 1) + ]), + _: 1 + })) : createCommentVNode("", true), + pathExists.value ? (openBlock(), createBlock(unref(script$8), { + key: 1, + severity: "warn" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.$t("install.pathExists")), 1) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + createBaseVNode("div", _hoisted_6$1, [ + createBaseVNode("h3", _hoisted_7$1, toDisplayString(_ctx.$t("install.systemLocations")), 1), + createBaseVNode("div", _hoisted_8$1, [ + createBaseVNode("div", _hoisted_9$1, [ + _cache[1] || (_cache[1] = createBaseVNode("i", { class: "pi pi-folder text-neutral-400" }, null, -1)), + _cache[2] || (_cache[2] = createBaseVNode("span", { class: "text-neutral-400" }, "App Data:", -1)), + createBaseVNode("span", _hoisted_10$1, toDisplayString(appData.value), 1), + withDirectives(createBaseVNode("span", _hoisted_11$1, null, 512), [ + [_directive_tooltip, _ctx.$t("install.appDataLocationTooltip")] + ]) + ]), + createBaseVNode("div", _hoisted_12$1, [ + _cache[3] || (_cache[3] = createBaseVNode("i", { class: "pi pi-desktop text-neutral-400" }, null, -1)), + _cache[4] || (_cache[4] = createBaseVNode("span", { class: "text-neutral-400" }, "App Path:", -1)), + createBaseVNode("span", _hoisted_13, toDisplayString(appPath.value), 1), + withDirectives(createBaseVNode("span", _hoisted_14, null, 512), [ + [_directive_tooltip, _ctx.$t("install.appPathLocationTooltip")] + ]) + ]) + ]) + ]) + ]); + }; + } +}); +const _hoisted_1$2 = { class: "flex flex-col gap-6 w-[600px]" }; +const _hoisted_2$2 = { class: "flex flex-col gap-4" }; +const _hoisted_3$2 = { class: "text-2xl font-semibold text-neutral-100" }; +const _hoisted_4$2 = { class: "text-neutral-400 my-0" }; +const _hoisted_5 = { class: "flex gap-2" }; +const _hoisted_6 = { + key: 0, + class: "flex flex-col gap-4 bg-neutral-800 p-4 rounded-lg" +}; +const _hoisted_7 = { class: "text-lg mt-0 font-medium text-neutral-100" }; +const _hoisted_8 = { class: "flex flex-col gap-3" }; +const _hoisted_9 = ["onClick"]; +const _hoisted_10 = ["for"]; +const _hoisted_11 = { class: "text-sm text-neutral-400 my-1" }; +const _hoisted_12 = { + key: 1, + class: "text-neutral-400 italic" +}; +const _sfc_main$3 = /* @__PURE__ */ defineComponent({ + __name: "MigrationPicker", + props: { + "sourcePath": { required: false }, + "sourcePathModifiers": {}, + "migrationItemIds": { + required: false + }, + "migrationItemIdsModifiers": {} + }, + emits: ["update:sourcePath", "update:migrationItemIds"], + setup(__props) { + const { t: t2 } = useI18n(); + const electron = electronAPI(); + const sourcePath = useModel(__props, "sourcePath"); + const migrationItemIds = useModel(__props, "migrationItemIds"); + const migrationItems = ref( + MigrationItems.map((item) => ({ + ...item, + selected: true + })) + ); + const pathError = ref(""); + const isValidSource = computed( + () => sourcePath.value !== "" && pathError.value === "" + ); + const validateSource = /* @__PURE__ */ __name(async (sourcePath2) => { + if (!sourcePath2) { + pathError.value = ""; + return; + } + try { + pathError.value = ""; + const validation = await electron.validateComfyUISource(sourcePath2); + if (!validation.isValid) pathError.value = validation.error; + } catch (error) { + console.error(error); + pathError.value = t2("install.pathValidationFailed"); + } + }, "validateSource"); + const browsePath = /* @__PURE__ */ __name(async () => { + try { + const result = await electron.showDirectoryPicker(); + if (result) { + sourcePath.value = result; + await validateSource(result); + } + } catch (error) { + console.error(error); + pathError.value = t2("install.failedToSelectDirectory"); + } + }, "browsePath"); + watchEffect(() => { + migrationItemIds.value = migrationItems.value.filter((item) => item.selected).map((item) => item.id); + }); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", _hoisted_1$2, [ + createBaseVNode("div", _hoisted_2$2, [ + createBaseVNode("h2", _hoisted_3$2, toDisplayString(_ctx.$t("install.migrateFromExistingInstallation")), 1), + createBaseVNode("p", _hoisted_4$2, toDisplayString(_ctx.$t("install.migrationSourcePathDescription")), 1), + createBaseVNode("div", _hoisted_5, [ + createVNode(unref(script$4), { + modelValue: sourcePath.value, + "onUpdate:modelValue": [ + _cache[0] || (_cache[0] = ($event) => sourcePath.value = $event), + validateSource + ], + placeholder: "Select existing ComfyUI installation (optional)", + class: normalizeClass(["flex-1", { "p-invalid": pathError.value }]) + }, null, 8, ["modelValue", "class"]), + createVNode(unref(script$7), { + icon: "pi pi-folder", + onClick: browsePath, + class: "w-12" + }) + ]), + pathError.value ? (openBlock(), createBlock(unref(script$8), { + key: 0, + severity: "error" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(pathError.value), 1) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + isValidSource.value ? (openBlock(), createElementBlock("div", _hoisted_6, [ + createBaseVNode("h3", _hoisted_7, toDisplayString(_ctx.$t("install.selectItemsToMigrate")), 1), + createBaseVNode("div", _hoisted_8, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(migrationItems.value, (item) => { + return openBlock(), createElementBlock("div", { + key: item.id, + class: "flex items-center gap-3 p-2 hover:bg-neutral-700 rounded", + onClick: /* @__PURE__ */ __name(($event) => item.selected = !item.selected, "onClick") + }, [ + createVNode(unref(script$9), { + modelValue: item.selected, + "onUpdate:modelValue": /* @__PURE__ */ __name(($event) => item.selected = $event, "onUpdate:modelValue"), + inputId: item.id, + binary: true, + onClick: _cache[1] || (_cache[1] = withModifiers(() => { + }, ["stop"])) + }, null, 8, ["modelValue", "onUpdate:modelValue", "inputId"]), + createBaseVNode("div", null, [ + createBaseVNode("label", { + for: item.id, + class: "text-neutral-200 font-medium" + }, toDisplayString(item.label), 9, _hoisted_10), + createBaseVNode("p", _hoisted_11, toDisplayString(item.description), 1) + ]) + ], 8, _hoisted_9); + }), 128)) + ]) + ])) : (openBlock(), createElementBlock("div", _hoisted_12, toDisplayString(_ctx.$t("install.migrationOptional")), 1)) + ]); + }; + } +}); +const _hoisted_1$1 = { class: "flex flex-col items-center gap-4" }; +const _hoisted_2$1 = { class: "w-full" }; +const _hoisted_3$1 = { class: "text-lg font-medium text-neutral-100" }; +const _hoisted_4$1 = { class: "text-sm text-neutral-400 mt-1" }; +const _sfc_main$2 = /* @__PURE__ */ defineComponent({ + __name: "MirrorItem", + props: /* @__PURE__ */ mergeModels({ + item: {} + }, { + "modelValue": { required: true }, + "modelModifiers": {} + }), + emits: /* @__PURE__ */ mergeModels(["state-change"], ["update:modelValue"]), + setup(__props, { emit: __emit }) { + const emit = __emit; + const modelValue = useModel(__props, "modelValue"); + const validationState = ref(ValidationState.IDLE); + const normalizedSettingId = computed(() => { + return normalizeI18nKey(__props.item.settingId); + }); + onMounted(() => { + modelValue.value = __props.item.mirror; + }); + watch(validationState, (newState) => { + emit("state-change", newState); + if (newState === ValidationState.INVALID && modelValue.value === __props.item.mirror) { + modelValue.value = __props.item.fallbackMirror; + } + }); + return (_ctx, _cache) => { + const _component_UrlInput = _sfc_main$7; + return openBlock(), createElementBlock("div", _hoisted_1$1, [ + createBaseVNode("div", _hoisted_2$1, [ + createBaseVNode("h3", _hoisted_3$1, toDisplayString(_ctx.$t(`settings.${normalizedSettingId.value}.name`)), 1), + createBaseVNode("p", _hoisted_4$1, toDisplayString(_ctx.$t(`settings.${normalizedSettingId.value}.tooltip`)), 1) + ]), + createVNode(_component_UrlInput, { + modelValue: modelValue.value, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event), + "validate-url-fn": /* @__PURE__ */ __name((mirror) => unref(checkMirrorReachable)(mirror + (_ctx.item.validationPathSuffix ?? "")), "validate-url-fn"), + onStateChange: _cache[1] || (_cache[1] = ($event) => validationState.value = $event) + }, null, 8, ["modelValue", "validate-url-fn"]) + ]); + }; + } +}); +const _sfc_main$1 = /* @__PURE__ */ defineComponent({ + __name: "MirrorsConfiguration", + props: /* @__PURE__ */ mergeModels({ + device: {} + }, { + "pythonMirror": { required: true }, + "pythonMirrorModifiers": {}, + "pypiMirror": { required: true }, + "pypiMirrorModifiers": {}, + "torchMirror": { required: true }, + "torchMirrorModifiers": {} + }), + emits: ["update:pythonMirror", "update:pypiMirror", "update:torchMirror"], + setup(__props) { + const showMirrorInputs = ref(false); + const pythonMirror = useModel(__props, "pythonMirror"); + const pypiMirror = useModel(__props, "pypiMirror"); + const torchMirror = useModel(__props, "torchMirror"); + const getTorchMirrorItem = /* @__PURE__ */ __name((device) => { + const settingId = "Comfy-Desktop.UV.TorchInstallMirror"; + switch (device) { + case "mps": + return { + settingId, + mirror: NIGHTLY_CPU_TORCH_URL, + fallbackMirror: NIGHTLY_CPU_TORCH_URL + }; + case "nvidia": + return { + settingId, + mirror: CUDA_TORCH_URL, + fallbackMirror: CUDA_TORCH_URL + }; + case "cpu": + default: + return { + settingId, + mirror: PYPI_MIRROR.mirror, + fallbackMirror: PYPI_MIRROR.fallbackMirror + }; + } + }, "getTorchMirrorItem"); + const mirrors = computed(() => [ + [PYTHON_MIRROR, pythonMirror], + [PYPI_MIRROR, pypiMirror], + [getTorchMirrorItem(__props.device), torchMirror] + ]); + const validationStates = ref( + mirrors.value.map(() => ValidationState.IDLE) + ); + const validationState = computed(() => { + return mergeValidationStates(validationStates.value); + }); + const validationStateTooltip = computed(() => { + switch (validationState.value) { + case ValidationState.INVALID: + return t("install.settings.mirrorsUnreachable"); + case ValidationState.VALID: + return t("install.settings.mirrorsReachable"); + default: + return t("install.settings.checkingMirrors"); + } + }); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createBlock(unref(script$a), { + header: _ctx.$t("install.settings.mirrorSettings"), + toggleable: "", + collapsed: !showMirrorInputs.value, + "pt:root": "bg-neutral-800 border-none w-[600px]" + }, { + icons: withCtx(() => [ + withDirectives(createBaseVNode("i", { + class: normalizeClass({ + "pi pi-spin pi-spinner text-neutral-400": validationState.value === unref(ValidationState).LOADING, + "pi pi-check text-green-500": validationState.value === unref(ValidationState).VALID, + "pi pi-times text-red-500": validationState.value === unref(ValidationState).INVALID + }) + }, null, 2), [ + [_directive_tooltip, validationStateTooltip.value] + ]) + ]), + default: withCtx(() => [ + (openBlock(true), createElementBlock(Fragment, null, renderList(mirrors.value, ([item, modelValue], index) => { + return openBlock(), createElementBlock(Fragment, { + key: item.settingId + item.mirror + }, [ + index > 0 ? (openBlock(), createBlock(unref(script$1), { key: 0 })) : createCommentVNode("", true), + createVNode(_sfc_main$2, { + item, + modelValue: modelValue.value, + "onUpdate:modelValue": /* @__PURE__ */ __name(($event) => modelValue.value = $event, "onUpdate:modelValue"), + onStateChange: /* @__PURE__ */ __name(($event) => validationStates.value[index] = $event, "onStateChange") + }, null, 8, ["item", "modelValue", "onUpdate:modelValue", "onStateChange"]) + ], 64); + }), 128)) + ]), + _: 1 + }, 8, ["header", "collapsed"]); + }; + } +}); +const _hoisted_1 = { class: "flex pt-6 justify-end" }; +const _hoisted_2 = { class: "flex pt-6 justify-between" }; +const _hoisted_3 = { class: "flex pt-6 justify-between" }; +const _hoisted_4 = { class: "flex mt-6 justify-between" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "InstallView", + setup(__props) { + const device = ref(null); + const installPath = ref(""); + const pathError = ref(""); + const migrationSourcePath = ref(""); + const migrationItemIds = ref([]); + const autoUpdate = ref(true); + const allowMetrics = ref(true); + const pythonMirror = ref(""); + const pypiMirror = ref(""); + const torchMirror = ref(""); + const highestStep = ref(0); + const handleStepChange = /* @__PURE__ */ __name((value) => { + setHighestStep(value); + electronAPI().Events.trackEvent("install_stepper_change", { + step: value + }); + }, "handleStepChange"); + const setHighestStep = /* @__PURE__ */ __name((value) => { + const int = typeof value === "number" ? value : parseInt(value, 10); + if (!isNaN(int) && int > highestStep.value) highestStep.value = int; + }, "setHighestStep"); + const hasError = computed(() => pathError.value !== ""); + const noGpu = computed(() => typeof device.value !== "string"); + const electron = electronAPI(); + const router = useRouter(); + const install = /* @__PURE__ */ __name(() => { + const options = { + installPath: installPath.value, + autoUpdate: autoUpdate.value, + allowMetrics: allowMetrics.value, + migrationSourcePath: migrationSourcePath.value, + migrationItemIds: toRaw(migrationItemIds.value), + pythonMirror: pythonMirror.value, + pypiMirror: pypiMirror.value, + torchMirror: torchMirror.value, + device: device.value + }; + electron.installComfyUI(options); + const nextPage = options.device === "unsupported" ? "/manual-configuration" : "/server-start"; + router.push(nextPage); + }, "install"); + onMounted(async () => { + if (!electron) return; + const detectedGpu = await electron.Config.getDetectedGpu(); + if (detectedGpu === "mps" || detectedGpu === "nvidia") { + device.value = detectedGpu; + } + electronAPI().Events.trackEvent("install_stepper_change", { + step: "0", + gpu: detectedGpu + }); + }); + return (_ctx, _cache) => { + return openBlock(), createBlock(_sfc_main$8, { dark: "" }, { + default: withCtx(() => [ + createVNode(unref(script$f), { + class: "h-full p-8 2xl:p-16", + value: "0", + "onUpdate:value": handleStepChange + }, { + default: withCtx(() => [ + createVNode(unref(script$b), { class: "select-none" }, { + default: withCtx(() => [ + createVNode(unref(script$c), { value: "0" }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.$t("install.gpu")), 1) + ]), + _: 1 + }), + createVNode(unref(script$c), { + value: "1", + disabled: noGpu.value + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.$t("install.installLocation")), 1) + ]), + _: 1 + }, 8, ["disabled"]), + createVNode(unref(script$c), { + value: "2", + disabled: noGpu.value || hasError.value || highestStep.value < 1 + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.$t("install.migration")), 1) + ]), + _: 1 + }, 8, ["disabled"]), + createVNode(unref(script$c), { + value: "3", + disabled: noGpu.value || hasError.value || highestStep.value < 2 + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.$t("install.desktopSettings")), 1) + ]), + _: 1 + }, 8, ["disabled"]) + ]), + _: 1 + }), + createVNode(unref(script$d), null, { + default: withCtx(() => [ + createVNode(unref(script$e), { value: "0" }, { + default: withCtx(({ activateCallback }) => [ + createVNode(GpuPicker, { + device: device.value, + "onUpdate:device": _cache[0] || (_cache[0] = ($event) => device.value = $event) + }, null, 8, ["device"]), + createBaseVNode("div", _hoisted_1, [ + createVNode(unref(script$7), { + label: _ctx.$t("g.next"), + icon: "pi pi-arrow-right", + iconPos: "right", + onClick: /* @__PURE__ */ __name(($event) => activateCallback("1"), "onClick"), + disabled: typeof device.value !== "string" + }, null, 8, ["label", "onClick", "disabled"]) + ]) + ]), + _: 1 + }), + createVNode(unref(script$e), { value: "1" }, { + default: withCtx(({ activateCallback }) => [ + createVNode(_sfc_main$4, { + installPath: installPath.value, + "onUpdate:installPath": _cache[1] || (_cache[1] = ($event) => installPath.value = $event), + pathError: pathError.value, + "onUpdate:pathError": _cache[2] || (_cache[2] = ($event) => pathError.value = $event) + }, null, 8, ["installPath", "pathError"]), + createBaseVNode("div", _hoisted_2, [ + createVNode(unref(script$7), { + label: _ctx.$t("g.back"), + severity: "secondary", + icon: "pi pi-arrow-left", + onClick: /* @__PURE__ */ __name(($event) => activateCallback("0"), "onClick") + }, null, 8, ["label", "onClick"]), + createVNode(unref(script$7), { + label: _ctx.$t("g.next"), + icon: "pi pi-arrow-right", + iconPos: "right", + onClick: /* @__PURE__ */ __name(($event) => activateCallback("2"), "onClick"), + disabled: pathError.value !== "" + }, null, 8, ["label", "onClick", "disabled"]) + ]) + ]), + _: 1 + }), + createVNode(unref(script$e), { value: "2" }, { + default: withCtx(({ activateCallback }) => [ + createVNode(_sfc_main$3, { + sourcePath: migrationSourcePath.value, + "onUpdate:sourcePath": _cache[3] || (_cache[3] = ($event) => migrationSourcePath.value = $event), + migrationItemIds: migrationItemIds.value, + "onUpdate:migrationItemIds": _cache[4] || (_cache[4] = ($event) => migrationItemIds.value = $event) + }, null, 8, ["sourcePath", "migrationItemIds"]), + createBaseVNode("div", _hoisted_3, [ + createVNode(unref(script$7), { + label: _ctx.$t("g.back"), + severity: "secondary", + icon: "pi pi-arrow-left", + onClick: /* @__PURE__ */ __name(($event) => activateCallback("1"), "onClick") + }, null, 8, ["label", "onClick"]), + createVNode(unref(script$7), { + label: _ctx.$t("g.next"), + icon: "pi pi-arrow-right", + iconPos: "right", + onClick: /* @__PURE__ */ __name(($event) => activateCallback("3"), "onClick") + }, null, 8, ["label", "onClick"]) + ]) + ]), + _: 1 + }), + createVNode(unref(script$e), { value: "3" }, { + default: withCtx(({ activateCallback }) => [ + createVNode(_sfc_main$6, { + autoUpdate: autoUpdate.value, + "onUpdate:autoUpdate": _cache[5] || (_cache[5] = ($event) => autoUpdate.value = $event), + allowMetrics: allowMetrics.value, + "onUpdate:allowMetrics": _cache[6] || (_cache[6] = ($event) => allowMetrics.value = $event) + }, null, 8, ["autoUpdate", "allowMetrics"]), + createVNode(_sfc_main$1, { + device: device.value, + pythonMirror: pythonMirror.value, + "onUpdate:pythonMirror": _cache[7] || (_cache[7] = ($event) => pythonMirror.value = $event), + pypiMirror: pypiMirror.value, + "onUpdate:pypiMirror": _cache[8] || (_cache[8] = ($event) => pypiMirror.value = $event), + torchMirror: torchMirror.value, + "onUpdate:torchMirror": _cache[9] || (_cache[9] = ($event) => torchMirror.value = $event), + class: "mt-6" + }, null, 8, ["device", "pythonMirror", "pypiMirror", "torchMirror"]), + createBaseVNode("div", _hoisted_4, [ + createVNode(unref(script$7), { + label: _ctx.$t("g.back"), + severity: "secondary", + icon: "pi pi-arrow-left", + onClick: /* @__PURE__ */ __name(($event) => activateCallback("2"), "onClick") + }, null, 8, ["label", "onClick"]), + createVNode(unref(script$7), { + label: _ctx.$t("g.install"), + icon: "pi pi-check", + iconPos: "right", + disabled: hasError.value, + onClick: _cache[10] || (_cache[10] = ($event) => install()) + }, null, 8, ["label", "disabled"]) + ]) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + _: 1 + }) + ]), + _: 1 + }); + }; + } +}); +const InstallView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-cd6731d2"]]); +export { + InstallView as default +}; +//# sourceMappingURL=InstallView-DTDlVr0Z.js.map diff --git a/web/assets/InstallView-DbJ2cGfL.css b/web/assets/InstallView-DbJ2cGfL.css new file mode 100644 index 0000000000000000000000000000000000000000..5bbebb8092e07c2e866632a339db1fa2be341b07 --- /dev/null +++ b/web/assets/InstallView-DbJ2cGfL.css @@ -0,0 +1,81 @@ + +.p-tag[data-v-79125ff6] { + --p-tag-gap: 0.5rem; +} +.hover-brighten { +&[data-v-79125ff6] { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + transition-property: filter, box-shadow; + } +&[data-v-79125ff6]:hover { + filter: brightness(107%) contrast(105%); + box-shadow: 0 0 0.25rem #ffffff79; +} +} +.p-accordioncontent-content[data-v-79125ff6] { + border-radius: 0.5rem; + --tw-bg-opacity: 1; + background-color: rgb(23 23 23 / var(--tw-bg-opacity)); + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +div.selected { +.gpu-button[data-v-79125ff6]:not(.selected) { + opacity: 0.5; +} +.gpu-button[data-v-79125ff6]:not(.selected):hover { + opacity: 1; +} +} +.gpu-button[data-v-79125ff6] { + margin: 0px; + display: flex; + width: 50%; + cursor: pointer; + flex-direction: column; + align-items: center; + justify-content: space-around; + border-radius: 0.5rem; + background-color: rgb(38 38 38 / var(--tw-bg-opacity)); + --tw-bg-opacity: 0.5; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.gpu-button[data-v-79125ff6]:hover { + --tw-bg-opacity: 0.75; +} +.gpu-button { +&.selected[data-v-79125ff6] { + --tw-bg-opacity: 1; + background-color: rgb(64 64 64 / var(--tw-bg-opacity)); +} +&.selected[data-v-79125ff6] { + --tw-bg-opacity: 0.5; +} +&.selected[data-v-79125ff6] { + opacity: 1; +} +&.selected[data-v-79125ff6]:hover { + --tw-bg-opacity: 0.6; +} +} +.disabled[data-v-79125ff6] { + pointer-events: none; + opacity: 0.4; +} +.p-card-header[data-v-79125ff6] { + flex-grow: 1; + text-align: center; +} +.p-card-body[data-v-79125ff6] { + padding-top: 0px; + text-align: center; +} + +[data-v-cd6731d2] .p-steppanel { + background-color: transparent +} diff --git a/web/assets/KeybindingPanel-C0Nt6GXU.js b/web/assets/KeybindingPanel-C0Nt6GXU.js new file mode 100644 index 0000000000000000000000000000000000000000..f791713bb75d5e5b85623f332623cd5de52cb0d2 --- /dev/null +++ b/web/assets/KeybindingPanel-C0Nt6GXU.js @@ -0,0 +1,282 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { d as defineComponent, c as computed, o as openBlock, f as createElementBlock, F as Fragment, D as renderList, k as createVNode, z as withCtx, a7 as createTextVNode, E as toDisplayString, j as unref, a4 as script, B as createCommentVNode, U as ref, dl as FilterMatchMode, an as useKeybindingStore, L as useCommandStore, K as useI18n, Y as normalizeI18nKey, w as watchEffect, aR as useToast, r as resolveDirective, y as createBlock, dm as SearchBox, m as createBaseVNode, l as script$2, bg as script$4, ar as withModifiers, bj as script$5, ab as script$6, i as withDirectives, dn as _sfc_main$2, dp as KeyComboImpl, dq as KeybindingImpl, _ as _export_sfc } from "./index-4Hb32CNk.js"; +import { g as script$1, h as script$3 } from "./index-nJubvliG.js"; +import { u as useKeybindingService } from "./keybindingService-BTNdTpfl.js"; +import "./index-D6zf5KAf.js"; +const _hoisted_1$1 = { + key: 0, + class: "px-2" +}; +const _sfc_main$1 = /* @__PURE__ */ defineComponent({ + __name: "KeyComboDisplay", + props: { + keyCombo: {}, + isModified: { type: Boolean, default: false } + }, + setup(__props) { + const props = __props; + const keySequences = computed(() => props.keyCombo.getKeySequences()); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("span", null, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(keySequences.value, (sequence, index) => { + return openBlock(), createElementBlock(Fragment, { key: index }, [ + createVNode(unref(script), { + severity: _ctx.isModified ? "info" : "secondary" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(sequence), 1) + ]), + _: 2 + }, 1032, ["severity"]), + index < keySequences.value.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_1$1, "+")) : createCommentVNode("", true) + ], 64); + }), 128)) + ]); + }; + } +}); +const _hoisted_1 = { class: "actions invisible flex flex-row" }; +const _hoisted_2 = ["title"]; +const _hoisted_3 = { key: 1 }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "KeybindingPanel", + setup(__props) { + const filters = ref({ + global: { value: "", matchMode: FilterMatchMode.CONTAINS } + }); + const keybindingStore = useKeybindingStore(); + const keybindingService = useKeybindingService(); + const commandStore = useCommandStore(); + const { t } = useI18n(); + const commandsData = computed(() => { + return Object.values(commandStore.commands).map((command) => ({ + id: command.id, + label: t(`commands.${normalizeI18nKey(command.id)}.label`, command.label), + keybinding: keybindingStore.getKeybindingByCommandId(command.id) + })); + }); + const selectedCommandData = ref(null); + const editDialogVisible = ref(false); + const newBindingKeyCombo = ref(null); + const currentEditingCommand = ref(null); + const keybindingInput = ref(null); + const existingKeybindingOnCombo = computed(() => { + if (!currentEditingCommand.value) { + return null; + } + if (currentEditingCommand.value.keybinding?.combo?.equals( + newBindingKeyCombo.value + )) { + return null; + } + if (!newBindingKeyCombo.value) { + return null; + } + return keybindingStore.getKeybinding(newBindingKeyCombo.value); + }); + function editKeybinding(commandData) { + currentEditingCommand.value = commandData; + newBindingKeyCombo.value = commandData.keybinding ? commandData.keybinding.combo : null; + editDialogVisible.value = true; + } + __name(editKeybinding, "editKeybinding"); + watchEffect(() => { + if (editDialogVisible.value) { + setTimeout(() => { + keybindingInput.value?.$el?.focus(); + }, 300); + } + }); + function removeKeybinding(commandData) { + if (commandData.keybinding) { + keybindingStore.unsetKeybinding(commandData.keybinding); + keybindingService.persistUserKeybindings(); + } + } + __name(removeKeybinding, "removeKeybinding"); + function captureKeybinding(event) { + const keyCombo = KeyComboImpl.fromEvent(event); + newBindingKeyCombo.value = keyCombo; + } + __name(captureKeybinding, "captureKeybinding"); + function cancelEdit() { + editDialogVisible.value = false; + currentEditingCommand.value = null; + newBindingKeyCombo.value = null; + } + __name(cancelEdit, "cancelEdit"); + function saveKeybinding() { + if (currentEditingCommand.value && newBindingKeyCombo.value) { + const updated = keybindingStore.updateKeybindingOnCommand( + new KeybindingImpl({ + commandId: currentEditingCommand.value.id, + combo: newBindingKeyCombo.value + }) + ); + if (updated) { + keybindingService.persistUserKeybindings(); + } + } + cancelEdit(); + } + __name(saveKeybinding, "saveKeybinding"); + const toast = useToast(); + async function resetKeybindings() { + keybindingStore.resetKeybindings(); + await keybindingService.persistUserKeybindings(); + toast.add({ + severity: "info", + summary: "Info", + detail: "Keybindings reset", + life: 3e3 + }); + } + __name(resetKeybindings, "resetKeybindings"); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createBlock(_sfc_main$2, { + value: "Keybinding", + class: "keybinding-panel" + }, { + header: withCtx(() => [ + createVNode(SearchBox, { + modelValue: filters.value["global"].value, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => filters.value["global"].value = $event), + placeholder: _ctx.$t("g.searchKeybindings") + "..." + }, null, 8, ["modelValue", "placeholder"]) + ]), + default: withCtx(() => [ + createVNode(unref(script$3), { + value: commandsData.value, + selection: selectedCommandData.value, + "onUpdate:selection": _cache[1] || (_cache[1] = ($event) => selectedCommandData.value = $event), + "global-filter-fields": ["id"], + filters: filters.value, + selectionMode: "single", + stripedRows: "", + pt: { + header: "px-0" + } + }, { + default: withCtx(() => [ + createVNode(unref(script$1), { + field: "actions", + header: "" + }, { + body: withCtx((slotProps) => [ + createBaseVNode("div", _hoisted_1, [ + createVNode(unref(script$2), { + icon: "pi pi-pencil", + class: "p-button-text", + onClick: /* @__PURE__ */ __name(($event) => editKeybinding(slotProps.data), "onClick") + }, null, 8, ["onClick"]), + createVNode(unref(script$2), { + icon: "pi pi-trash", + class: "p-button-text p-button-danger", + onClick: /* @__PURE__ */ __name(($event) => removeKeybinding(slotProps.data), "onClick"), + disabled: !slotProps.data.keybinding + }, null, 8, ["onClick", "disabled"]) + ]) + ]), + _: 1 + }), + createVNode(unref(script$1), { + field: "id", + header: _ctx.$t("g.command"), + sortable: "", + class: "max-w-64 2xl:max-w-full" + }, { + body: withCtx((slotProps) => [ + createBaseVNode("div", { + class: "overflow-hidden text-ellipsis whitespace-nowrap", + title: slotProps.data.id + }, toDisplayString(slotProps.data.label), 9, _hoisted_2) + ]), + _: 1 + }, 8, ["header"]), + createVNode(unref(script$1), { + field: "keybinding", + header: _ctx.$t("g.keybinding") + }, { + body: withCtx((slotProps) => [ + slotProps.data.keybinding ? (openBlock(), createBlock(_sfc_main$1, { + key: 0, + keyCombo: slotProps.data.keybinding.combo, + isModified: unref(keybindingStore).isCommandKeybindingModified(slotProps.data.id) + }, null, 8, ["keyCombo", "isModified"])) : (openBlock(), createElementBlock("span", _hoisted_3, "-")) + ]), + _: 1 + }, 8, ["header"]) + ]), + _: 1 + }, 8, ["value", "selection", "filters"]), + createVNode(unref(script$6), { + class: "min-w-96", + visible: editDialogVisible.value, + "onUpdate:visible": _cache[2] || (_cache[2] = ($event) => editDialogVisible.value = $event), + modal: "", + header: currentEditingCommand.value?.id, + onHide: cancelEdit + }, { + footer: withCtx(() => [ + createVNode(unref(script$2), { + label: "Save", + icon: "pi pi-check", + onClick: saveKeybinding, + disabled: !!existingKeybindingOnCombo.value, + autofocus: "" + }, null, 8, ["disabled"]) + ]), + default: withCtx(() => [ + createBaseVNode("div", null, [ + createVNode(unref(script$4), { + class: "mb-2 text-center", + ref_key: "keybindingInput", + ref: keybindingInput, + modelValue: newBindingKeyCombo.value?.toString() ?? "", + placeholder: "Press keys for new binding", + onKeydown: withModifiers(captureKeybinding, ["stop", "prevent"]), + autocomplete: "off", + fluid: "", + invalid: !!existingKeybindingOnCombo.value + }, null, 8, ["modelValue", "invalid"]), + existingKeybindingOnCombo.value ? (openBlock(), createBlock(unref(script$5), { + key: 0, + severity: "error" + }, { + default: withCtx(() => [ + _cache[3] || (_cache[3] = createTextVNode(" Keybinding already exists on ")), + createVNode(unref(script), { + severity: "secondary", + value: existingKeybindingOnCombo.value.commandId + }, null, 8, ["value"]) + ]), + _: 1 + })) : createCommentVNode("", true) + ]) + ]), + _: 1 + }, 8, ["visible", "header"]), + withDirectives(createVNode(unref(script$2), { + class: "mt-4", + label: _ctx.$t("g.reset"), + icon: "pi pi-trash", + severity: "danger", + fluid: "", + text: "", + onClick: resetKeybindings + }, null, 8, ["label"]), [ + [_directive_tooltip, _ctx.$t("g.resetKeybindingsTooltip")] + ]) + ]), + _: 1 + }); + }; + } +}); +const KeybindingPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-2554ab36"]]); +export { + KeybindingPanel as default +}; +//# sourceMappingURL=KeybindingPanel-C0Nt6GXU.js.map diff --git a/web/assets/KeybindingPanel-DvrUYZ4S.css b/web/assets/KeybindingPanel-DvrUYZ4S.css new file mode 100644 index 0000000000000000000000000000000000000000..8f714bcdb23354709065ecbcdf000161e9e2eac1 --- /dev/null +++ b/web/assets/KeybindingPanel-DvrUYZ4S.css @@ -0,0 +1,8 @@ + +[data-v-2554ab36] .p-datatable-tbody > tr > td { + padding: 0.25rem; + min-height: 2rem +} +[data-v-2554ab36] .p-datatable-row-selected .actions,[data-v-2554ab36] .p-datatable-selectable-row:hover .actions { + visibility: visible +} diff --git a/web/assets/MaintenanceView-B5Gl0Rrl.js b/web/assets/MaintenanceView-B5Gl0Rrl.js new file mode 100644 index 0000000000000000000000000000000000000000..4254e4e679f77b8efef09fa2905a56f41396b0fe --- /dev/null +++ b/web/assets/MaintenanceView-B5Gl0Rrl.js @@ -0,0 +1,26033 @@ +var __defProp = Object.defineProperty; +var __name = (target, value2) => __defProp(target, "name", { value: value2, configurable: true }); +import { bA as BaseStyle, bB as script$1d, bC as ZIndex, bD as addClass, bE as focus, bF as blockBodyScroll, bG as unblockBodyScroll, bH as FocusTrap, l as script$1e, bI as script$1f, bJ as script$1g, bK as resolveComponent, r as resolveDirective, o as openBlock, y as createBlock, z as withCtx, f as createElementBlock, as as mergeProps, k as createVNode, bL as Transition, i as withDirectives, A as renderSlot, F as Fragment, m as createBaseVNode, ai as normalizeClass, E as toDisplayString, B as createCommentVNode, C as resolveDynamicComponent, d as defineComponent, bs as mergeModels, bm as useModel, v as vShow, j as unref, bM as script$1h, c as computed, bN as PrimeIcons, bc as t, a4 as script$1i, aZ as inject, bO as findSingle, bP as getAttribute, bQ as script$1j, bR as script$1k, bS as Ripple, bT as UniqueComponentId, bU as script$1l, D as renderList, bV as BaseDirective, bW as removeClass, bX as createElement, bY as hasClass, bZ as script$1m, b_ as script$1n, b$ as addStyle, c0 as ConnectedOverlayScrollHandler, c1 as isTouchDevice, c2 as relativePosition, c3 as getOuterWidth, c4 as absolutePosition, c5 as find, c6 as getIndex, c7 as getFocusableElements, c8 as OverlayEventBus, c9 as setAttribute, ca as localeComparator, bg as script$1o, cb as script$1p, n as normalizeStyle, a7 as createTextVNode, bf as withKeys, cc as resolveFieldData, cd as isNotEmpty, ce as equals, cf as script$1q, cg as isString, ch as isPrintableCharacter, ci as isEmpty, cj as findLastIndex, ck as script$1r, cl as script$1s, cm as uuid, a8 as script$1t, cn as sort, co as createSlots, cp as EventBus, H as markRaw, cq as resolve, cr as Tooltip, bi as script$1v, ab as script$1w, cs as script$1x, ct as script$1y, cu as script$1z, bz as script$1A, bj as script$1B, cv as normalizeProps, cw as isAttributeEquals, cx as guardReactiveProps, cy as setCSSProperty, cz as $dt, cA as script$1D, cB as script$1F, cC as getUserAgent, bn as script$1G, cD as script$1H, cE as getFirstFocusableElement, cF as getLastFocusableElement, cG as FilterService, br as script$1J, cH as script$1K, bp as script$1L, bo as script$1M, cI as script$1N, cJ as findIndexInList, cK as scrollInView, cL as script$1O, cM as script$1P, cN as script$1Q, cO as findLast, cP as getWindowScrollTop, cQ as getWidth, cR as getOffset, cS as vModelText, cT as script$1U, ar as withModifiers, cU as getVNodeProp, cV as getNextElementSibling, cW as getPreviousElementSibling, cX as isClickable, cY as _default, cZ as clearSelection, c_ as isRTL, b5 as electronAPI, I as defineStore, U as ref, c$ as useTimeout, O as watch, d0 as script$1Y, _ as _export_sfc, aR as useToast, d1 as useConfirm, bh as script$1Z, d2 as script$1_, p as onMounted, d3 as onUnmounted, av as script$1$, af as isRef, bl as BaseTerminal } from "./index-4Hb32CNk.js"; +import { j as script$1C, k as script$1E, g as script$20 } from "./index-D4CAJ2MK.js"; +import { s as script$1u, a as script$1R, b as script$1S, c as script$1T, d as script$1V, e as script$1W, f as script$1X } from "./index-nJubvliG.js"; +import { s as script$1I } from "./index-D6zf5KAf.js"; +import "./index-hkkV7N7e.js"; +import { _ as _sfc_main$7 } from "./BaseViewTemplate-v6omkdXg.js"; +var theme$D = /* @__PURE__ */ __name(function theme(_ref) { + var dt = _ref.dt; + return "\n.p-drawer {\n display: flex;\n flex-direction: column;\n transform: translate3d(0px, 0px, 0px);\n position: relative;\n transition: transform 0.3s;\n background: ".concat(dt("drawer.background"), ";\n color: ").concat(dt("drawer.color"), ";\n border: 1px solid ").concat(dt("drawer.border.color"), ";\n box-shadow: ").concat(dt("drawer.shadow"), ";\n}\n\n.p-drawer-content {\n overflow-y: auto;\n flex-grow: 1;\n padding: ").concat(dt("drawer.content.padding"), ";\n}\n\n.p-drawer-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n padding: ").concat(dt("drawer.header.padding"), ";\n}\n\n.p-drawer-footer {\n padding: ").concat(dt("drawer.footer.padding"), ";\n}\n\n.p-drawer-title {\n font-weight: ").concat(dt("drawer.title.font.weight"), ";\n font-size: ").concat(dt("drawer.title.font.size"), ";\n}\n\n.p-drawer-full .p-drawer {\n transition: none;\n transform: none;\n width: 100vw !important;\n height: 100vh !important;\n max-height: 100%;\n top: 0px !important;\n left: 0px !important;\n border-width: 1px;\n}\n\n.p-drawer-left .p-drawer-enter-from,\n.p-drawer-left .p-drawer-leave-to {\n transform: translateX(-100%);\n}\n\n.p-drawer-right .p-drawer-enter-from,\n.p-drawer-right .p-drawer-leave-to {\n transform: translateX(100%);\n}\n\n.p-drawer-top .p-drawer-enter-from,\n.p-drawer-top .p-drawer-leave-to {\n transform: translateY(-100%);\n}\n\n.p-drawer-bottom .p-drawer-enter-from,\n.p-drawer-bottom .p-drawer-leave-to {\n transform: translateY(100%);\n}\n\n.p-drawer-full .p-drawer-enter-from,\n.p-drawer-full .p-drawer-leave-to {\n opacity: 0;\n}\n\n.p-drawer-full .p-drawer-enter-active,\n.p-drawer-full .p-drawer-leave-active {\n transition: opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);\n}\n\n.p-drawer-left .p-drawer {\n width: 20rem;\n height: 100%;\n border-inline-end-width: 1px;\n}\n\n.p-drawer-right .p-drawer {\n width: 20rem;\n height: 100%;\n border-inline-start-width: 1px;\n}\n\n.p-drawer-top .p-drawer {\n height: 10rem;\n width: 100%;\n border-block-end-width: 1px;\n}\n\n.p-drawer-bottom .p-drawer {\n height: 10rem;\n width: 100%;\n border-block-start-width: 1px;\n}\n\n.p-drawer-left .p-drawer-content,\n.p-drawer-right .p-drawer-content,\n.p-drawer-top .p-drawer-content,\n.p-drawer-bottom .p-drawer-content {\n width: 100%;\n height: 100%;\n}\n\n.p-drawer-open {\n display: flex;\n}\n\n.p-drawer-mask:dir(rtl) {\n flex-direction: row-reverse;\n}\n"); +}, "theme"); +var inlineStyles$9 = { + mask: /* @__PURE__ */ __name(function mask(_ref2) { + var position = _ref2.position, modal = _ref2.modal; + return { + position: "fixed", + height: "100%", + width: "100%", + left: 0, + top: 0, + display: "flex", + justifyContent: position === "left" ? "flex-start" : position === "right" ? "flex-end" : "center", + alignItems: position === "top" ? "flex-start" : position === "bottom" ? "flex-end" : "center", + pointerEvents: modal ? "auto" : "none" + }; + }, "mask"), + root: { + pointerEvents: "auto" + } +}; +var classes$M = { + mask: /* @__PURE__ */ __name(function mask2(_ref3) { + var instance = _ref3.instance, props = _ref3.props; + var positions = ["left", "right", "top", "bottom"]; + var pos = positions.find(function(item8) { + return item8 === props.position; + }); + return ["p-drawer-mask", { + "p-overlay-mask p-overlay-mask-enter": props.modal, + "p-drawer-open": instance.containerVisible, + "p-drawer-full": instance.fullScreen + }, pos ? "p-drawer-".concat(pos) : ""]; + }, "mask"), + root: /* @__PURE__ */ __name(function root(_ref4) { + var instance = _ref4.instance; + return ["p-drawer p-component", { + "p-drawer-full": instance.fullScreen + }]; + }, "root"), + header: "p-drawer-header", + title: "p-drawer-title", + pcCloseButton: "p-drawer-close-button", + content: "p-drawer-content", + footer: "p-drawer-footer" +}; +var DrawerStyle = BaseStyle.extend({ + name: "drawer", + theme: theme$D, + classes: classes$M, + inlineStyles: inlineStyles$9 +}); +var script$1$O = { + name: "BaseDrawer", + "extends": script$1d, + props: { + visible: { + type: Boolean, + "default": false + }, + position: { + type: String, + "default": "left" + }, + header: { + type: null, + "default": null + }, + baseZIndex: { + type: Number, + "default": 0 + }, + autoZIndex: { + type: Boolean, + "default": true + }, + dismissable: { + type: Boolean, + "default": true + }, + showCloseIcon: { + type: Boolean, + "default": true + }, + closeButtonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default2() { + return { + severity: "secondary", + text: true, + rounded: true + }; + }, "_default") + }, + closeIcon: { + type: String, + "default": void 0 + }, + modal: { + type: Boolean, + "default": true + }, + blockScroll: { + type: Boolean, + "default": false + } + }, + style: DrawerStyle, + provide: /* @__PURE__ */ __name(function provide() { + return { + $pcDrawer: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1c = { + name: "Drawer", + "extends": script$1$O, + inheritAttrs: false, + emits: ["update:visible", "show", "after-show", "hide", "after-hide"], + data: /* @__PURE__ */ __name(function data() { + return { + containerVisible: this.visible + }; + }, "data"), + container: null, + mask: null, + content: null, + headerContainer: null, + footerContainer: null, + closeButton: null, + outsideClickListener: null, + documentKeydownListener: null, + watch: { + dismissable: /* @__PURE__ */ __name(function dismissable(newValue) { + if (newValue) { + this.enableDocumentSettings(); + } else { + this.disableDocumentSettings(); + } + }, "dismissable") + }, + updated: /* @__PURE__ */ __name(function updated() { + if (this.visible) { + this.containerVisible = this.visible; + } + }, "updated"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount() { + this.disableDocumentSettings(); + if (this.mask && this.autoZIndex) { + ZIndex.clear(this.mask); + } + this.container = null; + this.mask = null; + }, "beforeUnmount"), + methods: { + hide: /* @__PURE__ */ __name(function hide() { + this.$emit("update:visible", false); + }, "hide"), + onEnter: /* @__PURE__ */ __name(function onEnter() { + this.$emit("show"); + this.focus(); + this.bindDocumentKeyDownListener(); + if (this.autoZIndex) { + ZIndex.set("modal", this.mask, this.baseZIndex || this.$primevue.config.zIndex.modal); + } + }, "onEnter"), + onAfterEnter: /* @__PURE__ */ __name(function onAfterEnter() { + this.enableDocumentSettings(); + this.$emit("after-show"); + }, "onAfterEnter"), + onBeforeLeave: /* @__PURE__ */ __name(function onBeforeLeave() { + if (this.modal) { + !this.isUnstyled && addClass(this.mask, "p-overlay-mask-leave"); + } + }, "onBeforeLeave"), + onLeave: /* @__PURE__ */ __name(function onLeave() { + this.$emit("hide"); + }, "onLeave"), + onAfterLeave: /* @__PURE__ */ __name(function onAfterLeave() { + if (this.autoZIndex) { + ZIndex.clear(this.mask); + } + this.unbindDocumentKeyDownListener(); + this.containerVisible = false; + this.disableDocumentSettings(); + this.$emit("after-hide"); + }, "onAfterLeave"), + onMaskClick: /* @__PURE__ */ __name(function onMaskClick(event2) { + if (this.dismissable && this.modal && this.mask === event2.target) { + this.hide(); + } + }, "onMaskClick"), + focus: /* @__PURE__ */ __name(function focus$1() { + var findFocusableElement = /* @__PURE__ */ __name(function findFocusableElement2(container) { + return container && container.querySelector("[autofocus]"); + }, "findFocusableElement"); + var focusTarget = this.$slots.header && findFocusableElement(this.headerContainer); + if (!focusTarget) { + focusTarget = this.$slots["default"] && findFocusableElement(this.container); + if (!focusTarget) { + focusTarget = this.$slots.footer && findFocusableElement(this.footerContainer); + if (!focusTarget) { + focusTarget = this.closeButton; + } + } + } + focusTarget && focus(focusTarget); + }, "focus$1"), + enableDocumentSettings: /* @__PURE__ */ __name(function enableDocumentSettings() { + if (this.dismissable && !this.modal) { + this.bindOutsideClickListener(); + } + if (this.blockScroll) { + blockBodyScroll(); + } + }, "enableDocumentSettings"), + disableDocumentSettings: /* @__PURE__ */ __name(function disableDocumentSettings() { + this.unbindOutsideClickListener(); + if (this.blockScroll) { + unblockBodyScroll(); + } + }, "disableDocumentSettings"), + onKeydown: /* @__PURE__ */ __name(function onKeydown(event2) { + if (event2.code === "Escape") { + this.hide(); + } + }, "onKeydown"), + containerRef: /* @__PURE__ */ __name(function containerRef(el) { + this.container = el; + }, "containerRef"), + maskRef: /* @__PURE__ */ __name(function maskRef(el) { + this.mask = el; + }, "maskRef"), + contentRef: /* @__PURE__ */ __name(function contentRef(el) { + this.content = el; + }, "contentRef"), + headerContainerRef: /* @__PURE__ */ __name(function headerContainerRef(el) { + this.headerContainer = el; + }, "headerContainerRef"), + footerContainerRef: /* @__PURE__ */ __name(function footerContainerRef(el) { + this.footerContainer = el; + }, "footerContainerRef"), + closeButtonRef: /* @__PURE__ */ __name(function closeButtonRef(el) { + this.closeButton = el ? el.$el : void 0; + }, "closeButtonRef"), + bindDocumentKeyDownListener: /* @__PURE__ */ __name(function bindDocumentKeyDownListener() { + if (!this.documentKeydownListener) { + this.documentKeydownListener = this.onKeydown; + document.addEventListener("keydown", this.documentKeydownListener); + } + }, "bindDocumentKeyDownListener"), + unbindDocumentKeyDownListener: /* @__PURE__ */ __name(function unbindDocumentKeyDownListener() { + if (this.documentKeydownListener) { + document.removeEventListener("keydown", this.documentKeydownListener); + this.documentKeydownListener = null; + } + }, "unbindDocumentKeyDownListener"), + bindOutsideClickListener: /* @__PURE__ */ __name(function bindOutsideClickListener() { + var _this = this; + if (!this.outsideClickListener) { + this.outsideClickListener = function(event2) { + if (_this.isOutsideClicked(event2)) { + _this.hide(); + } + }; + document.addEventListener("click", this.outsideClickListener); + } + }, "bindOutsideClickListener"), + unbindOutsideClickListener: /* @__PURE__ */ __name(function unbindOutsideClickListener() { + if (this.outsideClickListener) { + document.removeEventListener("click", this.outsideClickListener); + this.outsideClickListener = null; + } + }, "unbindOutsideClickListener"), + isOutsideClicked: /* @__PURE__ */ __name(function isOutsideClicked(event2) { + return this.container && !this.container.contains(event2.target); + }, "isOutsideClicked") + }, + computed: { + fullScreen: /* @__PURE__ */ __name(function fullScreen() { + return this.position === "full"; + }, "fullScreen"), + closeAriaLabel: /* @__PURE__ */ __name(function closeAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.close : void 0; + }, "closeAriaLabel") + }, + directives: { + focustrap: FocusTrap + }, + components: { + Button: script$1e, + Portal: script$1f, + TimesIcon: script$1g + } +}; +var _hoisted_1$v = ["aria-modal"]; +function render$13(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Button = resolveComponent("Button"); + var _component_Portal = resolveComponent("Portal"); + var _directive_focustrap = resolveDirective("focustrap"); + return openBlock(), createBlock(_component_Portal, null, { + "default": withCtx(function() { + return [$data.containerVisible ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: $options.maskRef, + onMousedown: _cache[0] || (_cache[0] = function() { + return $options.onMaskClick && $options.onMaskClick.apply($options, arguments); + }), + "class": _ctx.cx("mask"), + style: _ctx.sx("mask", true, { + position: _ctx.position, + modal: _ctx.modal + }) + }, _ctx.ptm("mask")), [createVNode(Transition, mergeProps({ + name: "p-drawer", + onEnter: $options.onEnter, + onAfterEnter: $options.onAfterEnter, + onBeforeLeave: $options.onBeforeLeave, + onLeave: $options.onLeave, + onAfterLeave: $options.onAfterLeave, + appear: "" + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [_ctx.visible ? withDirectives((openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: $options.containerRef, + "class": _ctx.cx("root"), + style: _ctx.sx("root"), + role: "complementary", + "aria-modal": _ctx.modal + }, _ctx.ptmi("root")), [_ctx.$slots.container ? renderSlot(_ctx.$slots, "container", { + key: 0, + closeCallback: $options.hide + }) : (openBlock(), createElementBlock(Fragment, { + key: 1 + }, [createBaseVNode("div", mergeProps({ + ref: $options.headerContainerRef, + "class": _ctx.cx("header") + }, _ctx.ptm("header")), [renderSlot(_ctx.$slots, "header", { + "class": normalizeClass(_ctx.cx("title")) + }, function() { + return [_ctx.header ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("title") + }, _ctx.ptm("title")), toDisplayString(_ctx.header), 17)) : createCommentVNode("", true)]; + }), _ctx.showCloseIcon ? (openBlock(), createBlock(_component_Button, mergeProps({ + key: 0, + ref: $options.closeButtonRef, + type: "button", + "class": _ctx.cx("pcCloseButton"), + "aria-label": $options.closeAriaLabel, + unstyled: _ctx.unstyled, + onClick: $options.hide + }, _ctx.closeButtonProps, { + pt: _ctx.ptm("pcCloseButton"), + "data-pc-group-section": "iconcontainer" + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "closeicon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.closeIcon ? "span" : "TimesIcon"), mergeProps({ + "class": [_ctx.closeIcon, slotProps["class"]] + }, _ctx.ptm("pcCloseButton")["icon"]), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "aria-label", "unstyled", "onClick", "pt"])) : createCommentVNode("", true)], 16), createBaseVNode("div", mergeProps({ + ref: $options.contentRef, + "class": _ctx.cx("content") + }, _ctx.ptm("content")), [renderSlot(_ctx.$slots, "default")], 16), _ctx.$slots.footer ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: $options.footerContainerRef, + "class": _ctx.cx("footer") + }, _ctx.ptm("footer")), [renderSlot(_ctx.$slots, "footer")], 16)) : createCommentVNode("", true)], 64))], 16, _hoisted_1$v)), [[_directive_focustrap]]) : createCommentVNode("", true)]; + }), + _: 3 + }, 16, ["onEnter", "onAfterEnter", "onBeforeLeave", "onLeave", "onAfterLeave"])], 16)) : createCommentVNode("", true)]; + }), + _: 3 + }); +} +__name(render$13, "render$13"); +script$1c.render = render$13; +const _sfc_main$6 = /* @__PURE__ */ defineComponent({ + __name: "RefreshButton", + props: /* @__PURE__ */ mergeModels({ + outlined: { type: Boolean, default: true }, + disabled: { type: Boolean }, + severity: { default: "secondary" } + }, { + "modelValue": { type: Boolean, ...{ required: true } }, + "modelModifiers": {} + }), + emits: /* @__PURE__ */ mergeModels(["refresh"], ["update:modelValue"]), + setup(__props) { + const props = __props; + const active3 = useModel(__props, "modelValue"); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(script$1e), { + class: "relative p-button-icon-only", + outlined: props.outlined, + severity: props.severity, + disabled: active3.value || props.disabled, + onClick: _cache[0] || (_cache[0] = (event2) => _ctx.$emit("refresh", event2)) + }, { + default: withCtx(() => [ + createBaseVNode("span", { + class: normalizeClass(["p-button-icon pi pi-refresh transition-all", { "opacity-0": active3.value }]), + "data-pc-section": "icon" + }, null, 2), + _cache[1] || (_cache[1] = createBaseVNode("span", { + class: "p-button-label", + "data-pc-section": "label" + }, " ", -1)), + withDirectives(createVNode(unref(script$1h), { class: "absolute w-1/2 h-1/2" }, null, 512), [ + [vShow, active3.value] + ]) + ]), + _: 1 + }, 8, ["outlined", "severity", "disabled"]); + }; + } +}); +const _sfc_main$5 = /* @__PURE__ */ defineComponent({ + __name: "StatusTag", + props: { + error: { type: Boolean }, + refreshing: { type: Boolean } + }, + setup(__props) { + const props = __props; + const icon2 = computed(() => { + if (props.refreshing) return PrimeIcons.QUESTION; + if (props.error) return PrimeIcons.TIMES; + return PrimeIcons.CHECK; + }); + const severity = computed(() => { + if (props.refreshing) return "info"; + if (props.error) return "danger"; + return "success"; + }); + const value2 = computed(() => { + if (props.refreshing) return t("maintenance.refreshing"); + if (props.error) return t("g.error"); + return t("maintenance.OK"); + }); + return (_ctx, _cache) => { + return openBlock(), createBlock(unref(script$1i), { + icon: icon2.value, + severity: severity.value, + value: value2.value + }, null, 8, ["icon", "severity", "value"]); + }; + } +}); +var PrimeVueDialogSymbol = Symbol(); +function useDialog() { + var PrimeVueDialog = inject(PrimeVueDialogSymbol); + if (!PrimeVueDialog) { + throw new Error("No PrimeVue Dialog provided!"); + } + return PrimeVueDialog; +} +__name(useDialog, "useDialog"); +var classes$L = { + root: "p-accordioncontent", + content: "p-accordioncontent-content" +}; +var AccordionContentStyle = BaseStyle.extend({ + name: "accordioncontent", + classes: classes$L +}); +var script$1$N = { + name: "BaseAccordionContent", + "extends": script$1d, + props: { + as: { + type: [String, Object], + "default": "DIV" + }, + asChild: { + type: Boolean, + "default": false + } + }, + style: AccordionContentStyle, + provide: /* @__PURE__ */ __name(function provide2() { + return { + $pcAccordionContent: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1b = { + name: "AccordionContent", + "extends": script$1$N, + inheritAttrs: false, + inject: ["$pcAccordion", "$pcAccordionPanel"], + computed: { + id: /* @__PURE__ */ __name(function id() { + return "".concat(this.$pcAccordion.id, "_accordioncontent_").concat(this.$pcAccordionPanel.value); + }, "id"), + ariaLabelledby: /* @__PURE__ */ __name(function ariaLabelledby() { + return "".concat(this.$pcAccordion.id, "_accordionheader_").concat(this.$pcAccordionPanel.value); + }, "ariaLabelledby"), + attrs: /* @__PURE__ */ __name(function attrs() { + return mergeProps(this.a11yAttrs, this.ptmi("root", this.ptParams)); + }, "attrs"), + a11yAttrs: /* @__PURE__ */ __name(function a11yAttrs() { + return { + id: this.id, + role: "region", + "aria-labelledby": this.ariaLabelledby, + "data-pc-name": "accordioncontent", + "data-p-active": this.$pcAccordionPanel.active + }; + }, "a11yAttrs"), + ptParams: /* @__PURE__ */ __name(function ptParams() { + return { + context: { + active: this.$pcAccordionPanel.active + } + }; + }, "ptParams") + } +}; +function render$12(_ctx, _cache, $props, $setup, $data, $options) { + return !_ctx.asChild ? (openBlock(), createBlock(Transition, mergeProps({ + key: 0, + name: "p-toggleable-content" + }, _ctx.ptm("transition", $options.ptParams)), { + "default": withCtx(function() { + return [($options.$pcAccordion.lazy ? $options.$pcAccordionPanel.active : true) ? withDirectives((openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({ + key: 0, + "class": _ctx.cx("root") + }, $options.attrs), { + "default": withCtx(function() { + return [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("content") + }, _ctx.ptm("content", $options.ptParams)), [renderSlot(_ctx.$slots, "default")], 16)]; + }), + _: 3 + }, 16, ["class"])), [[vShow, $options.$pcAccordion.lazy ? true : $options.$pcAccordionPanel.active]]) : createCommentVNode("", true)]; + }), + _: 3 + }, 16)) : renderSlot(_ctx.$slots, "default", { + key: 1, + "class": normalizeClass(_ctx.cx("root")), + active: $options.$pcAccordionPanel.active, + a11yAttrs: $options.a11yAttrs + }); +} +__name(render$12, "render$12"); +script$1b.render = render$12; +var classes$K = { + root: "p-accordionheader", + toggleicon: "p-accordionheader-toggle-icon" +}; +var AccordionHeaderStyle = BaseStyle.extend({ + name: "accordionheader", + classes: classes$K +}); +var script$1$M = { + name: "BaseAccordionHeader", + "extends": script$1d, + props: { + as: { + type: [String, Object], + "default": "BUTTON" + }, + asChild: { + type: Boolean, + "default": false + } + }, + style: AccordionHeaderStyle, + provide: /* @__PURE__ */ __name(function provide3() { + return { + $pcAccordionHeader: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1a = { + name: "AccordionHeader", + "extends": script$1$M, + inheritAttrs: false, + inject: ["$pcAccordion", "$pcAccordionPanel"], + methods: { + onFocus: /* @__PURE__ */ __name(function onFocus() { + this.$pcAccordion.selectOnFocus && this.changeActiveValue(); + }, "onFocus"), + onClick: /* @__PURE__ */ __name(function onClick() { + this.changeActiveValue(); + }, "onClick"), + onKeydown: /* @__PURE__ */ __name(function onKeydown2(event2) { + switch (event2.code) { + case "ArrowDown": + this.onArrowDownKey(event2); + break; + case "ArrowUp": + this.onArrowUpKey(event2); + break; + case "Home": + this.onHomeKey(event2); + break; + case "End": + this.onEndKey(event2); + break; + case "Enter": + case "NumpadEnter": + case "Space": + this.onEnterKey(event2); + break; + } + }, "onKeydown"), + onArrowDownKey: /* @__PURE__ */ __name(function onArrowDownKey(event2) { + var nextPanel = this.findNextPanel(this.findPanel(event2.currentTarget)); + nextPanel ? this.changeFocusedPanel(event2, nextPanel) : this.onHomeKey(event2); + event2.preventDefault(); + }, "onArrowDownKey"), + onArrowUpKey: /* @__PURE__ */ __name(function onArrowUpKey(event2) { + var prevPanel = this.findPrevPanel(this.findPanel(event2.currentTarget)); + prevPanel ? this.changeFocusedPanel(event2, prevPanel) : this.onEndKey(event2); + event2.preventDefault(); + }, "onArrowUpKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey(event2) { + var firstPanel = this.findFirstPanel(); + this.changeFocusedPanel(event2, firstPanel); + event2.preventDefault(); + }, "onHomeKey"), + onEndKey: /* @__PURE__ */ __name(function onEndKey(event2) { + var lastPanel = this.findLastPanel(); + this.changeFocusedPanel(event2, lastPanel); + event2.preventDefault(); + }, "onEndKey"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey(event2) { + this.changeActiveValue(); + event2.preventDefault(); + }, "onEnterKey"), + findPanel: /* @__PURE__ */ __name(function findPanel(headerElement) { + return headerElement === null || headerElement === void 0 ? void 0 : headerElement.closest('[data-pc-name="accordionpanel"]'); + }, "findPanel"), + findHeader: /* @__PURE__ */ __name(function findHeader(panelElement) { + return findSingle(panelElement, '[data-pc-name="accordionheader"]'); + }, "findHeader"), + findNextPanel: /* @__PURE__ */ __name(function findNextPanel(panelElement) { + var selfCheck = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + var element = selfCheck ? panelElement : panelElement.nextElementSibling; + return element ? getAttribute(element, "data-p-disabled") ? this.findNextPanel(element) : this.findHeader(element) : null; + }, "findNextPanel"), + findPrevPanel: /* @__PURE__ */ __name(function findPrevPanel(panelElement) { + var selfCheck = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + var element = selfCheck ? panelElement : panelElement.previousElementSibling; + return element ? getAttribute(element, "data-p-disabled") ? this.findPrevPanel(element) : this.findHeader(element) : null; + }, "findPrevPanel"), + findFirstPanel: /* @__PURE__ */ __name(function findFirstPanel() { + return this.findNextPanel(this.$pcAccordion.$el.firstElementChild, true); + }, "findFirstPanel"), + findLastPanel: /* @__PURE__ */ __name(function findLastPanel() { + return this.findPrevPanel(this.$pcAccordion.$el.lastElementChild, true); + }, "findLastPanel"), + changeActiveValue: /* @__PURE__ */ __name(function changeActiveValue() { + this.$pcAccordion.updateValue(this.$pcAccordionPanel.value); + }, "changeActiveValue"), + changeFocusedPanel: /* @__PURE__ */ __name(function changeFocusedPanel(event2, element) { + focus(this.findHeader(element)); + }, "changeFocusedPanel") + }, + computed: { + id: /* @__PURE__ */ __name(function id2() { + return "".concat(this.$pcAccordion.id, "_accordionheader_").concat(this.$pcAccordionPanel.value); + }, "id"), + ariaControls: /* @__PURE__ */ __name(function ariaControls() { + return "".concat(this.$pcAccordion.id, "_accordioncontent_").concat(this.$pcAccordionPanel.value); + }, "ariaControls"), + attrs: /* @__PURE__ */ __name(function attrs2() { + return mergeProps(this.asAttrs, this.a11yAttrs, this.ptmi("root", this.ptParams)); + }, "attrs"), + asAttrs: /* @__PURE__ */ __name(function asAttrs() { + return this.as === "BUTTON" ? { + type: "button", + disabled: this.$pcAccordionPanel.disabled + } : void 0; + }, "asAttrs"), + a11yAttrs: /* @__PURE__ */ __name(function a11yAttrs2() { + return { + id: this.id, + tabindex: this.$pcAccordion.tabindex, + "aria-expanded": this.$pcAccordionPanel.active, + "aria-controls": this.ariaControls, + "data-pc-name": "accordionheader", + "data-p-disabled": this.$pcAccordionPanel.disabled, + "data-p-active": this.$pcAccordionPanel.active, + onFocus: this.onFocus, + onKeydown: this.onKeydown + }; + }, "a11yAttrs"), + ptParams: /* @__PURE__ */ __name(function ptParams2() { + return { + context: { + active: this.$pcAccordionPanel.active + } + }; + }, "ptParams") + }, + components: { + ChevronUpIcon: script$1j, + ChevronDownIcon: script$1k + }, + directives: { + ripple: Ripple + } +}; +function render$11(_ctx, _cache, $props, $setup, $data, $options) { + var _directive_ripple = resolveDirective("ripple"); + return !_ctx.asChild ? withDirectives((openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({ + key: 0, + "class": _ctx.cx("root"), + onClick: $options.onClick + }, $options.attrs), { + "default": withCtx(function() { + return [renderSlot(_ctx.$slots, "default", { + active: $options.$pcAccordionPanel.active + }), renderSlot(_ctx.$slots, "toggleicon", { + active: $options.$pcAccordionPanel.active, + "class": normalizeClass(_ctx.cx("toggleicon")) + }, function() { + return [$options.$pcAccordionPanel.active ? (openBlock(), createBlock(resolveDynamicComponent($options.$pcAccordion.$slots.collapseicon ? $options.$pcAccordion.$slots.collapseicon : $options.$pcAccordion.collapseIcon ? "span" : "ChevronDownIcon"), mergeProps({ + key: 0, + "class": [$options.$pcAccordion.collapseIcon, _ctx.cx("toggleicon")], + "aria-hidden": "true" + }, _ctx.ptm("toggleicon", $options.ptParams)), null, 16, ["class"])) : (openBlock(), createBlock(resolveDynamicComponent($options.$pcAccordion.$slots.expandicon ? $options.$pcAccordion.$slots.expandicon : $options.$pcAccordion.expandIcon ? "span" : "ChevronUpIcon"), mergeProps({ + key: 1, + "class": [$options.$pcAccordion.expandIcon, _ctx.cx("toggleicon")], + "aria-hidden": "true" + }, _ctx.ptm("toggleicon", $options.ptParams)), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "onClick"])), [[_directive_ripple]]) : renderSlot(_ctx.$slots, "default", { + key: 1, + "class": normalizeClass(_ctx.cx("root")), + active: $options.$pcAccordionPanel.active, + a11yAttrs: $options.a11yAttrs, + onClick: $options.onClick + }); +} +__name(render$11, "render$11"); +script$1a.render = render$11; +var classes$J = { + root: /* @__PURE__ */ __name(function root2(_ref) { + var instance = _ref.instance, props = _ref.props; + return ["p-accordionpanel", { + "p-accordionpanel-active": instance.active, + "p-disabled": props.disabled + }]; + }, "root") +}; +var AccordionPanelStyle = BaseStyle.extend({ + name: "accordionpanel", + classes: classes$J +}); +var script$1$L = { + name: "BaseAccordionPanel", + "extends": script$1d, + props: { + value: { + type: [String, Number], + "default": void 0 + }, + disabled: { + type: Boolean, + "default": false + }, + as: { + type: [String, Object], + "default": "DIV" + }, + asChild: { + type: Boolean, + "default": false + } + }, + style: AccordionPanelStyle, + provide: /* @__PURE__ */ __name(function provide4() { + return { + $pcAccordionPanel: this, + $parentInstance: this + }; + }, "provide") +}; +var script$19 = { + name: "AccordionPanel", + "extends": script$1$L, + inheritAttrs: false, + inject: ["$pcAccordion"], + computed: { + active: /* @__PURE__ */ __name(function active() { + return this.$pcAccordion.isItemActive(this.value); + }, "active"), + attrs: /* @__PURE__ */ __name(function attrs3() { + return mergeProps(this.a11yAttrs, this.ptmi("root", this.ptParams)); + }, "attrs"), + a11yAttrs: /* @__PURE__ */ __name(function a11yAttrs3() { + return { + "data-pc-name": "accordionpanel", + "data-p-disabled": this.disabled, + "data-p-active": this.active + }; + }, "a11yAttrs"), + ptParams: /* @__PURE__ */ __name(function ptParams3() { + return { + context: { + active: this.active + } + }; + }, "ptParams") + } +}; +function render$10(_ctx, _cache, $props, $setup, $data, $options) { + return !_ctx.asChild ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.as), mergeProps({ + key: 0, + "class": _ctx.cx("root") + }, $options.attrs), { + "default": withCtx(function() { + return [renderSlot(_ctx.$slots, "default")]; + }), + _: 3 + }, 16, ["class"])) : renderSlot(_ctx.$slots, "default", { + key: 1, + "class": normalizeClass(_ctx.cx("root")), + active: $options.active, + a11yAttrs: $options.a11yAttrs + }); +} +__name(render$10, "render$10"); +script$19.render = render$10; +var theme$C = /* @__PURE__ */ __name(function theme2(_ref) { + var dt = _ref.dt; + return "\n.p-accordionpanel {\n display: flex;\n flex-direction: column;\n border-style: solid;\n border-width: ".concat(dt("accordion.panel.border.width"), ";\n border-color: ").concat(dt("accordion.panel.border.color"), ";\n}\n\n.p-accordionheader {\n all: unset;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: ").concat(dt("accordion.header.padding"), ";\n color: ").concat(dt("accordion.header.color"), ";\n background: ").concat(dt("accordion.header.background"), ";\n border-style: solid;\n border-width: ").concat(dt("accordion.header.border.width"), ";\n border-color: ").concat(dt("accordion.header.border.color"), ";\n font-weight: ").concat(dt("accordion.header.font.weight"), ";\n border-radius: ").concat(dt("accordion.header.border.radius"), ";\n transition: background ").concat(dt("accordion.transition.duration"), "; color ").concat(dt("accordion.transition.duration"), "color ").concat(dt("accordion.transition.duration"), ", outline-color ").concat(dt("accordion.transition.duration"), ", box-shadow ").concat(dt("accordion.transition.duration"), ";\n outline-color: transparent;\n}\n\n.p-accordionpanel:first-child > .p-accordionheader {\n border-width: ").concat(dt("accordion.header.first.border.width"), ";\n border-start-start-radius: ").concat(dt("accordion.header.first.top.border.radius"), ";\n border-start-end-radius: ").concat(dt("accordion.header.first.top.border.radius"), ";\n}\n\n.p-accordionpanel:last-child > .p-accordionheader {\n border-end-start-radius: ").concat(dt("accordion.header.last.bottom.border.radius"), ";\n border-end-end-radius: ").concat(dt("accordion.header.last.bottom.border.radius"), ";\n}\n\n.p-accordionpanel:last-child.p-accordionpanel-active > .p-accordionheader {\n border-end-start-radius: ").concat(dt("accordion.header.last.active.bottom.border.radius"), ";\n border-end-end-radius: ").concat(dt("accordion.header.last.active.bottom.border.radius"), ";\n}\n\n.p-accordionheader-toggle-icon {\n color: ").concat(dt("accordion.header.toggle.icon.color"), ";\n}\n\n.p-accordionpanel:not(.p-disabled) .p-accordionheader:focus-visible {\n box-shadow: ").concat(dt("accordion.header.focus.ring.shadow"), ";\n outline: ").concat(dt("accordion.header.focus.ring.width"), " ").concat(dt("accordion.header.focus.ring.style"), " ").concat(dt("accordion.header.focus.ring.color"), ";\n outline-offset: ").concat(dt("accordion.header.focus.ring.offset"), ";\n}\n\n.p-accordionpanel:not(.p-accordionpanel-active):not(.p-disabled) > .p-accordionheader:hover {\n background: ").concat(dt("accordion.header.hover.background"), ";\n color: ").concat(dt("accordion.header.hover.color"), ";\n}\n\n.p-accordionpanel:not(.p-accordionpanel-active):not(.p-disabled) .p-accordionheader:hover .p-accordionheader-toggle-icon {\n color: ").concat(dt("accordion.header.toggle.icon.hover.color"), ";\n}\n\n.p-accordionpanel:not(.p-disabled).p-accordionpanel-active > .p-accordionheader {\n background: ").concat(dt("accordion.header.active.background"), ";\n color: ").concat(dt("accordion.header.active.color"), ";\n}\n\n.p-accordionpanel:not(.p-disabled).p-accordionpanel-active > .p-accordionheader .p-accordionheader-toggle-icon {\n color: ").concat(dt("accordion.header.toggle.icon.active.color"), ";\n}\n\n.p-accordionpanel:not(.p-disabled).p-accordionpanel-active > .p-accordionheader:hover {\n background: ").concat(dt("accordion.header.active.hover.background"), ";\n color: ").concat(dt("accordion.header.active.hover.color"), ";\n}\n\n.p-accordionpanel:not(.p-disabled).p-accordionpanel-active > .p-accordionheader:hover .p-accordionheader-toggle-icon {\n color: ").concat(dt("accordion.header.toggle.icon.active.hover.color"), ";\n}\n\n.p-accordioncontent-content {\n border-style: solid;\n border-width: ").concat(dt("accordion.content.border.width"), ";\n border-color: ").concat(dt("accordion.content.border.color"), ";\n background-color: ").concat(dt("accordion.content.background"), ";\n color: ").concat(dt("accordion.content.color"), ";\n padding: ").concat(dt("accordion.content.padding"), ";\n}\n"); +}, "theme"); +var classes$I = { + root: "p-accordion p-component" +}; +var AccordionStyle = BaseStyle.extend({ + name: "accordion", + theme: theme$C, + classes: classes$I +}); +var script$1$K = { + name: "BaseAccordion", + "extends": script$1d, + props: { + value: { + type: [String, Number, Array], + "default": void 0 + }, + multiple: { + type: Boolean, + "default": false + }, + lazy: { + type: Boolean, + "default": false + }, + tabindex: { + type: Number, + "default": 0 + }, + selectOnFocus: { + type: Boolean, + "default": false + }, + expandIcon: { + type: String, + "default": void 0 + }, + collapseIcon: { + type: String, + "default": void 0 + }, + // @deprecated since v4. + activeIndex: { + type: [Number, Array], + "default": null + } + }, + style: AccordionStyle, + provide: /* @__PURE__ */ __name(function provide5() { + return { + $pcAccordion: this, + $parentInstance: this + }; + }, "provide") +}; +var script$18 = { + name: "Accordion", + "extends": script$1$K, + inheritAttrs: false, + emits: ["update:value", "update:activeIndex", "tab-open", "tab-close", "tab-click"], + data: /* @__PURE__ */ __name(function data2() { + return { + id: this.$attrs.id, + d_value: this.value + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + value: /* @__PURE__ */ __name(function value(newValue) { + this.d_value = newValue; + }, "value"), + activeIndex: { + immediate: true, + handler: /* @__PURE__ */ __name(function handler(newValue) { + if (this.hasAccordionTab) { + this.d_value = this.multiple ? newValue === null || newValue === void 0 ? void 0 : newValue.map(String) : newValue === null || newValue === void 0 ? void 0 : newValue.toString(); + } + }, "handler") + } + }, + mounted: /* @__PURE__ */ __name(function mounted() { + this.id = this.id || UniqueComponentId(); + }, "mounted"), + methods: { + isItemActive: /* @__PURE__ */ __name(function isItemActive(value2) { + var _this$d_value; + return this.multiple ? (_this$d_value = this.d_value) === null || _this$d_value === void 0 ? void 0 : _this$d_value.includes(value2) : this.d_value === value2; + }, "isItemActive"), + updateValue: /* @__PURE__ */ __name(function updateValue(newValue) { + var _this$d_value2; + var active3 = this.isItemActive(newValue); + if (this.multiple) { + if (active3) { + this.d_value = this.d_value.filter(function(v) { + return v !== newValue; + }); + } else { + if (this.d_value) this.d_value.push(newValue); + else this.d_value = [newValue]; + } + } else { + this.d_value = active3 ? null : newValue; + } + this.$emit("update:value", this.d_value); + this.$emit("update:activeIndex", this.multiple ? (_this$d_value2 = this.d_value) === null || _this$d_value2 === void 0 ? void 0 : _this$d_value2.map(Number) : Number(this.d_value)); + this.$emit(active3 ? "tab-close" : "tab-open", { + originalEvent: void 0, + index: Number(newValue) + }); + }, "updateValue"), + // @deprecated since v4. Use new structure instead. + isAccordionTab: /* @__PURE__ */ __name(function isAccordionTab(child) { + return child.type.name === "AccordionTab"; + }, "isAccordionTab"), + getTabProp: /* @__PURE__ */ __name(function getTabProp(tab, name4) { + return tab.props ? tab.props[name4] : void 0; + }, "getTabProp"), + getKey: /* @__PURE__ */ __name(function getKey(tab, index) { + return this.getTabProp(tab, "header") || index; + }, "getKey"), + getHeaderPT: /* @__PURE__ */ __name(function getHeaderPT(tab, index) { + var _this = this; + return { + root: mergeProps({ + onClick: /* @__PURE__ */ __name(function onClick11(event2) { + return _this.onTabClick(event2, index); + }, "onClick") + }, this.getTabProp(tab, "headerProps"), this.getTabPT(tab, "header", index)), + toggleicon: mergeProps(this.getTabProp(tab, "headeractionprops"), this.getTabPT(tab, "headeraction", index)) + }; + }, "getHeaderPT"), + getContentPT: /* @__PURE__ */ __name(function getContentPT(tab, index) { + return { + root: mergeProps(this.getTabProp(tab, "contentProps"), this.getTabPT(tab, "toggleablecontent", index)), + transition: this.getTabPT(tab, "transition", index), + content: this.getTabPT(tab, "content", index) + }; + }, "getContentPT"), + getTabPT: /* @__PURE__ */ __name(function getTabPT(tab, key, index) { + var count = this.tabs.length; + var tabMetaData = { + props: tab.props || {}, + parent: { + instance: this, + props: this.$props, + state: this.$data + }, + context: { + index, + count, + first: index === 0, + last: index === count - 1, + active: this.isItemActive("".concat(index)) + } + }; + return mergeProps(this.ptm("accordiontab.".concat(key), tabMetaData), this.ptmo(this.getTabProp(tab, "pt"), key, tabMetaData)); + }, "getTabPT"), + onTabClick: /* @__PURE__ */ __name(function onTabClick(event2, index) { + this.$emit("tab-click", { + originalEvent: event2, + index + }); + }, "onTabClick") + }, + computed: { + // @deprecated since v4. + tabs: /* @__PURE__ */ __name(function tabs() { + var _this2 = this; + return this.$slots["default"]().reduce(function(tabs2, child) { + if (_this2.isAccordionTab(child)) { + tabs2.push(child); + } else if (child.children && child.children instanceof Array) { + child.children.forEach(function(nestedChild) { + if (_this2.isAccordionTab(nestedChild)) { + tabs2.push(nestedChild); + } + }); + } + return tabs2; + }, []); + }, "tabs"), + hasAccordionTab: /* @__PURE__ */ __name(function hasAccordionTab() { + return this.tabs.length; + }, "hasAccordionTab") + }, + components: { + AccordionPanel: script$19, + AccordionHeader: script$1a, + AccordionContent: script$1b, + ChevronUpIcon: script$1j, + ChevronRightIcon: script$1l + } +}; +function render$$(_ctx, _cache, $props, $setup, $data, $options) { + var _component_AccordionHeader = resolveComponent("AccordionHeader"); + var _component_AccordionContent = resolveComponent("AccordionContent"); + var _component_AccordionPanel = resolveComponent("AccordionPanel"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [$options.hasAccordionTab ? (openBlock(true), createElementBlock(Fragment, { + key: 0 + }, renderList($options.tabs, function(tab, i) { + return openBlock(), createBlock(_component_AccordionPanel, { + key: $options.getKey(tab, i), + value: "".concat(i), + pt: { + root: $options.getTabPT(tab, "root", i) + }, + disabled: $options.getTabProp(tab, "disabled") + }, { + "default": withCtx(function() { + return [createVNode(_component_AccordionHeader, { + "class": normalizeClass($options.getTabProp(tab, "headerClass")), + pt: $options.getHeaderPT(tab, i) + }, { + toggleicon: withCtx(function(slotProps) { + return [slotProps.active ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.collapseicon ? _ctx.$slots.collapseicon : _ctx.collapseIcon ? "span" : "ChevronDownIcon"), mergeProps({ + key: 0, + "class": [_ctx.collapseIcon, slotProps["class"]], + "aria-hidden": "true", + ref_for: true + }, $options.getTabPT(tab, "headericon", i)), null, 16, ["class"])) : (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.expandicon ? _ctx.$slots.expandicon : _ctx.expandIcon ? "span" : "ChevronUpIcon"), mergeProps({ + key: 1, + "class": [_ctx.expandIcon, slotProps["class"]], + "aria-hidden": "true", + ref_for: true + }, $options.getTabPT(tab, "headericon", i)), null, 16, ["class"]))]; + }), + "default": withCtx(function() { + return [tab.children && tab.children.headericon ? (openBlock(), createBlock(resolveDynamicComponent(tab.children.headericon), { + key: 0, + isTabActive: $options.isItemActive("".concat(i)), + active: $options.isItemActive("".concat(i)), + index: i + }, null, 8, ["isTabActive", "active", "index"])) : createCommentVNode("", true), tab.props && tab.props.header ? (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + ref_for: true + }, $options.getTabPT(tab, "headertitle", i)), toDisplayString(tab.props.header), 17)) : createCommentVNode("", true), tab.children && tab.children.header ? (openBlock(), createBlock(resolveDynamicComponent(tab.children.header), { + key: 2 + })) : createCommentVNode("", true)]; + }), + _: 2 + }, 1032, ["class", "pt"]), createVNode(_component_AccordionContent, { + pt: $options.getContentPT(tab, i) + }, { + "default": withCtx(function() { + return [(openBlock(), createBlock(resolveDynamicComponent(tab)))]; + }), + _: 2 + }, 1032, ["pt"])]; + }), + _: 2 + }, 1032, ["value", "pt", "disabled"]); + }), 128)) : renderSlot(_ctx.$slots, "default", { + key: 1 + })], 16); +} +__name(render$$, "render$$"); +script$18.render = render$$; +var AccordionTabStyle = BaseStyle.extend({ + name: "accordiontab" +}); +var script$1$J = { + name: "BaseAccordionTab", + "extends": script$1d, + props: { + header: null, + headerStyle: null, + headerClass: null, + headerProps: null, + headerActionProps: null, + contentStyle: null, + contentClass: null, + contentProps: null, + disabled: Boolean + }, + style: AccordionTabStyle, + provide: /* @__PURE__ */ __name(function provide6() { + return { + $pcAccordionTab: this, + $parentInstance: this + }; + }, "provide") +}; +var script$17 = { + name: "AccordionTab", + "extends": script$1$J, + inheritAttrs: false, + mounted: /* @__PURE__ */ __name(function mounted2() { + console.warn("Deprecated since v4. Use the new structure of Accordion instead."); + }, "mounted") +}; +function render$_(_ctx, _cache, $props, $setup, $data, $options) { + return renderSlot(_ctx.$slots, "default"); +} +__name(render$_, "render$_"); +script$17.render = render$_; +var AnimateOnScrollStyle = BaseStyle.extend({ + name: "animateonscroll-directive" +}); +var BaseAnimateOnScroll = BaseDirective.extend({ + style: AnimateOnScrollStyle +}); +function _typeof$n(o) { + "@babel/helpers - typeof"; + return _typeof$n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$n(o); +} +__name(_typeof$n, "_typeof$n"); +function ownKeys$k(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$k, "ownKeys$k"); +function _objectSpread$k(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$k(Object(t2), true).forEach(function(r2) { + _defineProperty$l(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$k(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$k, "_objectSpread$k"); +function _defineProperty$l(e, r, t2) { + return (r = _toPropertyKey$l(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$l, "_defineProperty$l"); +function _toPropertyKey$l(t2) { + var i = _toPrimitive$l(t2, "string"); + return "symbol" == _typeof$n(i) ? i : i + ""; +} +__name(_toPropertyKey$l, "_toPropertyKey$l"); +function _toPrimitive$l(t2, r) { + if ("object" != _typeof$n(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$n(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$l, "_toPrimitive$l"); +function _slicedToArray$1(r, e) { + return _arrayWithHoles$1(r) || _iterableToArrayLimit$1(r, e) || _unsupportedIterableToArray$f(r, e) || _nonIterableRest$1(); +} +__name(_slicedToArray$1, "_slicedToArray$1"); +function _nonIterableRest$1() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableRest$1, "_nonIterableRest$1"); +function _unsupportedIterableToArray$f(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$f(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$f(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$f, "_unsupportedIterableToArray$f"); +function _arrayLikeToArray$f(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$f, "_arrayLikeToArray$f"); +function _iterableToArrayLimit$1(r, l) { + var t2 = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (null != t2) { + var e, n, i, u, a = [], f = true, o = false; + try { + if (i = (t2 = t2.call(r)).next, 0 === l) ; + else for (; !(f = (e = i.call(t2)).done) && (a.push(e.value), a.length !== l); f = true) ; + } catch (r2) { + o = true, n = r2; + } finally { + try { + if (!f && null != t2["return"] && (u = t2["return"](), Object(u) !== u)) return; + } finally { + if (o) throw n; + } + } + return a; + } +} +__name(_iterableToArrayLimit$1, "_iterableToArrayLimit$1"); +function _arrayWithHoles$1(r) { + if (Array.isArray(r)) return r; +} +__name(_arrayWithHoles$1, "_arrayWithHoles$1"); +var AnimateOnScroll = BaseAnimateOnScroll.extend("animateonscroll", { + created: /* @__PURE__ */ __name(function created() { + this.$value = this.$value || {}; + this.$el.style.opacity = this.$value.enterClass ? "0" : ""; + }, "created"), + mounted: /* @__PURE__ */ __name(function mounted3() { + this.$el.setAttribute("data-pd-animateonscroll", true); + this.bindIntersectionObserver(); + }, "mounted"), + unmounted: /* @__PURE__ */ __name(function unmounted() { + this.unbindAnimationEvents(); + this.unbindIntersectionObserver(); + }, "unmounted"), + observer: void 0, + resetObserver: void 0, + isObserverActive: false, + animationState: void 0, + animationEndListener: void 0, + methods: { + bindAnimationEvents: /* @__PURE__ */ __name(function bindAnimationEvents() { + var _this = this; + if (!this.animationEndListener) { + this.animationEndListener = function() { + removeClass(_this.$el, [_this.$value.enterClass, _this.$value.leaveClass]); + !_this.$modifiers.once && _this.resetObserver.observe(_this.$el); + _this.unbindAnimationEvents(); + }; + this.$el.addEventListener("animationend", this.animationEndListener); + } + }, "bindAnimationEvents"), + bindIntersectionObserver: /* @__PURE__ */ __name(function bindIntersectionObserver() { + var _this2 = this; + var _this$$value = this.$value, root35 = _this$$value.root, rootMargin = _this$$value.rootMargin, _this$$value$threshol = _this$$value.threshold, threshold = _this$$value$threshol === void 0 ? 0.5 : _this$$value$threshol; + var options4 = { + root: root35, + rootMargin, + threshold + }; + this.observer = new IntersectionObserver(function(_ref) { + var _ref2 = _slicedToArray$1(_ref, 1), entry = _ref2[0]; + if (_this2.isObserverActive) { + if (entry.boundingClientRect.top > 0) { + entry.isIntersecting ? _this2.enter() : _this2.leave(); + } + } else if (entry.isIntersecting) { + _this2.enter(); + } + _this2.isObserverActive = true; + }, options4); + setTimeout(function() { + return _this2.observer.observe(_this2.$el); + }, 0); + this.resetObserver = new IntersectionObserver(function(_ref3) { + var _ref4 = _slicedToArray$1(_ref3, 1), entry = _ref4[0]; + if (entry.boundingClientRect.top > 0 && !entry.isIntersecting) { + _this2.$el.style.opacity = _this2.$value.enterClass ? "0" : ""; + removeClass(_this2.$el, [_this2.$value.enterClass, _this2.$value.leaveClass]); + _this2.resetObserver.unobserve(_this2.$el); + } + _this2.animationState = void 0; + }, _objectSpread$k(_objectSpread$k({}, options4), {}, { + threshold: 0 + })); + }, "bindIntersectionObserver"), + enter: /* @__PURE__ */ __name(function enter() { + if (this.animationState !== "enter" && this.$value.enterClass) { + this.$el.style.opacity = ""; + removeClass(this.$el, this.$value.leaveClass); + addClass(this.$el, this.$value.enterClass); + this.$modifiers.once && this.unbindIntersectionObserver(this.$el); + this.bindAnimationEvents(); + this.animationState = "enter"; + } + }, "enter"), + leave: /* @__PURE__ */ __name(function leave() { + if (this.animationState !== "leave" && this.$value.leaveClass) { + this.$el.style.opacity = this.$value.enterClass ? "0" : ""; + removeClass(this.$el, this.$value.enterClass); + addClass(this.$el, this.$value.leaveClass); + this.bindAnimationEvents(); + this.animationState = "leave"; + } + }, "leave"), + unbindAnimationEvents: /* @__PURE__ */ __name(function unbindAnimationEvents() { + if (this.animationEndListener) { + this.$el.removeEventListener("animationend", this.animationEndListener); + this.animationEndListener = void 0; + } + }, "unbindAnimationEvents"), + unbindIntersectionObserver: /* @__PURE__ */ __name(function unbindIntersectionObserver() { + var _this$observer, _this$resetObserver; + (_this$observer = this.observer) === null || _this$observer === void 0 || _this$observer.unobserve(this.$el); + (_this$resetObserver = this.resetObserver) === null || _this$resetObserver === void 0 || _this$resetObserver.unobserve(this.$el); + this.isObserverActive = false; + }, "unbindIntersectionObserver") + } +}); +var theme$B = /* @__PURE__ */ __name(function theme3(_ref) { + var dt = _ref.dt; + return "\n.p-avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ".concat(dt("avatar.width"), ";\n height: ").concat(dt("avatar.height"), ";\n font-size: ").concat(dt("avatar.font.size"), ";\n background: ").concat(dt("avatar.background"), ";\n color: ").concat(dt("avatar.color"), ";\n border-radius: ").concat(dt("avatar.border.radius"), ";\n}\n\n.p-avatar-image {\n background: transparent;\n}\n\n.p-avatar-circle {\n border-radius: 50%;\n}\n\n.p-avatar-circle img {\n border-radius: 50%;\n}\n\n.p-avatar-icon {\n font-size: ").concat(dt("avatar.icon.size"), ";\n width: ").concat(dt("avatar.icon.size"), ";\n height: ").concat(dt("avatar.icon.size"), ";\n}\n\n.p-avatar img {\n width: 100%;\n height: 100%;\n}\n\n.p-avatar-lg {\n width: ").concat(dt("avatar.lg.width"), ";\n height: ").concat(dt("avatar.lg.width"), ";\n font-size: ").concat(dt("avatar.lg.font.size"), ";\n}\n\n.p-avatar-lg .p-avatar-icon {\n font-size: ").concat(dt("avatar.lg.icon.size"), ";\n width: ").concat(dt("avatar.lg.icon.size"), ";\n height: ").concat(dt("avatar.lg.icon.size"), ";\n}\n\n.p-avatar-xl {\n width: ").concat(dt("avatar.xl.width"), ";\n height: ").concat(dt("avatar.xl.width"), ";\n font-size: ").concat(dt("avatar.xl.font.size"), ";\n}\n\n.p-avatar-xl .p-avatar-icon {\n font-size: ").concat(dt("avatar.xl.icon.size"), ";\n width: ").concat(dt("avatar.xl.icon.size"), ";\n height: ").concat(dt("avatar.xl.icon.size"), ";\n}\n\n.p-avatar-group {\n display: flex;\n align-items: center;\n}\n\n.p-avatar-group .p-avatar + .p-avatar {\n margin-inline-start: ").concat(dt("avatar.group.offset"), ";\n}\n\n.p-avatar-group .p-avatar {\n border: 2px solid ").concat(dt("avatar.group.border.color"), ";\n}\n\n.p-avatar-group .p-avatar-lg + .p-avatar-lg {\n margin-inline-start: ").concat(dt("avatar.lg.group.offset"), ";\n}\n\n.p-avatar-group .p-avatar-xl + .p-avatar-xl {\n margin-inline-start: ").concat(dt("avatar.xl.group.offset"), ";\n}\n"); +}, "theme"); +var classes$H = { + root: /* @__PURE__ */ __name(function root3(_ref2) { + var props = _ref2.props; + return ["p-avatar p-component", { + "p-avatar-image": props.image != null, + "p-avatar-circle": props.shape === "circle", + "p-avatar-lg": props.size === "large", + "p-avatar-xl": props.size === "xlarge" + }]; + }, "root"), + label: "p-avatar-label", + icon: "p-avatar-icon" +}; +var AvatarStyle = BaseStyle.extend({ + name: "avatar", + theme: theme$B, + classes: classes$H +}); +var script$1$I = { + name: "BaseAvatar", + "extends": script$1d, + props: { + label: { + type: String, + "default": null + }, + icon: { + type: String, + "default": null + }, + image: { + type: String, + "default": null + }, + size: { + type: String, + "default": "normal" + }, + shape: { + type: String, + "default": "square" + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + } + }, + style: AvatarStyle, + provide: /* @__PURE__ */ __name(function provide7() { + return { + $pcAvatar: this, + $parentInstance: this + }; + }, "provide") +}; +var script$16 = { + name: "Avatar", + "extends": script$1$I, + inheritAttrs: false, + emits: ["error"], + methods: { + onError: /* @__PURE__ */ __name(function onError(event2) { + this.$emit("error", event2); + }, "onError") + } +}; +var _hoisted_1$u = ["aria-labelledby", "aria-label"]; +var _hoisted_2$m = ["src", "alt"]; +function render$Z(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root"), + "aria-labelledby": _ctx.ariaLabelledby, + "aria-label": _ctx.ariaLabel + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default", {}, function() { + return [_ctx.label ? (openBlock(), createElementBlock("span", mergeProps({ + key: 0, + "class": _ctx.cx("label") + }, _ctx.ptm("label")), toDisplayString(_ctx.label), 17)) : _ctx.$slots.icon ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.icon), { + key: 1, + "class": normalizeClass(_ctx.cx("icon")) + }, null, 8, ["class"])) : _ctx.icon ? (openBlock(), createElementBlock("span", mergeProps({ + key: 2, + "class": [_ctx.cx("icon"), _ctx.icon] + }, _ctx.ptm("icon")), null, 16)) : _ctx.image ? (openBlock(), createElementBlock("img", mergeProps({ + key: 3, + src: _ctx.image, + alt: _ctx.ariaLabel, + onError: _cache[0] || (_cache[0] = function() { + return $options.onError && $options.onError.apply($options, arguments); + }) + }, _ctx.ptm("image")), null, 16, _hoisted_2$m)) : createCommentVNode("", true)]; + })], 16, _hoisted_1$u); +} +__name(render$Z, "render$Z"); +script$16.render = render$Z; +var classes$G = { + root: "p-avatar-group p-component" +}; +var AvatarGroupStyle = BaseStyle.extend({ + name: "avatargroup", + classes: classes$G +}); +var script$1$H = { + name: "BaseAvatarGroup", + "extends": script$1d, + style: AvatarGroupStyle, + provide: /* @__PURE__ */ __name(function provide8() { + return { + $pcAvatarGroup: this, + $parentInstance: this + }; + }, "provide") +}; +var script$15 = { + name: "AvatarGroup", + "extends": script$1$H, + inheritAttrs: false +}; +function render$Y(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default")], 16); +} +__name(render$Y, "render$Y"); +script$15.render = render$Y; +var classes$F = { + root: "p-badge p-component" +}; +var BadgeDirectiveStyle = BaseStyle.extend({ + name: "badge-directive", + classes: classes$F +}); +var BaseBadgeDirective = BaseDirective.extend({ + style: BadgeDirectiveStyle +}); +function _typeof$m(o) { + "@babel/helpers - typeof"; + return _typeof$m = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$m(o); +} +__name(_typeof$m, "_typeof$m"); +function ownKeys$j(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$j, "ownKeys$j"); +function _objectSpread$j(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$j(Object(t2), true).forEach(function(r2) { + _defineProperty$k(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$j(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$j, "_objectSpread$j"); +function _defineProperty$k(e, r, t2) { + return (r = _toPropertyKey$k(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$k, "_defineProperty$k"); +function _toPropertyKey$k(t2) { + var i = _toPrimitive$k(t2, "string"); + return "symbol" == _typeof$m(i) ? i : i + ""; +} +__name(_toPropertyKey$k, "_toPropertyKey$k"); +function _toPrimitive$k(t2, r) { + if ("object" != _typeof$m(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$m(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$k, "_toPrimitive$k"); +var BadgeDirective = BaseBadgeDirective.extend("badge", { + mounted: /* @__PURE__ */ __name(function mounted4(el, binding) { + console.warn("Deprecated since v4. Use OverlayBadge component instead."); + var id4 = UniqueComponentId() + "_badge"; + var badge = createElement("span", _defineProperty$k(_defineProperty$k({ + id: id4, + "class": !this.isUnstyled() && this.cx("root") + }, this.$attrSelector, ""), "p-bind", this.ptm("root", { + context: _objectSpread$j(_objectSpread$j({}, binding.modifiers), {}, { + nogutter: String(binding.value).length === 1, + dot: binding.value == null + }) + }))); + el.$_pbadgeId = badge.getAttribute("id"); + for (var modifier in binding.modifiers) { + !this.isUnstyled() && addClass(badge, "p-badge-" + modifier); + } + if (binding.value != null) { + if (_typeof$m(binding.value) === "object") el.$_badgeValue = binding.value.value; + else el.$_badgeValue = binding.value; + badge.appendChild(document.createTextNode(el.$_badgeValue)); + if (String(el.$_badgeValue).length === 1 && !this.isUnstyled()) { + !this.isUnstyled() && addClass(badge, "p-badge-circle"); + } + } else { + !this.isUnstyled() && addClass(badge, "p-badge-dot"); + } + el.setAttribute("data-pd-badge", true); + !this.isUnstyled() && addClass(el, "p-overlay-badge"); + el.setAttribute("data-p-overlay-badge", "true"); + el.appendChild(badge); + this.$el = badge; + }, "mounted"), + updated: /* @__PURE__ */ __name(function updated2(el, binding) { + !this.isUnstyled() && addClass(el, "p-overlay-badge"); + el.setAttribute("data-p-overlay-badge", "true"); + if (binding.oldValue !== binding.value) { + var badge = document.getElementById(el.$_pbadgeId); + if (_typeof$m(binding.value) === "object") el.$_badgeValue = binding.value.value; + else el.$_badgeValue = binding.value; + if (!this.isUnstyled()) { + if (el.$_badgeValue) { + if (hasClass(badge, "p-badge-dot")) removeClass(badge, "p-badge-dot"); + if (el.$_badgeValue.length === 1) addClass(badge, "p-badge-circle"); + else removeClass(badge, "p-badge-circle"); + } else if (!el.$_badgeValue && !hasClass(badge, "p-badge-dot")) { + addClass(badge, "p-badge-dot"); + } + } + badge.innerHTML = ""; + badge.appendChild(document.createTextNode(el.$_badgeValue)); + } + }, "updated") +}); +var theme$A = /* @__PURE__ */ __name(function theme4(_ref) { + var dt = _ref.dt; + return "\n.p-breadcrumb {\n background: ".concat(dt("breadcrumb.background"), ";\n padding: ").concat(dt("breadcrumb.padding"), ";\n overflow-x: auto;\n}\n\n.p-breadcrumb-list {\n margin: 0;\n padding: 0;\n list-style-type: none;\n display: flex;\n align-items: center;\n flex-wrap: nowrap;\n gap: ").concat(dt("breadcrumb.gap"), ";\n}\n\n.p-breadcrumb-separator {\n display: flex;\n align-items: center;\n color: ").concat(dt("breadcrumb.separator.color"), ";\n}\n\n.p-breadcrumb-separator-icon:dir(rtl) {\n transform: rotate(180deg);\n}\n\n.p-breadcrumb::-webkit-scrollbar {\n display: none;\n}\n\n.p-breadcrumb-item-link {\n text-decoration: none;\n display: flex;\n align-items: center;\n gap: ").concat(dt("breadcrumb.item.gap"), ";\n transition: background ").concat(dt("breadcrumb.transition.duration"), ", color ").concat(dt("breadcrumb.transition.duration"), ", outline-color ").concat(dt("breadcrumb.transition.duration"), ", box-shadow ").concat(dt("breadcrumb.transition.duration"), ";\n border-radius: ").concat(dt("breadcrumb.item.border.radius"), ";\n outline-color: transparent;\n color: ").concat(dt("breadcrumb.item.color"), ";\n}\n\n.p-breadcrumb-item-link:focus-visible {\n box-shadow: ").concat(dt("breadcrumb.item.focus.ring.shadow"), ";\n outline: ").concat(dt("breadcrumb.item.focus.ring.width"), " ").concat(dt("breadcrumb.item.focus.ring.style"), " ").concat(dt("breadcrumb.item.focus.ring.color"), ";\n outline-offset: ").concat(dt("breadcrumb.item.focus.ring.offset"), ";\n}\n\n.p-breadcrumb-item-link:hover .p-breadcrumb-item-label {\n color: ").concat(dt("breadcrumb.item.hover.color"), ";\n}\n\n.p-breadcrumb-item-label {\n transition: inherit;\n}\n\n.p-breadcrumb-item-icon {\n color: ").concat(dt("breadcrumb.item.icon.color"), ";\n transition: inherit;\n}\n\n.p-breadcrumb-item-link:hover .p-breadcrumb-item-icon {\n color: ").concat(dt("breadcrumb.item.icon.hover.color"), ";\n}\n"); +}, "theme"); +var classes$E = { + root: "p-breadcrumb p-component", + list: "p-breadcrumb-list", + homeItem: "p-breadcrumb-home-item", + separator: "p-breadcrumb-separator", + separatorIcon: "p-breadcrumb-separator-icon", + item: /* @__PURE__ */ __name(function item(_ref2) { + var instance = _ref2.instance; + return ["p-breadcrumb-item", { + "p-disabled": instance.disabled() + }]; + }, "item"), + itemLink: "p-breadcrumb-item-link", + itemIcon: "p-breadcrumb-item-icon", + itemLabel: "p-breadcrumb-item-label" +}; +var BreadcrumbStyle = BaseStyle.extend({ + name: "breadcrumb", + theme: theme$A, + classes: classes$E +}); +var script$2$9 = { + name: "BaseBreadcrumb", + "extends": script$1d, + props: { + model: { + type: Array, + "default": null + }, + home: { + type: null, + "default": null + } + }, + style: BreadcrumbStyle, + provide: /* @__PURE__ */ __name(function provide9() { + return { + $pcBreadcrumb: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1$G = { + name: "BreadcrumbItem", + hostName: "Breadcrumb", + "extends": script$1d, + props: { + item: null, + templates: null, + index: null + }, + methods: { + onClick: /* @__PURE__ */ __name(function onClick2(event2) { + if (this.item.command) { + this.item.command({ + originalEvent: event2, + item: this.item + }); + } + }, "onClick"), + visible: /* @__PURE__ */ __name(function visible() { + return typeof this.item.visible === "function" ? this.item.visible() : this.item.visible !== false; + }, "visible"), + disabled: /* @__PURE__ */ __name(function disabled() { + return typeof this.item.disabled === "function" ? this.item.disabled() : this.item.disabled; + }, "disabled"), + label: /* @__PURE__ */ __name(function label() { + return typeof this.item.label === "function" ? this.item.label() : this.item.label; + }, "label"), + isCurrentUrl: /* @__PURE__ */ __name(function isCurrentUrl() { + var _this$item = this.item, to = _this$item.to, url = _this$item.url; + var lastPath = typeof window !== "undefined" ? window.location.pathname : ""; + return to === lastPath || url === lastPath ? "page" : void 0; + }, "isCurrentUrl") + }, + computed: { + ptmOptions: /* @__PURE__ */ __name(function ptmOptions() { + return { + context: { + item: this.item, + index: this.index + } + }; + }, "ptmOptions"), + getMenuItemProps: /* @__PURE__ */ __name(function getMenuItemProps() { + var _this = this; + return { + action: mergeProps({ + "class": this.cx("itemLink"), + "aria-current": this.isCurrentUrl(), + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return _this.onClick($event); + }, "onClick") + }, this.ptm("itemLink", this.ptmOptions)), + icon: mergeProps({ + "class": [this.cx("icon"), this.item.icon] + }, this.ptm("icon", this.ptmOptions)), + label: mergeProps({ + "class": this.cx("label") + }, this.ptm("label", this.ptmOptions)) + }; + }, "getMenuItemProps") + } +}; +var _hoisted_1$t = ["href", "target", "aria-current"]; +function render$1$9(_ctx, _cache, $props, $setup, $data, $options) { + return $options.visible() ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + "class": [_ctx.cx("item"), $props.item["class"]] + }, _ctx.ptm("item", $options.ptmOptions)), [!$props.templates.item ? (openBlock(), createElementBlock("a", mergeProps({ + key: 0, + href: $props.item.url || "#", + "class": _ctx.cx("itemLink"), + target: $props.item.target, + "aria-current": $options.isCurrentUrl(), + onClick: _cache[0] || (_cache[0] = function() { + return $options.onClick && $options.onClick.apply($options, arguments); + }) + }, _ctx.ptm("itemLink", $options.ptmOptions)), [$props.templates && $props.templates.itemicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.itemicon), { + key: 0, + item: $props.item, + "class": normalizeClass(_ctx.cx("itemIcon", $options.ptmOptions)) + }, null, 8, ["item", "class"])) : $props.item.icon ? (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + "class": [_ctx.cx("itemIcon"), $props.item.icon] + }, _ctx.ptm("itemIcon", $options.ptmOptions)), null, 16)) : createCommentVNode("", true), $props.item.label ? (openBlock(), createElementBlock("span", mergeProps({ + key: 2, + "class": _ctx.cx("itemLabel") + }, _ctx.ptm("itemLabel", $options.ptmOptions)), toDisplayString($options.label()), 17)) : createCommentVNode("", true)], 16, _hoisted_1$t)) : (openBlock(), createBlock(resolveDynamicComponent($props.templates.item), { + key: 1, + item: $props.item, + label: $options.label(), + props: $options.getMenuItemProps + }, null, 8, ["item", "label", "props"]))], 16)) : createCommentVNode("", true); +} +__name(render$1$9, "render$1$9"); +script$1$G.render = render$1$9; +var script$14 = { + name: "Breadcrumb", + "extends": script$2$9, + inheritAttrs: false, + components: { + BreadcrumbItem: script$1$G, + ChevronRightIcon: script$1l + } +}; +function render$X(_ctx, _cache, $props, $setup, $data, $options) { + var _component_BreadcrumbItem = resolveComponent("BreadcrumbItem"); + var _component_ChevronRightIcon = resolveComponent("ChevronRightIcon"); + return openBlock(), createElementBlock("nav", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [createBaseVNode("ol", mergeProps({ + "class": _ctx.cx("list") + }, _ctx.ptm("list")), [_ctx.home ? (openBlock(), createBlock(_component_BreadcrumbItem, mergeProps({ + key: 0, + item: _ctx.home, + "class": _ctx.cx("homeItem"), + templates: _ctx.$slots, + pt: _ctx.pt, + unstyled: _ctx.unstyled + }, _ctx.ptm("homeItem")), null, 16, ["item", "class", "templates", "pt", "unstyled"])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.model, function(item8, i) { + return openBlock(), createElementBlock(Fragment, { + key: item8.label + "_" + i + }, [_ctx.home || i !== 0 ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + "class": _ctx.cx("separator"), + ref_for: true + }, _ctx.ptm("separator")), [renderSlot(_ctx.$slots, "separator", {}, function() { + return [createVNode(_component_ChevronRightIcon, mergeProps({ + "aria-hidden": "true", + "class": _ctx.cx("separatorIcon"), + ref_for: true + }, _ctx.ptm("separatorIcon")), null, 16, ["class"])]; + })], 16)) : createCommentVNode("", true), createVNode(_component_BreadcrumbItem, { + item: item8, + index: i, + templates: _ctx.$slots, + pt: _ctx.pt, + unstyled: _ctx.unstyled + }, null, 8, ["item", "index", "templates", "pt", "unstyled"])], 64); + }), 128))], 16)], 16); +} +__name(render$X, "render$X"); +script$14.render = render$X; +var script$13 = { + name: "CalendarIcon", + "extends": script$1m +}; +function render$W(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + d: "M10.7838 1.51351H9.83783V0.567568C9.83783 0.417039 9.77804 0.272676 9.6716 0.166237C9.56516 0.0597971 9.42079 0 9.27027 0C9.11974 0 8.97538 0.0597971 8.86894 0.166237C8.7625 0.272676 8.7027 0.417039 8.7027 0.567568V1.51351H5.29729V0.567568C5.29729 0.417039 5.2375 0.272676 5.13106 0.166237C5.02462 0.0597971 4.88025 0 4.72973 0C4.5792 0 4.43484 0.0597971 4.3284 0.166237C4.22196 0.272676 4.16216 0.417039 4.16216 0.567568V1.51351H3.21621C2.66428 1.51351 2.13494 1.73277 1.74467 2.12305C1.35439 2.51333 1.13513 3.04266 1.13513 3.59459V11.9189C1.13513 12.4709 1.35439 13.0002 1.74467 13.3905C2.13494 13.7807 2.66428 14 3.21621 14H10.7838C11.3357 14 11.865 13.7807 12.2553 13.3905C12.6456 13.0002 12.8649 12.4709 12.8649 11.9189V3.59459C12.8649 3.04266 12.6456 2.51333 12.2553 2.12305C11.865 1.73277 11.3357 1.51351 10.7838 1.51351ZM3.21621 2.64865H4.16216V3.59459C4.16216 3.74512 4.22196 3.88949 4.3284 3.99593C4.43484 4.10237 4.5792 4.16216 4.72973 4.16216C4.88025 4.16216 5.02462 4.10237 5.13106 3.99593C5.2375 3.88949 5.29729 3.74512 5.29729 3.59459V2.64865H8.7027V3.59459C8.7027 3.74512 8.7625 3.88949 8.86894 3.99593C8.97538 4.10237 9.11974 4.16216 9.27027 4.16216C9.42079 4.16216 9.56516 4.10237 9.6716 3.99593C9.77804 3.88949 9.83783 3.74512 9.83783 3.59459V2.64865H10.7838C11.0347 2.64865 11.2753 2.74831 11.4527 2.92571C11.6301 3.10311 11.7297 3.34371 11.7297 3.59459V5.67568H2.27027V3.59459C2.27027 3.34371 2.36993 3.10311 2.54733 2.92571C2.72473 2.74831 2.96533 2.64865 3.21621 2.64865ZM10.7838 12.8649H3.21621C2.96533 12.8649 2.72473 12.7652 2.54733 12.5878C2.36993 12.4104 2.27027 12.1698 2.27027 11.9189V6.81081H11.7297V11.9189C11.7297 12.1698 11.6301 12.4104 11.4527 12.5878C11.2753 12.7652 11.0347 12.8649 10.7838 12.8649Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$W, "render$W"); +script$13.render = render$W; +var theme$z = /* @__PURE__ */ __name(function theme5(_ref) { + var dt = _ref.dt; + return "\n.p-datepicker {\n display: inline-flex;\n max-width: 100%;\n}\n\n.p-datepicker-input {\n flex: 1 1 auto;\n width: 1%;\n}\n\n.p-datepicker:has(.p-datepicker-dropdown) .p-datepicker-input {\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n}\n\n.p-datepicker-dropdown {\n cursor: pointer;\n display: inline-flex;\n user-select: none;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n position: relative;\n width: ".concat(dt("datepicker.dropdown.width"), ";\n border-start-end-radius: ").concat(dt("datepicker.dropdown.border.radius"), ";\n border-end-end-radius: ").concat(dt("datepicker.dropdown.border.radius"), ";\n background: ").concat(dt("datepicker.dropdown.background"), ";\n border: 1px solid ").concat(dt("datepicker.dropdown.border.color"), ";\n border-inline-start: 0 none;\n color: ").concat(dt("datepicker.dropdown.color"), ";\n transition: background ").concat(dt("datepicker.transition.duration"), ", color ").concat(dt("datepicker.transition.duration"), ", border-color ").concat(dt("datepicker.transition.duration"), ", outline-color ").concat(dt("datepicker.transition.duration"), ";\n outline-color: transparent;\n}\n\n.p-datepicker-dropdown:not(:disabled):hover {\n background: ").concat(dt("datepicker.dropdown.hover.background"), ";\n border-color: ").concat(dt("datepicker.dropdown.hover.border.color"), ";\n color: ").concat(dt("datepicker.dropdown.hover.color"), ";\n}\n\n.p-datepicker-dropdown:not(:disabled):active {\n background: ").concat(dt("datepicker.dropdown.active.background"), ";\n border-color: ").concat(dt("datepicker.dropdown.active.border.color"), ";\n color: ").concat(dt("datepicker.dropdown.active.color"), ";\n}\n\n.p-datepicker-dropdown:focus-visible {\n box-shadow: ").concat(dt("datepicker.dropdown.focus.ring.shadow"), ";\n outline: ").concat(dt("datepicker.dropdown.focus.ring.width"), " ").concat(dt("datepicker.dropdown.focus.ring.style"), " ").concat(dt("datepicker.dropdown.focus.ring.color"), ";\n outline-offset: ").concat(dt("datepicker.dropdown.focus.ring.offset"), ";\n}\n\n.p-datepicker:has(.p-datepicker-input-icon-container) {\n position: relative;\n}\n\n.p-datepicker:has(.p-datepicker-input-icon-container) .p-datepicker-input {\n padding-inline-end: calc((").concat(dt("form.field.padding.x"), " * 2) + ").concat(dt("icon.size"), ");\n}\n\n.p-datepicker-input-icon-container {\n cursor: pointer;\n position: absolute;\n top: 50%;\n inset-inline-end: ").concat(dt("form.field.padding.x"), ";\n margin-block-start: calc(-1 * (").concat(dt("icon.size"), " / 2));\n color: ").concat(dt("datepicker.input.icon.color"), ";\n line-height: 1;\n}\n\n.p-datepicker-fluid {\n display: flex;\n}\n\n.p-datepicker-fluid .p-datepicker-input {\n width: 1%;\n}\n\n.p-datepicker .p-datepicker-panel {\n min-width: 100%;\n}\n\n.p-datepicker-panel {\n width: auto;\n padding: ").concat(dt("datepicker.panel.padding"), ";\n background: ").concat(dt("datepicker.panel.background"), ";\n color: ").concat(dt("datepicker.panel.color"), ";\n border: 1px solid ").concat(dt("datepicker.panel.border.color"), ";\n border-radius: ").concat(dt("datepicker.panel.border.radius"), ";\n box-shadow: ").concat(dt("datepicker.panel.shadow"), ";\n}\n\n.p-datepicker-panel-inline {\n display: inline-block;\n overflow-x: auto;\n box-shadow: none;\n}\n\n.p-datepicker-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: ").concat(dt("datepicker.header.padding"), ";\n background: ").concat(dt("datepicker.header.background"), ";\n color: ").concat(dt("datepicker.header.color"), ";\n border-block-end: 1px solid ").concat(dt("datepicker.header.border.color"), ";\n}\n\n.p-datepicker-next-button:dir(rtl) {\n order: -1;\n}\n\n.p-datepicker-prev-button:dir(rtl) {\n order: 1;\n}\n\n.p-datepicker-title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ").concat(dt("datepicker.title.gap"), ";\n font-weight: ").concat(dt("datepicker.title.font.weight"), ";\n}\n\n.p-datepicker-select-year,\n.p-datepicker-select-month {\n border: none;\n background: transparent;\n margin: 0;\n cursor: pointer;\n font-weight: inherit;\n transition: background ").concat(dt("datepicker.transition.duration"), ", color ").concat(dt("datepicker.transition.duration"), ", border-color ").concat(dt("datepicker.transition.duration"), ", outline-color ").concat(dt("datepicker.transition.duration"), ", box-shadow ").concat(dt("datepicker.transition.duration"), ";\n}\n\n.p-datepicker-select-month {\n padding: ").concat(dt("datepicker.select.month.padding"), ";\n color: ").concat(dt("datepicker.select.month.color"), ";\n border-radius: ").concat(dt("datepicker.select.month.border.radius"), ";\n}\n\n.p-datepicker-select-year {\n padding: ").concat(dt("datepicker.select.year.padding"), ";\n color: ").concat(dt("datepicker.select.year.color"), ";\n border-radius: ").concat(dt("datepicker.select.year.border.radius"), ";\n}\n\n.p-datepicker-select-month:enabled:hover {\n background: ").concat(dt("datepicker.select.month.hover.background"), ";\n color: ").concat(dt("datepicker.select.month.hover.color"), ";\n}\n\n.p-datepicker-select-year:enabled:hover {\n background: ").concat(dt("datepicker.select.year.hover.background"), ";\n color: ").concat(dt("datepicker.select.year.hover.color"), ";\n}\n\n.p-datepicker-select-month:focus-visible,\n.p-datepicker-select-year:focus-visible {\n box-shadow: ").concat(dt("datepicker.date.focus.ring.shadow"), ";\n outline: ").concat(dt("datepicker.date.focus.ring.width"), " ").concat(dt("datepicker.date.focus.ring.style"), " ").concat(dt("datepicker.date.focus.ring.color"), ";\n outline-offset: ").concat(dt("datepicker.date.focus.ring.offset"), ";\n}\n\n.p-datepicker-calendar-container {\n display: flex;\n}\n\n.p-datepicker-calendar-container .p-datepicker-calendar {\n flex: 1 1 auto;\n border-inline-start: 1px solid ").concat(dt("datepicker.group.border.color"), ";\n padding-inline-end: ").concat(dt("datepicker.group.gap"), ";\n padding-inline-start: ").concat(dt("datepicker.group.gap"), ";\n}\n\n.p-datepicker-calendar-container .p-datepicker-calendar:first-child {\n padding-inline-start: 0;\n border-inline-start: 0 none;\n}\n\n.p-datepicker-calendar-container .p-datepicker-calendar:last-child {\n padding-inline-end: 0;\n}\n\n.p-datepicker-day-view {\n width: 100%;\n border-collapse: collapse;\n font-size: 1rem;\n margin: ").concat(dt("datepicker.day.view.margin"), ";\n}\n\n.p-datepicker-weekday-cell {\n padding: ").concat(dt("datepicker.week.day.padding"), ";\n}\n\n.p-datepicker-weekday {\n font-weight: ").concat(dt("datepicker.week.day.font.weight"), ";\n color: ").concat(dt("datepicker.week.day.color"), ";\n}\n\n.p-datepicker-day-cell {\n padding: ").concat(dt("datepicker.date.padding"), ";\n}\n\n.p-datepicker-day {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n margin: 0 auto;\n overflow: hidden;\n position: relative;\n width: ").concat(dt("datepicker.date.width"), ";\n height: ").concat(dt("datepicker.date.height"), ";\n border-radius: ").concat(dt("datepicker.date.border.radius"), ";\n transition: background ").concat(dt("datepicker.transition.duration"), ", color ").concat(dt("datepicker.transition.duration"), ", border-color ").concat(dt("datepicker.transition.duration"), ", box-shadow ").concat(dt("datepicker.transition.duration"), ", outline-color ").concat(dt("datepicker.transition.duration"), ";\n border: 1px solid transparent;\n outline-color: transparent;\n color: ").concat(dt("datepicker.date.color"), ";\n}\n\n.p-datepicker-day:not(.p-datepicker-day-selected):not(.p-disabled):hover {\n background: ").concat(dt("datepicker.date.hover.background"), ";\n color: ").concat(dt("datepicker.date.hover.color"), ";\n}\n\n.p-datepicker-day:focus-visible {\n box-shadow: ").concat(dt("datepicker.date.focus.ring.shadow"), ";\n outline: ").concat(dt("datepicker.date.focus.ring.width"), " ").concat(dt("datepicker.date.focus.ring.style"), " ").concat(dt("datepicker.date.focus.ring.color"), ";\n outline-offset: ").concat(dt("datepicker.date.focus.ring.offset"), ";\n}\n\n.p-datepicker-day-selected {\n background: ").concat(dt("datepicker.date.selected.background"), ";\n color: ").concat(dt("datepicker.date.selected.color"), ";\n}\n\n.p-datepicker-day-selected-range {\n background: ").concat(dt("datepicker.date.range.selected.background"), ";\n color: ").concat(dt("datepicker.date.range.selected.color"), ";\n}\n\n.p-datepicker-today > .p-datepicker-day {\n background: ").concat(dt("datepicker.today.background"), ";\n color: ").concat(dt("datepicker.today.color"), ";\n}\n\n.p-datepicker-today > .p-datepicker-day-selected {\n background: ").concat(dt("datepicker.date.selected.background"), ";\n color: ").concat(dt("datepicker.date.selected.color"), ";\n}\n\n.p-datepicker-today > .p-datepicker-day-selected-range {\n background: ").concat(dt("datepicker.date.range.selected.background"), ";\n color: ").concat(dt("datepicker.date.range.selected.color"), ";\n}\n\n.p-datepicker-weeknumber {\n text-align: center;\n}\n\n.p-datepicker-month-view {\n margin: ").concat(dt("datepicker.month.view.margin"), ";\n}\n\n.p-datepicker-month {\n width: 33.3%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n overflow: hidden;\n position: relative;\n padding: ").concat(dt("datepicker.month.padding"), ";\n transition: background ").concat(dt("datepicker.transition.duration"), ", color ").concat(dt("datepicker.transition.duration"), ", border-color ").concat(dt("datepicker.transition.duration"), ", box-shadow ").concat(dt("datepicker.transition.duration"), ", outline-color ").concat(dt("datepicker.transition.duration"), ";\n border-radius: ").concat(dt("datepicker.month.border.radius"), ";\n outline-color: transparent;\n color: ").concat(dt("datepicker.date.color"), ";\n}\n\n.p-datepicker-month:not(.p-disabled):not(.p-datepicker-month-selected):hover {\n color: ").concat(dt("datepicker.date.hover.color"), ";\n background: ").concat(dt("datepicker.date.hover.background"), ";\n}\n\n.p-datepicker-month-selected {\n color: ").concat(dt("datepicker.date.selected.color"), ";\n background: ").concat(dt("datepicker.date.selected.background"), ";\n}\n\n.p-datepicker-month:not(.p-disabled):focus-visible {\n box-shadow: ").concat(dt("datepicker.date.focus.ring.shadow"), ";\n outline: ").concat(dt("datepicker.date.focus.ring.width"), " ").concat(dt("datepicker.date.focus.ring.style"), " ").concat(dt("datepicker.date.focus.ring.color"), ";\n outline-offset: ").concat(dt("datepicker.date.focus.ring.offset"), ";\n}\n\n.p-datepicker-year-view {\n margin: ").concat(dt("datepicker.year.view.margin"), ";\n}\n\n.p-datepicker-year {\n width: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n overflow: hidden;\n position: relative;\n padding: ").concat(dt("datepicker.year.padding"), ";\n transition: background ").concat(dt("datepicker.transition.duration"), ", color ").concat(dt("datepicker.transition.duration"), ", border-color ").concat(dt("datepicker.transition.duration"), ", box-shadow ").concat(dt("datepicker.transition.duration"), ", outline-color ").concat(dt("datepicker.transition.duration"), ";\n border-radius: ").concat(dt("datepicker.year.border.radius"), ";\n outline-color: transparent;\n color: ").concat(dt("datepicker.date.color"), ";\n}\n\n.p-datepicker-year:not(.p-disabled):not(.p-datepicker-year-selected):hover {\n color: ").concat(dt("datepicker.date.hover.color"), ";\n background: ").concat(dt("datepicker.date.hover.background"), ";\n}\n\n.p-datepicker-year-selected {\n color: ").concat(dt("datepicker.date.selected.color"), ";\n background: ").concat(dt("datepicker.date.selected.background"), ";\n}\n\n.p-datepicker-year:not(.p-disabled):focus-visible {\n box-shadow: ").concat(dt("datepicker.date.focus.ring.shadow"), ";\n outline: ").concat(dt("datepicker.date.focus.ring.width"), " ").concat(dt("datepicker.date.focus.ring.style"), " ").concat(dt("datepicker.date.focus.ring.color"), ";\n outline-offset: ").concat(dt("datepicker.date.focus.ring.offset"), ";\n}\n\n.p-datepicker-buttonbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: ").concat(dt("datepicker.buttonbar.padding"), ";\n border-block-start: 1px solid ").concat(dt("datepicker.buttonbar.border.color"), ";\n}\n\n.p-datepicker-buttonbar .p-button {\n width: auto;\n}\n\n.p-datepicker-time-picker {\n display: flex;\n justify-content: center;\n align-items: center;\n border-block-start: 1px solid ").concat(dt("datepicker.time.picker.border.color"), ";\n padding: 0;\n gap: ").concat(dt("datepicker.time.picker.gap"), ";\n}\n\n.p-datepicker-calendar-container + .p-datepicker-time-picker {\n padding: ").concat(dt("datepicker.time.picker.padding"), ";\n}\n\n.p-datepicker-time-picker > div {\n display: flex;\n align-items: center;\n flex-direction: column;\n gap: ").concat(dt("datepicker.time.picker.button.gap"), ";\n}\n\n.p-datepicker-time-picker span {\n font-size: 1rem;\n}\n\n.p-datepicker-timeonly .p-datepicker-time-picker {\n border-block-start: 0 none;\n}\n\n.p-datepicker:has(.p-inputtext-sm) .p-datepicker-dropdown {\n width: ").concat(dt("datepicker.dropdown.sm.width"), ";\n}\n\n.p-datepicker:has(.p-inputtext-sm) .p-datepicker-dropdown .p-icon,\n.p-datepicker:has(.p-inputtext-sm) .p-datepicker-input-icon {\n font-size: ").concat(dt("form.field.sm.font.size"), ";\n width: ").concat(dt("form.field.sm.font.size"), ";\n height: ").concat(dt("form.field.sm.font.size"), ";\n}\n\n.p-datepicker:has(.p-inputtext-lg) .p-datepicker-dropdown {\n width: ").concat(dt("datepicker.dropdown.lg.width"), ";\n}\n\n.p-datepicker:has(.p-inputtext-lg) .p-datepicker-dropdown .p-icon,\n.p-datepicker:has(.p-inputtext-lg) .p-datepicker-input-icon {\n font-size: ").concat(dt("form.field.lg.font.size"), ";\n width: ").concat(dt("form.field.lg.font.size"), ";\n height: ").concat(dt("form.field.lg.font.size"), ";\n}\n"); +}, "theme"); +var inlineStyles$8 = { + root: /* @__PURE__ */ __name(function root4(_ref2) { + var props = _ref2.props; + return { + position: props.appendTo === "self" ? "relative" : void 0 + }; + }, "root") +}; +var classes$D = { + root: /* @__PURE__ */ __name(function root5(_ref3) { + var instance = _ref3.instance, state = _ref3.state; + return ["p-datepicker p-component p-inputwrapper", { + "p-invalid": instance.$invalid, + "p-inputwrapper-filled": instance.$filled, + "p-inputwrapper-focus": state.focused || state.overlayVisible, + "p-focus": state.focused || state.overlayVisible, + "p-datepicker-fluid": instance.$fluid + }]; + }, "root"), + pcInputText: "p-datepicker-input", + dropdown: "p-datepicker-dropdown", + inputIconContainer: "p-datepicker-input-icon-container", + inputIcon: "p-datepicker-input-icon", + panel: /* @__PURE__ */ __name(function panel(_ref4) { + var props = _ref4.props; + return ["p-datepicker-panel p-component", { + "p-datepicker-panel-inline": props.inline, + "p-disabled": props.disabled, + "p-datepicker-timeonly": props.timeOnly + }]; + }, "panel"), + calendarContainer: "p-datepicker-calendar-container", + calendar: "p-datepicker-calendar", + header: "p-datepicker-header", + pcPrevButton: "p-datepicker-prev-button", + title: "p-datepicker-title", + selectMonth: "p-datepicker-select-month", + selectYear: "p-datepicker-select-year", + decade: "p-datepicker-decade", + pcNextButton: "p-datepicker-next-button", + dayView: "p-datepicker-day-view", + weekHeader: "p-datepicker-weekheader p-disabled", + weekNumber: "p-datepicker-weeknumber", + weekLabelContainer: "p-datepicker-weeklabel-container p-disabled", + weekDayCell: "p-datepicker-weekday-cell", + weekDay: "p-datepicker-weekday", + dayCell: /* @__PURE__ */ __name(function dayCell(_ref5) { + var date = _ref5.date; + return ["p-datepicker-day-cell", { + "p-datepicker-other-month": date.otherMonth, + "p-datepicker-today": date.today + }]; + }, "dayCell"), + day: /* @__PURE__ */ __name(function day(_ref6) { + var instance = _ref6.instance, props = _ref6.props, date = _ref6.date; + var selectedDayClass = ""; + if (instance.isRangeSelection() && instance.isSelected(date) && date.selectable) { + selectedDayClass = instance.isDateEquals(props.modelValue[0], date) || instance.isDateEquals(props.modelValue[1], date) ? "p-datepicker-day-selected" : "p-datepicker-day-selected-range"; + } + return ["p-datepicker-day", { + "p-datepicker-day-selected": !instance.isRangeSelection() && instance.isSelected(date) && date.selectable, + "p-disabled": props.disabled || !date.selectable + }, selectedDayClass]; + }, "day"), + monthView: "p-datepicker-month-view", + month: /* @__PURE__ */ __name(function month(_ref7) { + var instance = _ref7.instance, props = _ref7.props, _month = _ref7.month, index = _ref7.index; + return ["p-datepicker-month", { + "p-datepicker-month-selected": instance.isMonthSelected(index), + "p-disabled": props.disabled || !_month.selectable + }]; + }, "month"), + yearView: "p-datepicker-year-view", + year: /* @__PURE__ */ __name(function year(_ref8) { + var instance = _ref8.instance, props = _ref8.props, _year = _ref8.year; + return ["p-datepicker-year", { + "p-datepicker-year-selected": instance.isYearSelected(_year.value), + "p-disabled": props.disabled || !_year.selectable + }]; + }, "year"), + timePicker: "p-datepicker-time-picker", + hourPicker: "p-datepicker-hour-picker", + pcIncrementButton: "p-datepicker-increment-button", + pcDecrementButton: "p-datepicker-decrement-button", + separator: "p-datepicker-separator", + minutePicker: "p-datepicker-minute-picker", + secondPicker: "p-datepicker-second-picker", + ampmPicker: "p-datepicker-ampm-picker", + buttonbar: "p-datepicker-buttonbar", + pcTodayButton: "p-datepicker-today-button", + pcClearButton: "p-datepicker-clear-button" +}; +var DatePickerStyle = BaseStyle.extend({ + name: "datepicker", + theme: theme$z, + classes: classes$D, + inlineStyles: inlineStyles$8 +}); +var script$1$F = { + name: "BaseDatePicker", + "extends": script$1n, + props: { + selectionMode: { + type: String, + "default": "single" + }, + dateFormat: { + type: String, + "default": null + }, + inline: { + type: Boolean, + "default": false + }, + showOtherMonths: { + type: Boolean, + "default": true + }, + selectOtherMonths: { + type: Boolean, + "default": false + }, + showIcon: { + type: Boolean, + "default": false + }, + iconDisplay: { + type: String, + "default": "button" + }, + icon: { + type: String, + "default": void 0 + }, + prevIcon: { + type: String, + "default": void 0 + }, + nextIcon: { + type: String, + "default": void 0 + }, + incrementIcon: { + type: String, + "default": void 0 + }, + decrementIcon: { + type: String, + "default": void 0 + }, + numberOfMonths: { + type: Number, + "default": 1 + }, + responsiveOptions: Array, + breakpoint: { + type: String, + "default": "769px" + }, + view: { + type: String, + "default": "date" + }, + minDate: { + type: Date, + value: null + }, + maxDate: { + type: Date, + value: null + }, + disabledDates: { + type: Array, + value: null + }, + disabledDays: { + type: Array, + value: null + }, + maxDateCount: { + type: Number, + value: null + }, + showOnFocus: { + type: Boolean, + "default": true + }, + autoZIndex: { + type: Boolean, + "default": true + }, + baseZIndex: { + type: Number, + "default": 0 + }, + showButtonBar: { + type: Boolean, + "default": false + }, + shortYearCutoff: { + type: String, + "default": "+10" + }, + showTime: { + type: Boolean, + "default": false + }, + timeOnly: { + type: Boolean, + "default": false + }, + hourFormat: { + type: String, + "default": "24" + }, + stepHour: { + type: Number, + "default": 1 + }, + stepMinute: { + type: Number, + "default": 1 + }, + stepSecond: { + type: Number, + "default": 1 + }, + showSeconds: { + type: Boolean, + "default": false + }, + hideOnDateTimeSelect: { + type: Boolean, + "default": false + }, + hideOnRangeSelection: { + type: Boolean, + "default": false + }, + timeSeparator: { + type: String, + "default": ":" + }, + showWeek: { + type: Boolean, + "default": false + }, + manualInput: { + type: Boolean, + "default": true + }, + appendTo: { + type: [String, Object], + "default": "body" + }, + readonly: { + type: Boolean, + "default": false + }, + placeholder: { + type: String, + "default": null + }, + id: { + type: String, + "default": null + }, + inputId: { + type: String, + "default": null + }, + inputClass: { + type: [String, Object], + "default": null + }, + inputStyle: { + type: Object, + "default": null + }, + panelClass: { + type: [String, Object], + "default": null + }, + panelStyle: { + type: Object, + "default": null + }, + todayButtonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default3() { + return { + severity: "secondary", + text: true, + size: "small" + }; + }, "_default") + }, + clearButtonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default4() { + return { + severity: "secondary", + text: true, + size: "small" + }; + }, "_default") + }, + navigatorButtonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default5() { + return { + severity: "secondary", + text: true, + rounded: true + }; + }, "_default") + }, + timepickerButtonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default6() { + return { + severity: "secondary", + text: true, + rounded: true + }; + }, "_default") + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + } + }, + style: DatePickerStyle, + provide: /* @__PURE__ */ __name(function provide10() { + return { + $pcDatePicker: this, + $parentInstance: this + }; + }, "provide") +}; +function _typeof$l(o) { + "@babel/helpers - typeof"; + return _typeof$l = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$l(o); +} +__name(_typeof$l, "_typeof$l"); +function _toConsumableArray$d(r) { + return _arrayWithoutHoles$d(r) || _iterableToArray$d(r) || _unsupportedIterableToArray$e(r) || _nonIterableSpread$d(); +} +__name(_toConsumableArray$d, "_toConsumableArray$d"); +function _nonIterableSpread$d() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$d, "_nonIterableSpread$d"); +function _iterableToArray$d(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$d, "_iterableToArray$d"); +function _arrayWithoutHoles$d(r) { + if (Array.isArray(r)) return _arrayLikeToArray$e(r); +} +__name(_arrayWithoutHoles$d, "_arrayWithoutHoles$d"); +function _createForOfIteratorHelper$4(r, e) { + var t2 = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (!t2) { + if (Array.isArray(r) || (t2 = _unsupportedIterableToArray$e(r)) || e) { + t2 && (r = t2); + var _n = 0, F = /* @__PURE__ */ __name(function F2() { + }, "F"); + return { s: F, n: /* @__PURE__ */ __name(function n() { + return _n >= r.length ? { done: true } : { done: false, value: r[_n++] }; + }, "n"), e: /* @__PURE__ */ __name(function e2(r2) { + throw r2; + }, "e"), f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var o, a = true, u = false; + return { s: /* @__PURE__ */ __name(function s() { + t2 = t2.call(r); + }, "s"), n: /* @__PURE__ */ __name(function n() { + var r2 = t2.next(); + return a = r2.done, r2; + }, "n"), e: /* @__PURE__ */ __name(function e2(r2) { + u = true, o = r2; + }, "e"), f: /* @__PURE__ */ __name(function f() { + try { + a || null == t2["return"] || t2["return"](); + } finally { + if (u) throw o; + } + }, "f") }; +} +__name(_createForOfIteratorHelper$4, "_createForOfIteratorHelper$4"); +function _unsupportedIterableToArray$e(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$e(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$e(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$e, "_unsupportedIterableToArray$e"); +function _arrayLikeToArray$e(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$e, "_arrayLikeToArray$e"); +var script$12 = { + name: "DatePicker", + "extends": script$1$F, + inheritAttrs: false, + emits: ["show", "hide", "input", "month-change", "year-change", "date-select", "today-click", "clear-click", "focus", "blur", "keydown"], + inject: { + $pcFluid: { + "default": null + } + }, + navigationState: null, + timePickerChange: false, + scrollHandler: null, + outsideClickListener: null, + resizeListener: null, + matchMediaListener: null, + overlay: null, + input: null, + previousButton: null, + nextButton: null, + timePickerTimer: null, + preventFocus: false, + typeUpdate: false, + data: /* @__PURE__ */ __name(function data3() { + return { + d_id: this.id, + currentMonth: null, + currentYear: null, + currentHour: null, + currentMinute: null, + currentSecond: null, + pm: null, + focused: false, + overlayVisible: false, + currentView: this.view, + query: null, + queryMatches: false + }; + }, "data"), + watch: { + id: /* @__PURE__ */ __name(function id3(newValue) { + this.d_id = newValue || UniqueComponentId(); + }, "id"), + modelValue: /* @__PURE__ */ __name(function modelValue(newValue) { + this.updateCurrentMetaData(); + if (!this.typeUpdate && !this.inline && this.input) { + this.input.value = this.inputFieldValue; + } + this.typeUpdate = false; + }, "modelValue"), + showTime: /* @__PURE__ */ __name(function showTime() { + this.updateCurrentMetaData(); + }, "showTime"), + minDate: /* @__PURE__ */ __name(function minDate() { + this.updateCurrentMetaData(); + }, "minDate"), + maxDate: /* @__PURE__ */ __name(function maxDate() { + this.updateCurrentMetaData(); + }, "maxDate"), + months: /* @__PURE__ */ __name(function months() { + if (this.overlay) { + if (!this.focused) { + if (this.inline) { + this.preventFocus = true; + } + setTimeout(this.updateFocus, 0); + } + } + }, "months"), + numberOfMonths: /* @__PURE__ */ __name(function numberOfMonths() { + this.destroyResponsiveStyleElement(); + this.createResponsiveStyle(); + }, "numberOfMonths"), + responsiveOptions: /* @__PURE__ */ __name(function responsiveOptions() { + this.destroyResponsiveStyleElement(); + this.createResponsiveStyle(); + }, "responsiveOptions"), + currentView: /* @__PURE__ */ __name(function currentView() { + var _this = this; + Promise.resolve(null).then(function() { + return _this.alignOverlay(); + }); + }, "currentView"), + view: /* @__PURE__ */ __name(function view(newValue) { + this.currentView = newValue; + }, "view") + }, + created: /* @__PURE__ */ __name(function created2() { + this.updateCurrentMetaData(); + }, "created"), + mounted: /* @__PURE__ */ __name(function mounted5() { + this.d_id = this.d_id || UniqueComponentId(); + this.createResponsiveStyle(); + this.bindMatchMediaListener(); + if (this.inline) { + if (!this.disabled) { + this.preventFocus = true; + this.initFocusableCell(); + } + } else { + this.input.value = this.inputFieldValue; + } + }, "mounted"), + updated: /* @__PURE__ */ __name(function updated3() { + if (this.overlay) { + this.preventFocus = true; + setTimeout(this.updateFocus, 0); + } + if (this.input && this.selectionStart != null && this.selectionEnd != null) { + this.input.selectionStart = this.selectionStart; + this.input.selectionEnd = this.selectionEnd; + this.selectionStart = null; + this.selectionEnd = null; + } + }, "updated"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount2() { + if (this.timePickerTimer) { + clearTimeout(this.timePickerTimer); + } + this.destroyResponsiveStyleElement(); + this.unbindOutsideClickListener(); + this.unbindResizeListener(); + this.unbindMatchMediaListener(); + if (this.scrollHandler) { + this.scrollHandler.destroy(); + this.scrollHandler = null; + } + if (this.overlay && this.autoZIndex) { + ZIndex.clear(this.overlay); + } + this.overlay = null; + }, "beforeUnmount"), + methods: { + isComparable: /* @__PURE__ */ __name(function isComparable() { + return this.d_value != null && typeof this.d_value !== "string"; + }, "isComparable"), + isSelected: /* @__PURE__ */ __name(function isSelected(dateMeta) { + if (!this.isComparable()) { + return false; + } + if (this.d_value) { + if (this.isSingleSelection()) { + return this.isDateEquals(this.d_value, dateMeta); + } else if (this.isMultipleSelection()) { + var selected3 = false; + var _iterator = _createForOfIteratorHelper$4(this.d_value), _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + var date = _step.value; + selected3 = this.isDateEquals(date, dateMeta); + if (selected3) { + break; + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + return selected3; + } else if (this.isRangeSelection()) { + if (this.d_value[1]) return this.isDateEquals(this.d_value[0], dateMeta) || this.isDateEquals(this.d_value[1], dateMeta) || this.isDateBetween(this.d_value[0], this.d_value[1], dateMeta); + else { + return this.isDateEquals(this.d_value[0], dateMeta); + } + } + } + return false; + }, "isSelected"), + isMonthSelected: /* @__PURE__ */ __name(function isMonthSelected(month2) { + var _this2 = this; + if (!this.isComparable()) return false; + if (this.isMultipleSelection()) { + return this.d_value.some(function(currentValue) { + return currentValue.getMonth() === month2 && currentValue.getFullYear() === _this2.currentYear; + }); + } else if (this.isRangeSelection()) { + if (!this.d_value[1]) { + var _this$d_value$, _this$d_value$2; + return ((_this$d_value$ = this.d_value[0]) === null || _this$d_value$ === void 0 ? void 0 : _this$d_value$.getFullYear()) === this.currentYear && ((_this$d_value$2 = this.d_value[0]) === null || _this$d_value$2 === void 0 ? void 0 : _this$d_value$2.getMonth()) === month2; + } else { + var currentDate = new Date(this.currentYear, month2, 1); + var startDate = new Date(this.d_value[0].getFullYear(), this.d_value[0].getMonth(), 1); + var endDate = new Date(this.d_value[1].getFullYear(), this.d_value[1].getMonth(), 1); + return currentDate >= startDate && currentDate <= endDate; + } + } else { + return this.d_value.getMonth() === month2 && this.d_value.getFullYear() === this.currentYear; + } + }, "isMonthSelected"), + isYearSelected: /* @__PURE__ */ __name(function isYearSelected(year2) { + if (!this.isComparable()) return false; + if (this.isMultipleSelection()) { + return this.d_value.some(function(currentValue) { + return currentValue.getFullYear() === year2; + }); + } else if (this.isRangeSelection()) { + var start = this.d_value[0] ? this.d_value[0].getFullYear() : null; + var end = this.d_value[1] ? this.d_value[1].getFullYear() : null; + return start === year2 || end === year2 || start < year2 && end > year2; + } else { + return this.d_value.getFullYear() === year2; + } + }, "isYearSelected"), + isDateEquals: /* @__PURE__ */ __name(function isDateEquals(value2, dateMeta) { + if (value2) return value2.getDate() === dateMeta.day && value2.getMonth() === dateMeta.month && value2.getFullYear() === dateMeta.year; + else return false; + }, "isDateEquals"), + isDateBetween: /* @__PURE__ */ __name(function isDateBetween(start, end, dateMeta) { + var between = false; + if (start && end) { + var date = new Date(dateMeta.year, dateMeta.month, dateMeta.day); + return start.getTime() <= date.getTime() && end.getTime() >= date.getTime(); + } + return between; + }, "isDateBetween"), + getFirstDayOfMonthIndex: /* @__PURE__ */ __name(function getFirstDayOfMonthIndex(month2, year2) { + var day2 = /* @__PURE__ */ new Date(); + day2.setDate(1); + day2.setMonth(month2); + day2.setFullYear(year2); + var dayIndex = day2.getDay() + this.sundayIndex; + return dayIndex >= 7 ? dayIndex - 7 : dayIndex; + }, "getFirstDayOfMonthIndex"), + getDaysCountInMonth: /* @__PURE__ */ __name(function getDaysCountInMonth(month2, year2) { + return 32 - this.daylightSavingAdjust(new Date(year2, month2, 32)).getDate(); + }, "getDaysCountInMonth"), + getDaysCountInPrevMonth: /* @__PURE__ */ __name(function getDaysCountInPrevMonth(month2, year2) { + var prev = this.getPreviousMonthAndYear(month2, year2); + return this.getDaysCountInMonth(prev.month, prev.year); + }, "getDaysCountInPrevMonth"), + getPreviousMonthAndYear: /* @__PURE__ */ __name(function getPreviousMonthAndYear(month2, year2) { + var m, y; + if (month2 === 0) { + m = 11; + y = year2 - 1; + } else { + m = month2 - 1; + y = year2; + } + return { + month: m, + year: y + }; + }, "getPreviousMonthAndYear"), + getNextMonthAndYear: /* @__PURE__ */ __name(function getNextMonthAndYear(month2, year2) { + var m, y; + if (month2 === 11) { + m = 0; + y = year2 + 1; + } else { + m = month2 + 1; + y = year2; + } + return { + month: m, + year: y + }; + }, "getNextMonthAndYear"), + daylightSavingAdjust: /* @__PURE__ */ __name(function daylightSavingAdjust(date) { + if (!date) { + return null; + } + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); + return date; + }, "daylightSavingAdjust"), + isToday: /* @__PURE__ */ __name(function isToday(today, day2, month2, year2) { + return today.getDate() === day2 && today.getMonth() === month2 && today.getFullYear() === year2; + }, "isToday"), + isSelectable: /* @__PURE__ */ __name(function isSelectable(day2, month2, year2, otherMonth) { + var validMin = true; + var validMax = true; + var validDate = true; + var validDay = true; + if (otherMonth && !this.selectOtherMonths) { + return false; + } + if (this.minDate) { + if (this.minDate.getFullYear() > year2) { + validMin = false; + } else if (this.minDate.getFullYear() === year2) { + if (this.minDate.getMonth() > month2) { + validMin = false; + } else if (this.minDate.getMonth() === month2) { + if (this.minDate.getDate() > day2) { + validMin = false; + } + } + } + } + if (this.maxDate) { + if (this.maxDate.getFullYear() < year2) { + validMax = false; + } else if (this.maxDate.getFullYear() === year2) { + if (this.maxDate.getMonth() < month2) { + validMax = false; + } else if (this.maxDate.getMonth() === month2) { + if (this.maxDate.getDate() < day2) { + validMax = false; + } + } + } + } + if (this.disabledDates) { + validDate = !this.isDateDisabled(day2, month2, year2); + } + if (this.disabledDays) { + validDay = !this.isDayDisabled(day2, month2, year2); + } + return validMin && validMax && validDate && validDay; + }, "isSelectable"), + onOverlayEnter: /* @__PURE__ */ __name(function onOverlayEnter(el) { + var styles = !this.inline ? { + position: "absolute", + top: "0", + left: "0" + } : void 0; + addStyle(el, styles); + if (this.autoZIndex) { + ZIndex.set("overlay", el, this.baseZIndex || this.$primevue.config.zIndex.overlay); + } + this.alignOverlay(); + this.$emit("show"); + }, "onOverlayEnter"), + onOverlayEnterComplete: /* @__PURE__ */ __name(function onOverlayEnterComplete() { + this.bindOutsideClickListener(); + this.bindScrollListener(); + this.bindResizeListener(); + }, "onOverlayEnterComplete"), + onOverlayAfterLeave: /* @__PURE__ */ __name(function onOverlayAfterLeave(el) { + if (this.autoZIndex) { + ZIndex.clear(el); + } + }, "onOverlayAfterLeave"), + onOverlayLeave: /* @__PURE__ */ __name(function onOverlayLeave() { + this.currentView = this.view; + this.unbindOutsideClickListener(); + this.unbindScrollListener(); + this.unbindResizeListener(); + this.$emit("hide"); + this.overlay = null; + }, "onOverlayLeave"), + onPrevButtonClick: /* @__PURE__ */ __name(function onPrevButtonClick(event2) { + this.navigationState = { + backward: true, + button: true + }; + this.navBackward(event2); + }, "onPrevButtonClick"), + onNextButtonClick: /* @__PURE__ */ __name(function onNextButtonClick(event2) { + this.navigationState = { + backward: false, + button: true + }; + this.navForward(event2); + }, "onNextButtonClick"), + navBackward: /* @__PURE__ */ __name(function navBackward(event2) { + event2.preventDefault(); + if (!this.isEnabled()) { + return; + } + if (this.currentView === "month") { + this.decrementYear(); + this.$emit("year-change", { + month: this.currentMonth, + year: this.currentYear + }); + } else if (this.currentView === "year") { + this.decrementDecade(); + } else { + if (event2.shiftKey) { + this.decrementYear(); + } else { + if (this.currentMonth === 0) { + this.currentMonth = 11; + this.decrementYear(); + } else { + this.currentMonth--; + } + this.$emit("month-change", { + month: this.currentMonth + 1, + year: this.currentYear + }); + } + } + }, "navBackward"), + navForward: /* @__PURE__ */ __name(function navForward(event2) { + event2.preventDefault(); + if (!this.isEnabled()) { + return; + } + if (this.currentView === "month") { + this.incrementYear(); + this.$emit("year-change", { + month: this.currentMonth, + year: this.currentYear + }); + } else if (this.currentView === "year") { + this.incrementDecade(); + } else { + if (event2.shiftKey) { + this.incrementYear(); + } else { + if (this.currentMonth === 11) { + this.currentMonth = 0; + this.incrementYear(); + } else { + this.currentMonth++; + } + this.$emit("month-change", { + month: this.currentMonth + 1, + year: this.currentYear + }); + } + } + }, "navForward"), + decrementYear: /* @__PURE__ */ __name(function decrementYear() { + this.currentYear--; + }, "decrementYear"), + decrementDecade: /* @__PURE__ */ __name(function decrementDecade() { + this.currentYear = this.currentYear - 10; + }, "decrementDecade"), + incrementYear: /* @__PURE__ */ __name(function incrementYear() { + this.currentYear++; + }, "incrementYear"), + incrementDecade: /* @__PURE__ */ __name(function incrementDecade() { + this.currentYear = this.currentYear + 10; + }, "incrementDecade"), + switchToMonthView: /* @__PURE__ */ __name(function switchToMonthView(event2) { + this.currentView = "month"; + setTimeout(this.updateFocus, 0); + event2.preventDefault(); + }, "switchToMonthView"), + switchToYearView: /* @__PURE__ */ __name(function switchToYearView(event2) { + this.currentView = "year"; + setTimeout(this.updateFocus, 0); + event2.preventDefault(); + }, "switchToYearView"), + isEnabled: /* @__PURE__ */ __name(function isEnabled() { + return !this.disabled && !this.readonly; + }, "isEnabled"), + updateCurrentTimeMeta: /* @__PURE__ */ __name(function updateCurrentTimeMeta(date) { + var currentHour = date.getHours(); + if (this.hourFormat === "12") { + this.pm = currentHour > 11; + if (currentHour >= 12) currentHour = currentHour == 12 ? 12 : currentHour - 12; + } + this.currentHour = Math.floor(currentHour / this.stepHour) * this.stepHour; + this.currentMinute = Math.floor(date.getMinutes() / this.stepMinute) * this.stepMinute; + this.currentSecond = Math.floor(date.getSeconds() / this.stepSecond) * this.stepSecond; + }, "updateCurrentTimeMeta"), + bindOutsideClickListener: /* @__PURE__ */ __name(function bindOutsideClickListener2() { + var _this3 = this; + if (!this.outsideClickListener) { + this.outsideClickListener = function(event2) { + if (_this3.overlayVisible && _this3.isOutsideClicked(event2)) { + _this3.overlayVisible = false; + } + }; + document.addEventListener("mousedown", this.outsideClickListener); + } + }, "bindOutsideClickListener"), + unbindOutsideClickListener: /* @__PURE__ */ __name(function unbindOutsideClickListener2() { + if (this.outsideClickListener) { + document.removeEventListener("mousedown", this.outsideClickListener); + this.outsideClickListener = null; + } + }, "unbindOutsideClickListener"), + bindScrollListener: /* @__PURE__ */ __name(function bindScrollListener() { + var _this4 = this; + if (!this.scrollHandler) { + this.scrollHandler = new ConnectedOverlayScrollHandler(this.$refs.container, function() { + if (_this4.overlayVisible) { + _this4.overlayVisible = false; + } + }); + } + this.scrollHandler.bindScrollListener(); + }, "bindScrollListener"), + unbindScrollListener: /* @__PURE__ */ __name(function unbindScrollListener() { + if (this.scrollHandler) { + this.scrollHandler.unbindScrollListener(); + } + }, "unbindScrollListener"), + bindResizeListener: /* @__PURE__ */ __name(function bindResizeListener() { + var _this5 = this; + if (!this.resizeListener) { + this.resizeListener = function() { + if (_this5.overlayVisible && !isTouchDevice()) { + _this5.overlayVisible = false; + } + }; + window.addEventListener("resize", this.resizeListener); + } + }, "bindResizeListener"), + unbindResizeListener: /* @__PURE__ */ __name(function unbindResizeListener() { + if (this.resizeListener) { + window.removeEventListener("resize", this.resizeListener); + this.resizeListener = null; + } + }, "unbindResizeListener"), + bindMatchMediaListener: /* @__PURE__ */ __name(function bindMatchMediaListener() { + var _this6 = this; + if (!this.matchMediaListener) { + var query = matchMedia("(max-width: ".concat(this.breakpoint, ")")); + this.query = query; + this.queryMatches = query.matches; + this.matchMediaListener = function() { + _this6.queryMatches = query.matches; + _this6.mobileActive = false; + }; + this.query.addEventListener("change", this.matchMediaListener); + } + }, "bindMatchMediaListener"), + unbindMatchMediaListener: /* @__PURE__ */ __name(function unbindMatchMediaListener() { + if (this.matchMediaListener) { + this.query.removeEventListener("change", this.matchMediaListener); + this.matchMediaListener = null; + } + }, "unbindMatchMediaListener"), + isOutsideClicked: /* @__PURE__ */ __name(function isOutsideClicked2(event2) { + return !(this.$el.isSameNode(event2.target) || this.isNavIconClicked(event2) || this.$el.contains(event2.target) || this.overlay && this.overlay.contains(event2.target)); + }, "isOutsideClicked"), + isNavIconClicked: /* @__PURE__ */ __name(function isNavIconClicked(event2) { + return this.previousButton && (this.previousButton.isSameNode(event2.target) || this.previousButton.contains(event2.target)) || this.nextButton && (this.nextButton.isSameNode(event2.target) || this.nextButton.contains(event2.target)); + }, "isNavIconClicked"), + alignOverlay: /* @__PURE__ */ __name(function alignOverlay() { + if (this.overlay) { + if (this.appendTo === "self" || this.inline) { + relativePosition(this.overlay, this.$el); + } else { + if (this.view === "date") { + this.overlay.style.width = getOuterWidth(this.overlay) + "px"; + this.overlay.style.minWidth = getOuterWidth(this.$el) + "px"; + } else { + this.overlay.style.width = getOuterWidth(this.$el) + "px"; + } + absolutePosition(this.overlay, this.$el); + } + } + }, "alignOverlay"), + onButtonClick: /* @__PURE__ */ __name(function onButtonClick() { + if (this.isEnabled()) { + if (!this.overlayVisible) { + this.input.focus(); + this.overlayVisible = true; + } else { + this.overlayVisible = false; + } + } + }, "onButtonClick"), + isDateDisabled: /* @__PURE__ */ __name(function isDateDisabled(day2, month2, year2) { + if (this.disabledDates) { + var _iterator2 = _createForOfIteratorHelper$4(this.disabledDates), _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { + var disabledDate = _step2.value; + if (disabledDate.getFullYear() === year2 && disabledDate.getMonth() === month2 && disabledDate.getDate() === day2) { + return true; + } + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + return false; + }, "isDateDisabled"), + isDayDisabled: /* @__PURE__ */ __name(function isDayDisabled(day2, month2, year2) { + if (this.disabledDays) { + var weekday = new Date(year2, month2, day2); + var weekdayNumber = weekday.getDay(); + return this.disabledDays.indexOf(weekdayNumber) !== -1; + } + return false; + }, "isDayDisabled"), + onMonthDropdownChange: /* @__PURE__ */ __name(function onMonthDropdownChange(value2) { + this.currentMonth = parseInt(value2); + this.$emit("month-change", { + month: this.currentMonth + 1, + year: this.currentYear + }); + }, "onMonthDropdownChange"), + onYearDropdownChange: /* @__PURE__ */ __name(function onYearDropdownChange(value2) { + this.currentYear = parseInt(value2); + this.$emit("year-change", { + month: this.currentMonth + 1, + year: this.currentYear + }); + }, "onYearDropdownChange"), + onDateSelect: /* @__PURE__ */ __name(function onDateSelect(event2, dateMeta) { + var _this7 = this; + if (this.disabled || !dateMeta.selectable) { + return; + } + find(this.overlay, 'table td span:not([data-p-disabled="true"])').forEach(function(cell) { + return cell.tabIndex = -1; + }); + if (event2) { + event2.currentTarget.focus(); + } + if (this.isMultipleSelection() && this.isSelected(dateMeta)) { + var newValue = this.d_value.filter(function(date) { + return !_this7.isDateEquals(date, dateMeta); + }); + this.updateModel(newValue); + } else { + if (this.shouldSelectDate(dateMeta)) { + if (dateMeta.otherMonth) { + this.currentMonth = dateMeta.month; + this.currentYear = dateMeta.year; + this.selectDate(dateMeta); + } else { + this.selectDate(dateMeta); + } + } + } + if (this.isSingleSelection() && (!this.showTime || this.hideOnDateTimeSelect)) { + if (this.input) { + this.input.focus(); + } + setTimeout(function() { + _this7.overlayVisible = false; + }, 150); + } + }, "onDateSelect"), + selectDate: /* @__PURE__ */ __name(function selectDate(dateMeta) { + var _this8 = this; + var date = new Date(dateMeta.year, dateMeta.month, dateMeta.day); + if (this.showTime) { + this.hourFormat === "12" && this.currentHour !== 12 && this.pm ? date.setHours(this.currentHour + 12) : date.setHours(this.currentHour); + date.setMinutes(this.currentMinute); + date.setSeconds(this.currentSecond); + } + if (this.minDate && this.minDate > date) { + date = this.minDate; + this.currentHour = date.getHours(); + this.currentMinute = date.getMinutes(); + this.currentSecond = date.getSeconds(); + } + if (this.maxDate && this.maxDate < date) { + date = this.maxDate; + this.currentHour = date.getHours(); + this.currentMinute = date.getMinutes(); + this.currentSecond = date.getSeconds(); + } + var modelVal = null; + if (this.isSingleSelection()) { + modelVal = date; + } else if (this.isMultipleSelection()) { + modelVal = this.d_value ? [].concat(_toConsumableArray$d(this.d_value), [date]) : [date]; + } else if (this.isRangeSelection()) { + if (this.d_value && this.d_value.length) { + var startDate = this.d_value[0]; + var endDate = this.d_value[1]; + if (!endDate && date.getTime() >= startDate.getTime()) { + endDate = date; + } else { + startDate = date; + endDate = null; + } + modelVal = [startDate, endDate]; + } else { + modelVal = [date, null]; + } + } + if (modelVal !== null) { + this.updateModel(modelVal); + } + if (this.isRangeSelection() && this.hideOnRangeSelection && modelVal[1] !== null) { + setTimeout(function() { + _this8.overlayVisible = false; + }, 150); + } + this.$emit("date-select", date); + }, "selectDate"), + updateModel: /* @__PURE__ */ __name(function updateModel(value2) { + this.writeValue(value2); + }, "updateModel"), + shouldSelectDate: /* @__PURE__ */ __name(function shouldSelectDate() { + if (this.isMultipleSelection()) return this.maxDateCount != null ? this.maxDateCount > (this.d_value ? this.d_value.length : 0) : true; + else return true; + }, "shouldSelectDate"), + isSingleSelection: /* @__PURE__ */ __name(function isSingleSelection() { + return this.selectionMode === "single"; + }, "isSingleSelection"), + isRangeSelection: /* @__PURE__ */ __name(function isRangeSelection() { + return this.selectionMode === "range"; + }, "isRangeSelection"), + isMultipleSelection: /* @__PURE__ */ __name(function isMultipleSelection() { + return this.selectionMode === "multiple"; + }, "isMultipleSelection"), + formatValue: /* @__PURE__ */ __name(function formatValue(value2) { + if (typeof value2 === "string") { + return this.dateFormat ? this.formatDate(new Date(value2), this.dateFormat) : value2; + } + var formattedValue = ""; + if (value2) { + try { + if (this.isSingleSelection()) { + formattedValue = this.formatDateTime(value2); + } else if (this.isMultipleSelection()) { + for (var i = 0; i < value2.length; i++) { + var dateAsString = this.formatDateTime(value2[i]); + formattedValue += dateAsString; + if (i !== value2.length - 1) { + formattedValue += ", "; + } + } + } else if (this.isRangeSelection()) { + if (value2 && value2.length) { + var startDate = value2[0]; + var endDate = value2[1]; + formattedValue = this.formatDateTime(startDate); + if (endDate) { + formattedValue += " - " + this.formatDateTime(endDate); + } + } + } + } catch (err) { + formattedValue = value2; + } + } + return formattedValue; + }, "formatValue"), + formatDateTime: /* @__PURE__ */ __name(function formatDateTime(date) { + var formattedValue = null; + if (date) { + if (this.timeOnly) { + formattedValue = this.formatTime(date); + } else { + formattedValue = this.formatDate(date, this.datePattern); + if (this.showTime) { + formattedValue += " " + this.formatTime(date); + } + } + } + return formattedValue; + }, "formatDateTime"), + formatDate: /* @__PURE__ */ __name(function formatDate(date, format) { + if (!date) { + return ""; + } + var iFormat; + var lookAhead = /* @__PURE__ */ __name(function lookAhead2(match) { + var matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match; + if (matches) { + iFormat++; + } + return matches; + }, "lookAhead"), formatNumber = /* @__PURE__ */ __name(function formatNumber2(match, value2, len) { + var num = "" + value2; + if (lookAhead(match)) { + while (num.length < len) { + num = "0" + num; + } + } + return num; + }, "formatNumber"), formatName = /* @__PURE__ */ __name(function formatName2(match, value2, shortNames, longNames) { + return lookAhead(match) ? longNames[value2] : shortNames[value2]; + }, "formatName"); + var output = ""; + var literal = false; + if (date) { + for (iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { + literal = false; + } else { + output += format.charAt(iFormat); + } + } else { + switch (format.charAt(iFormat)) { + case "d": + output += formatNumber("d", date.getDate(), 2); + break; + case "D": + output += formatName("D", date.getDay(), this.$primevue.config.locale.dayNamesShort, this.$primevue.config.locale.dayNames); + break; + case "o": + output += formatNumber("o", Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 864e5), 3); + break; + case "m": + output += formatNumber("m", date.getMonth() + 1, 2); + break; + case "M": + output += formatName("M", date.getMonth(), this.$primevue.config.locale.monthNamesShort, this.$primevue.config.locale.monthNames); + break; + case "y": + output += lookAhead("y") ? date.getFullYear() : (date.getFullYear() % 100 < 10 ? "0" : "") + date.getFullYear() % 100; + break; + case "@": + output += date.getTime(); + break; + case "!": + output += date.getTime() * 1e4 + this.ticksTo1970; + break; + case "'": + if (lookAhead("'")) { + output += "'"; + } else { + literal = true; + } + break; + default: + output += format.charAt(iFormat); + } + } + } + } + return output; + }, "formatDate"), + formatTime: /* @__PURE__ */ __name(function formatTime(date) { + if (!date) { + return ""; + } + var output = ""; + var hours = date.getHours(); + var minutes = date.getMinutes(); + var seconds = date.getSeconds(); + if (this.hourFormat === "12" && hours > 11 && hours !== 12) { + hours -= 12; + } + if (this.hourFormat === "12") { + output += hours === 0 ? 12 : hours < 10 ? "0" + hours : hours; + } else { + output += hours < 10 ? "0" + hours : hours; + } + output += ":"; + output += minutes < 10 ? "0" + minutes : minutes; + if (this.showSeconds) { + output += ":"; + output += seconds < 10 ? "0" + seconds : seconds; + } + if (this.hourFormat === "12") { + output += date.getHours() > 11 ? " ".concat(this.$primevue.config.locale.pm) : " ".concat(this.$primevue.config.locale.am); + } + return output; + }, "formatTime"), + onTodayButtonClick: /* @__PURE__ */ __name(function onTodayButtonClick(event2) { + var date = /* @__PURE__ */ new Date(); + var dateMeta = { + day: date.getDate(), + month: date.getMonth(), + year: date.getFullYear(), + otherMonth: date.getMonth() !== this.currentMonth || date.getFullYear() !== this.currentYear, + today: true, + selectable: true + }; + this.onDateSelect(null, dateMeta); + this.$emit("today-click", date); + event2.preventDefault(); + }, "onTodayButtonClick"), + onClearButtonClick: /* @__PURE__ */ __name(function onClearButtonClick(event2) { + this.updateModel(null); + this.overlayVisible = false; + this.$emit("clear-click", event2); + event2.preventDefault(); + }, "onClearButtonClick"), + onTimePickerElementMouseDown: /* @__PURE__ */ __name(function onTimePickerElementMouseDown(event2, type, direction) { + if (this.isEnabled()) { + this.repeat(event2, null, type, direction); + event2.preventDefault(); + } + }, "onTimePickerElementMouseDown"), + onTimePickerElementMouseUp: /* @__PURE__ */ __name(function onTimePickerElementMouseUp(event2) { + if (this.isEnabled()) { + this.clearTimePickerTimer(); + this.updateModelTime(); + event2.preventDefault(); + } + }, "onTimePickerElementMouseUp"), + onTimePickerElementMouseLeave: /* @__PURE__ */ __name(function onTimePickerElementMouseLeave() { + this.clearTimePickerTimer(); + }, "onTimePickerElementMouseLeave"), + repeat: /* @__PURE__ */ __name(function repeat(event2, interval, type, direction) { + var _this9 = this; + var i = interval || 500; + this.clearTimePickerTimer(); + this.timePickerTimer = setTimeout(function() { + _this9.repeat(event2, 100, type, direction); + }, i); + switch (type) { + case 0: + if (direction === 1) this.incrementHour(event2); + else this.decrementHour(event2); + break; + case 1: + if (direction === 1) this.incrementMinute(event2); + else this.decrementMinute(event2); + break; + case 2: + if (direction === 1) this.incrementSecond(event2); + else this.decrementSecond(event2); + break; + } + }, "repeat"), + convertTo24Hour: /* @__PURE__ */ __name(function convertTo24Hour(hours, pm) { + if (this.hourFormat == "12") { + if (hours === 12) { + return pm ? 12 : 0; + } else { + return pm ? hours + 12 : hours; + } + } + return hours; + }, "convertTo24Hour"), + validateTime: /* @__PURE__ */ __name(function validateTime(hour, minute, second, pm) { + var value2 = this.isComparable() ? this.d_value : this.viewDate; + var convertedHour = this.convertTo24Hour(hour, pm); + if (this.isRangeSelection()) { + value2 = this.d_value[1] || this.d_value[0]; + } + if (this.isMultipleSelection()) { + value2 = this.d_value[this.d_value.length - 1]; + } + var valueDateString = value2 ? value2.toDateString() : null; + if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) { + if (this.minDate.getHours() > convertedHour) { + return false; + } + if (this.minDate.getHours() === convertedHour) { + if (this.minDate.getMinutes() > minute) { + return false; + } + if (this.minDate.getMinutes() === minute) { + if (this.minDate.getSeconds() > second) { + return false; + } + } + } + } + if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) { + if (this.maxDate.getHours() < convertedHour) { + return false; + } + if (this.maxDate.getHours() === convertedHour) { + if (this.maxDate.getMinutes() < minute) { + return false; + } + if (this.maxDate.getMinutes() === minute) { + if (this.maxDate.getSeconds() < second) { + return false; + } + } + } + } + return true; + }, "validateTime"), + incrementHour: /* @__PURE__ */ __name(function incrementHour(event2) { + var prevHour = this.currentHour; + var newHour = this.currentHour + Number(this.stepHour); + var newPM = this.pm; + if (this.hourFormat == "24") newHour = newHour >= 24 ? newHour - 24 : newHour; + else if (this.hourFormat == "12") { + if (prevHour < 12 && newHour > 11) { + newPM = !this.pm; + } + newHour = newHour >= 13 ? newHour - 12 : newHour; + } + if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) { + this.currentHour = newHour; + this.pm = newPM; + } + event2.preventDefault(); + }, "incrementHour"), + decrementHour: /* @__PURE__ */ __name(function decrementHour(event2) { + var newHour = this.currentHour - this.stepHour; + var newPM = this.pm; + if (this.hourFormat == "24") newHour = newHour < 0 ? 24 + newHour : newHour; + else if (this.hourFormat == "12") { + if (this.currentHour === 12) { + newPM = !this.pm; + } + newHour = newHour <= 0 ? 12 + newHour : newHour; + } + if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) { + this.currentHour = newHour; + this.pm = newPM; + } + event2.preventDefault(); + }, "decrementHour"), + incrementMinute: /* @__PURE__ */ __name(function incrementMinute(event2) { + var newMinute = this.currentMinute + Number(this.stepMinute); + if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) { + this.currentMinute = newMinute > 59 ? newMinute - 60 : newMinute; + } + event2.preventDefault(); + }, "incrementMinute"), + decrementMinute: /* @__PURE__ */ __name(function decrementMinute(event2) { + var newMinute = this.currentMinute - this.stepMinute; + newMinute = newMinute < 0 ? 60 + newMinute : newMinute; + if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) { + this.currentMinute = newMinute; + } + event2.preventDefault(); + }, "decrementMinute"), + incrementSecond: /* @__PURE__ */ __name(function incrementSecond(event2) { + var newSecond = this.currentSecond + Number(this.stepSecond); + if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) { + this.currentSecond = newSecond > 59 ? newSecond - 60 : newSecond; + } + event2.preventDefault(); + }, "incrementSecond"), + decrementSecond: /* @__PURE__ */ __name(function decrementSecond(event2) { + var newSecond = this.currentSecond - this.stepSecond; + newSecond = newSecond < 0 ? 60 + newSecond : newSecond; + if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) { + this.currentSecond = newSecond; + } + event2.preventDefault(); + }, "decrementSecond"), + updateModelTime: /* @__PURE__ */ __name(function updateModelTime() { + var _this10 = this; + this.timePickerChange = true; + var value2 = this.isComparable() ? this.d_value : this.viewDate; + if (this.isRangeSelection()) { + value2 = this.d_value[1] || this.d_value[0]; + } + if (this.isMultipleSelection()) { + value2 = this.d_value[this.d_value.length - 1]; + } + value2 = value2 ? new Date(value2.getTime()) : /* @__PURE__ */ new Date(); + if (this.hourFormat == "12") { + if (this.currentHour === 12) value2.setHours(this.pm ? 12 : 0); + else value2.setHours(this.pm ? this.currentHour + 12 : this.currentHour); + } else { + value2.setHours(this.currentHour); + } + value2.setMinutes(this.currentMinute); + value2.setSeconds(this.currentSecond); + if (this.isRangeSelection()) { + if (this.d_value[1]) value2 = [this.d_value[0], value2]; + else value2 = [value2, null]; + } + if (this.isMultipleSelection()) { + value2 = [].concat(_toConsumableArray$d(this.d_value.slice(0, -1)), [value2]); + } + this.updateModel(value2); + this.$emit("date-select", value2); + setTimeout(function() { + return _this10.timePickerChange = false; + }, 0); + }, "updateModelTime"), + toggleAMPM: /* @__PURE__ */ __name(function toggleAMPM(event2) { + var validHour = this.validateTime(this.currentHour, this.currentMinute, this.currentSecond, !this.pm); + if (!validHour && (this.maxDate || this.minDate)) return; + this.pm = !this.pm; + this.updateModelTime(); + event2.preventDefault(); + }, "toggleAMPM"), + clearTimePickerTimer: /* @__PURE__ */ __name(function clearTimePickerTimer() { + if (this.timePickerTimer) { + clearInterval(this.timePickerTimer); + } + }, "clearTimePickerTimer"), + onMonthSelect: /* @__PURE__ */ __name(function onMonthSelect(event2, _ref) { + _ref.month; + var index = _ref.index; + if (this.view === "month") { + this.onDateSelect(event2, { + year: this.currentYear, + month: index, + day: 1, + selectable: true + }); + } else { + this.currentMonth = index; + this.currentView = "date"; + this.$emit("month-change", { + month: this.currentMonth + 1, + year: this.currentYear + }); + } + setTimeout(this.updateFocus, 0); + }, "onMonthSelect"), + onYearSelect: /* @__PURE__ */ __name(function onYearSelect(event2, year2) { + if (this.view === "year") { + this.onDateSelect(event2, { + year: year2.value, + month: 0, + day: 1, + selectable: true + }); + } else { + this.currentYear = year2.value; + this.currentView = "month"; + this.$emit("year-change", { + month: this.currentMonth + 1, + year: this.currentYear + }); + } + setTimeout(this.updateFocus, 0); + }, "onYearSelect"), + updateCurrentMetaData: /* @__PURE__ */ __name(function updateCurrentMetaData() { + var viewDate2 = this.viewDate; + this.currentMonth = viewDate2.getMonth(); + this.currentYear = viewDate2.getFullYear(); + if (this.showTime || this.timeOnly) { + this.updateCurrentTimeMeta(viewDate2); + } + }, "updateCurrentMetaData"), + isValidSelection: /* @__PURE__ */ __name(function isValidSelection(value2) { + var _this11 = this; + if (value2 == null) { + return true; + } + var isValid = true; + if (this.isSingleSelection()) { + if (!this.isSelectable(value2.getDate(), value2.getMonth(), value2.getFullYear(), false)) { + isValid = false; + } + } else if (value2.every(function(v) { + return _this11.isSelectable(v.getDate(), v.getMonth(), v.getFullYear(), false); + })) { + if (this.isRangeSelection()) { + isValid = value2.length > 1 && value2[1] >= value2[0]; + } + } + return isValid; + }, "isValidSelection"), + parseValue: /* @__PURE__ */ __name(function parseValue(text) { + if (!text || text.trim().length === 0) { + return null; + } + var value2; + if (this.isSingleSelection()) { + value2 = this.parseDateTime(text); + } else if (this.isMultipleSelection()) { + var tokens = text.split(","); + value2 = []; + var _iterator3 = _createForOfIteratorHelper$4(tokens), _step3; + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { + var token = _step3.value; + value2.push(this.parseDateTime(token.trim())); + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + } else if (this.isRangeSelection()) { + var _tokens = text.split(" - "); + value2 = []; + for (var i = 0; i < _tokens.length; i++) { + value2[i] = this.parseDateTime(_tokens[i].trim()); + } + } + return value2; + }, "parseValue"), + parseDateTime: /* @__PURE__ */ __name(function parseDateTime(text) { + var date; + var parts = text.split(" "); + if (this.timeOnly) { + date = /* @__PURE__ */ new Date(); + this.populateTime(date, parts[0], parts[1]); + } else { + var dateFormat = this.datePattern; + if (this.showTime) { + date = this.parseDate(parts[0], dateFormat); + this.populateTime(date, parts[1], parts[2]); + } else { + date = this.parseDate(text, dateFormat); + } + } + return date; + }, "parseDateTime"), + populateTime: /* @__PURE__ */ __name(function populateTime(value2, timeString, ampm) { + if (this.hourFormat == "12" && !ampm) { + throw "Invalid Time"; + } + this.pm = ampm === this.$primevue.config.locale.pm || ampm === this.$primevue.config.locale.pm.toLowerCase(); + var time = this.parseTime(timeString); + value2.setHours(time.hour); + value2.setMinutes(time.minute); + value2.setSeconds(time.second); + }, "populateTime"), + parseTime: /* @__PURE__ */ __name(function parseTime(value2) { + var tokens = value2.split(":"); + var validTokenLength = this.showSeconds ? 3 : 2; + var regex = /^[0-9][0-9]$/; + if (tokens.length !== validTokenLength || !tokens[0].match(regex) || !tokens[1].match(regex) || this.showSeconds && !tokens[2].match(regex)) { + throw "Invalid time"; + } + var h = parseInt(tokens[0]); + var m = parseInt(tokens[1]); + var s = this.showSeconds ? parseInt(tokens[2]) : null; + if (isNaN(h) || isNaN(m) || h > 23 || m > 59 || this.hourFormat == "12" && h > 12 || this.showSeconds && (isNaN(s) || s > 59)) { + throw "Invalid time"; + } else { + if (this.hourFormat == "12" && h !== 12 && this.pm) { + h += 12; + } else if (this.hourFormat == "12" && h == 12 && !this.pm) { + h = 0; + } + return { + hour: h, + minute: m, + second: s + }; + } + }, "parseTime"), + parseDate: /* @__PURE__ */ __name(function parseDate(value2, format) { + if (format == null || value2 == null) { + throw "Invalid arguments"; + } + value2 = _typeof$l(value2) === "object" ? value2.toString() : value2 + ""; + if (value2 === "") { + return null; + } + var iFormat, dim, extra, iValue = 0, shortYearCutoff = typeof this.shortYearCutoff !== "string" ? this.shortYearCutoff : (/* @__PURE__ */ new Date()).getFullYear() % 100 + parseInt(this.shortYearCutoff, 10), year2 = -1, month2 = -1, day2 = -1, doy = -1, literal = false, date, lookAhead = /* @__PURE__ */ __name(function lookAhead2(match) { + var matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match; + if (matches) { + iFormat++; + } + return matches; + }, "lookAhead"), getNumber = /* @__PURE__ */ __name(function getNumber2(match) { + var isDoubled = lookAhead(match), size = match === "@" ? 14 : match === "!" ? 20 : match === "y" && isDoubled ? 4 : match === "o" ? 3 : 2, minSize = match === "y" ? size : 1, digits = new RegExp("^\\d{" + minSize + "," + size + "}"), num = value2.substring(iValue).match(digits); + if (!num) { + throw "Missing number at position " + iValue; + } + iValue += num[0].length; + return parseInt(num[0], 10); + }, "getNumber"), getName = /* @__PURE__ */ __name(function getName2(match, shortNames, longNames) { + var index = -1; + var arr = lookAhead(match) ? longNames : shortNames; + var names = []; + for (var i = 0; i < arr.length; i++) { + names.push([i, arr[i]]); + } + names.sort(function(a, b) { + return -(a[1].length - b[1].length); + }); + for (var _i = 0; _i < names.length; _i++) { + var name4 = names[_i][1]; + if (value2.substr(iValue, name4.length).toLowerCase() === name4.toLowerCase()) { + index = names[_i][0]; + iValue += name4.length; + break; + } + } + if (index !== -1) { + return index + 1; + } else { + throw "Unknown name at position " + iValue; + } + }, "getName"), checkLiteral = /* @__PURE__ */ __name(function checkLiteral2() { + if (value2.charAt(iValue) !== format.charAt(iFormat)) { + throw "Unexpected literal at position " + iValue; + } + iValue++; + }, "checkLiteral"); + if (this.currentView === "month") { + day2 = 1; + } + if (this.currentView === "year") { + day2 = 1; + month2 = 1; + } + for (iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { + literal = false; + } else { + checkLiteral(); + } + } else { + switch (format.charAt(iFormat)) { + case "d": + day2 = getNumber("d"); + break; + case "D": + getName("D", this.$primevue.config.locale.dayNamesShort, this.$primevue.config.locale.dayNames); + break; + case "o": + doy = getNumber("o"); + break; + case "m": + month2 = getNumber("m"); + break; + case "M": + month2 = getName("M", this.$primevue.config.locale.monthNamesShort, this.$primevue.config.locale.monthNames); + break; + case "y": + year2 = getNumber("y"); + break; + case "@": + date = new Date(getNumber("@")); + year2 = date.getFullYear(); + month2 = date.getMonth() + 1; + day2 = date.getDate(); + break; + case "!": + date = new Date((getNumber("!") - this.ticksTo1970) / 1e4); + year2 = date.getFullYear(); + month2 = date.getMonth() + 1; + day2 = date.getDate(); + break; + case "'": + if (lookAhead("'")) { + checkLiteral(); + } else { + literal = true; + } + break; + default: + checkLiteral(); + } + } + } + if (iValue < value2.length) { + extra = value2.substr(iValue); + if (!/^\s+/.test(extra)) { + throw "Extra/unparsed characters found in date: " + extra; + } + } + if (year2 === -1) { + year2 = (/* @__PURE__ */ new Date()).getFullYear(); + } else if (year2 < 100) { + year2 += (/* @__PURE__ */ new Date()).getFullYear() - (/* @__PURE__ */ new Date()).getFullYear() % 100 + (year2 <= shortYearCutoff ? 0 : -100); + } + if (doy > -1) { + month2 = 1; + day2 = doy; + do { + dim = this.getDaysCountInMonth(year2, month2 - 1); + if (day2 <= dim) { + break; + } + month2++; + day2 -= dim; + } while (true); + } + date = this.daylightSavingAdjust(new Date(year2, month2 - 1, day2)); + if (date.getFullYear() !== year2 || date.getMonth() + 1 !== month2 || date.getDate() !== day2) { + throw "Invalid date"; + } + return date; + }, "parseDate"), + getWeekNumber: /* @__PURE__ */ __name(function getWeekNumber(date) { + var checkDate = new Date(date.getTime()); + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); + var time = checkDate.getTime(); + checkDate.setMonth(0); + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate.getTime()) / 864e5) / 7) + 1; + }, "getWeekNumber"), + onDateCellKeydown: /* @__PURE__ */ __name(function onDateCellKeydown(event2, date, groupIndex) { + var cellContent = event2.currentTarget; + var cell = cellContent.parentElement; + var cellIndex = getIndex(cell); + switch (event2.code) { + case "ArrowDown": { + cellContent.tabIndex = "-1"; + var nextRow = cell.parentElement.nextElementSibling; + if (nextRow) { + var tableRowIndex = getIndex(cell.parentElement); + var tableRows = Array.from(cell.parentElement.parentElement.children); + var nextTableRows = tableRows.slice(tableRowIndex + 1); + var hasNextFocusableDate = nextTableRows.find(function(el) { + var focusCell2 = el.children[cellIndex].children[0]; + return !getAttribute(focusCell2, "data-p-disabled"); + }); + if (hasNextFocusableDate) { + var focusCell = hasNextFocusableDate.children[cellIndex].children[0]; + focusCell.tabIndex = "0"; + focusCell.focus(); + } else { + this.navigationState = { + backward: false + }; + this.navForward(event2); + } + } else { + this.navigationState = { + backward: false + }; + this.navForward(event2); + } + event2.preventDefault(); + break; + } + case "ArrowUp": { + cellContent.tabIndex = "-1"; + if (event2.altKey) { + this.overlayVisible = false; + this.focused = true; + } else { + var prevRow = cell.parentElement.previousElementSibling; + if (prevRow) { + var _tableRowIndex = getIndex(cell.parentElement); + var _tableRows = Array.from(cell.parentElement.parentElement.children); + var prevTableRows = _tableRows.slice(0, _tableRowIndex).reverse(); + var _hasNextFocusableDate = prevTableRows.find(function(el) { + var focusCell2 = el.children[cellIndex].children[0]; + return !getAttribute(focusCell2, "data-p-disabled"); + }); + if (_hasNextFocusableDate) { + var _focusCell = _hasNextFocusableDate.children[cellIndex].children[0]; + _focusCell.tabIndex = "0"; + _focusCell.focus(); + } else { + this.navigationState = { + backward: true + }; + this.navBackward(event2); + } + } else { + this.navigationState = { + backward: true + }; + this.navBackward(event2); + } + } + event2.preventDefault(); + break; + } + case "ArrowLeft": { + cellContent.tabIndex = "-1"; + var prevCell = cell.previousElementSibling; + if (prevCell) { + var cells = Array.from(cell.parentElement.children); + var prevCells = cells.slice(0, cellIndex).reverse(); + var _hasNextFocusableDate2 = prevCells.find(function(el) { + var focusCell2 = el.children[0]; + return !getAttribute(focusCell2, "data-p-disabled"); + }); + if (_hasNextFocusableDate2) { + var _focusCell2 = _hasNextFocusableDate2.children[0]; + _focusCell2.tabIndex = "0"; + _focusCell2.focus(); + } else { + this.navigateToMonth(event2, true, groupIndex); + } + } else { + this.navigateToMonth(event2, true, groupIndex); + } + event2.preventDefault(); + break; + } + case "ArrowRight": { + cellContent.tabIndex = "-1"; + var nextCell = cell.nextElementSibling; + if (nextCell) { + var _cells = Array.from(cell.parentElement.children); + var nextCells = _cells.slice(cellIndex + 1); + var _hasNextFocusableDate3 = nextCells.find(function(el) { + var focusCell2 = el.children[0]; + return !getAttribute(focusCell2, "data-p-disabled"); + }); + if (_hasNextFocusableDate3) { + var _focusCell3 = _hasNextFocusableDate3.children[0]; + _focusCell3.tabIndex = "0"; + _focusCell3.focus(); + } else { + this.navigateToMonth(event2, false, groupIndex); + } + } else { + this.navigateToMonth(event2, false, groupIndex); + } + event2.preventDefault(); + break; + } + case "Enter": + case "NumpadEnter": + case "Space": { + this.onDateSelect(event2, date); + event2.preventDefault(); + break; + } + case "Escape": { + this.overlayVisible = false; + event2.preventDefault(); + break; + } + case "Tab": { + if (!this.inline) { + this.trapFocus(event2); + } + break; + } + case "Home": { + cellContent.tabIndex = "-1"; + var currentRow = cell.parentElement; + var _focusCell4 = currentRow.children[0].children[0]; + if (getAttribute(_focusCell4, "data-p-disabled")) { + this.navigateToMonth(event2, true, groupIndex); + } else { + _focusCell4.tabIndex = "0"; + _focusCell4.focus(); + } + event2.preventDefault(); + break; + } + case "End": { + cellContent.tabIndex = "-1"; + var _currentRow = cell.parentElement; + var _focusCell5 = _currentRow.children[_currentRow.children.length - 1].children[0]; + if (getAttribute(_focusCell5, "data-p-disabled")) { + this.navigateToMonth(event2, false, groupIndex); + } else { + _focusCell5.tabIndex = "0"; + _focusCell5.focus(); + } + event2.preventDefault(); + break; + } + case "PageUp": { + cellContent.tabIndex = "-1"; + if (event2.shiftKey) { + this.navigationState = { + backward: true + }; + this.navBackward(event2); + } else this.navigateToMonth(event2, true, groupIndex); + event2.preventDefault(); + break; + } + case "PageDown": { + cellContent.tabIndex = "-1"; + if (event2.shiftKey) { + this.navigationState = { + backward: false + }; + this.navForward(event2); + } else this.navigateToMonth(event2, false, groupIndex); + event2.preventDefault(); + break; + } + } + }, "onDateCellKeydown"), + navigateToMonth: /* @__PURE__ */ __name(function navigateToMonth(event2, prev, groupIndex) { + if (prev) { + if (this.numberOfMonths === 1 || groupIndex === 0) { + this.navigationState = { + backward: true + }; + this.navBackward(event2); + } else { + var prevMonthContainer = this.overlay.children[groupIndex - 1]; + var cells = find(prevMonthContainer, 'table td span:not([data-p-disabled="true"]):not([data-p-ink="true"])'); + var focusCell = cells[cells.length - 1]; + focusCell.tabIndex = "0"; + focusCell.focus(); + } + } else { + if (this.numberOfMonths === 1 || groupIndex === this.numberOfMonths - 1) { + this.navigationState = { + backward: false + }; + this.navForward(event2); + } else { + var nextMonthContainer = this.overlay.children[groupIndex + 1]; + var _focusCell6 = findSingle(nextMonthContainer, 'table td span:not([data-p-disabled="true"]):not([data-p-ink="true"])'); + _focusCell6.tabIndex = "0"; + _focusCell6.focus(); + } + } + }, "navigateToMonth"), + onMonthCellKeydown: /* @__PURE__ */ __name(function onMonthCellKeydown(event2, index) { + var cell = event2.currentTarget; + switch (event2.code) { + case "ArrowUp": + case "ArrowDown": { + cell.tabIndex = "-1"; + var cells = cell.parentElement.children; + var cellIndex = getIndex(cell); + var nextCell = cells[event2.code === "ArrowDown" ? cellIndex + 3 : cellIndex - 3]; + if (nextCell) { + nextCell.tabIndex = "0"; + nextCell.focus(); + } + event2.preventDefault(); + break; + } + case "ArrowLeft": { + cell.tabIndex = "-1"; + var prevCell = cell.previousElementSibling; + if (prevCell) { + prevCell.tabIndex = "0"; + prevCell.focus(); + } else { + this.navigationState = { + backward: true + }; + this.navBackward(event2); + } + event2.preventDefault(); + break; + } + case "ArrowRight": { + cell.tabIndex = "-1"; + var _nextCell = cell.nextElementSibling; + if (_nextCell) { + _nextCell.tabIndex = "0"; + _nextCell.focus(); + } else { + this.navigationState = { + backward: false + }; + this.navForward(event2); + } + event2.preventDefault(); + break; + } + case "PageUp": { + if (event2.shiftKey) return; + this.navigationState = { + backward: true + }; + this.navBackward(event2); + break; + } + case "PageDown": { + if (event2.shiftKey) return; + this.navigationState = { + backward: false + }; + this.navForward(event2); + break; + } + case "Enter": + case "NumpadEnter": + case "Space": { + this.onMonthSelect(event2, index); + event2.preventDefault(); + break; + } + case "Escape": { + this.overlayVisible = false; + event2.preventDefault(); + break; + } + case "Tab": { + this.trapFocus(event2); + break; + } + } + }, "onMonthCellKeydown"), + onYearCellKeydown: /* @__PURE__ */ __name(function onYearCellKeydown(event2, index) { + var cell = event2.currentTarget; + switch (event2.code) { + case "ArrowUp": + case "ArrowDown": { + cell.tabIndex = "-1"; + var cells = cell.parentElement.children; + var cellIndex = getIndex(cell); + var nextCell = cells[event2.code === "ArrowDown" ? cellIndex + 2 : cellIndex - 2]; + if (nextCell) { + nextCell.tabIndex = "0"; + nextCell.focus(); + } + event2.preventDefault(); + break; + } + case "ArrowLeft": { + cell.tabIndex = "-1"; + var prevCell = cell.previousElementSibling; + if (prevCell) { + prevCell.tabIndex = "0"; + prevCell.focus(); + } else { + this.navigationState = { + backward: true + }; + this.navBackward(event2); + } + event2.preventDefault(); + break; + } + case "ArrowRight": { + cell.tabIndex = "-1"; + var _nextCell2 = cell.nextElementSibling; + if (_nextCell2) { + _nextCell2.tabIndex = "0"; + _nextCell2.focus(); + } else { + this.navigationState = { + backward: false + }; + this.navForward(event2); + } + event2.preventDefault(); + break; + } + case "PageUp": { + if (event2.shiftKey) return; + this.navigationState = { + backward: true + }; + this.navBackward(event2); + break; + } + case "PageDown": { + if (event2.shiftKey) return; + this.navigationState = { + backward: false + }; + this.navForward(event2); + break; + } + case "Enter": + case "NumpadEnter": + case "Space": { + this.onYearSelect(event2, index); + event2.preventDefault(); + break; + } + case "Escape": { + this.overlayVisible = false; + event2.preventDefault(); + break; + } + case "Tab": { + this.trapFocus(event2); + break; + } + } + }, "onYearCellKeydown"), + updateFocus: /* @__PURE__ */ __name(function updateFocus() { + var cell; + if (this.navigationState) { + if (this.navigationState.button) { + this.initFocusableCell(); + if (this.navigationState.backward) this.previousButton.focus(); + else this.nextButton.focus(); + } else { + if (this.navigationState.backward) { + var cells; + if (this.currentView === "month") { + cells = find(this.overlay, '[data-pc-section="monthview"] [data-pc-section="month"]:not([data-p-disabled="true"])'); + } else if (this.currentView === "year") { + cells = find(this.overlay, '[data-pc-section="yearview"] [data-pc-section="year"]:not([data-p-disabled="true"])'); + } else { + cells = find(this.overlay, 'table td span:not([data-p-disabled="true"]):not([data-p-ink="true"])'); + } + if (cells && cells.length > 0) { + cell = cells[cells.length - 1]; + } + } else { + if (this.currentView === "month") { + cell = findSingle(this.overlay, '[data-pc-section="monthview"] [data-pc-section="month"]:not([data-p-disabled="true"])'); + } else if (this.currentView === "year") { + cell = findSingle(this.overlay, '[data-pc-section="yearview"] [data-pc-section="year"]:not([data-p-disabled="true"])'); + } else { + cell = findSingle(this.overlay, 'table td span:not([data-p-disabled="true"]):not([data-p-ink="true"])'); + } + } + if (cell) { + cell.tabIndex = "0"; + cell.focus(); + } + } + this.navigationState = null; + } else { + this.initFocusableCell(); + } + }, "updateFocus"), + initFocusableCell: /* @__PURE__ */ __name(function initFocusableCell() { + var cell; + if (this.currentView === "month") { + var cells = find(this.overlay, '[data-pc-section="monthview"] [data-pc-section="month"]'); + var selectedCell = findSingle(this.overlay, '[data-pc-section="monthview"] [data-pc-section="month"][data-p-selected="true"]'); + cells.forEach(function(cell2) { + return cell2.tabIndex = -1; + }); + cell = selectedCell || cells[0]; + } else if (this.currentView === "year") { + var _cells2 = find(this.overlay, '[data-pc-section="yearview"] [data-pc-section="year"]'); + var _selectedCell = findSingle(this.overlay, '[data-pc-section="yearview"] [data-pc-section="year"][data-p-selected="true"]'); + _cells2.forEach(function(cell2) { + return cell2.tabIndex = -1; + }); + cell = _selectedCell || _cells2[0]; + } else { + cell = findSingle(this.overlay, 'span[data-p-selected="true"]'); + if (!cell) { + var todayCell = findSingle(this.overlay, 'td[data-p-today="true"] span:not([data-p-disabled="true"]):not([data-p-ink="true"])'); + if (todayCell) cell = todayCell; + else cell = findSingle(this.overlay, '.p-datepicker-calendar td span:not([data-p-disabled="true"]):not([data-p-ink="true"])'); + } + } + if (cell) { + cell.tabIndex = "0"; + this.preventFocus = false; + } + }, "initFocusableCell"), + trapFocus: /* @__PURE__ */ __name(function trapFocus(event2) { + event2.preventDefault(); + var focusableElements = getFocusableElements(this.overlay); + if (focusableElements && focusableElements.length > 0) { + if (!document.activeElement) { + focusableElements[0].focus(); + } else { + var focusedIndex = focusableElements.indexOf(document.activeElement); + if (event2.shiftKey) { + if (focusedIndex === -1 || focusedIndex === 0) focusableElements[focusableElements.length - 1].focus(); + else focusableElements[focusedIndex - 1].focus(); + } else { + if (focusedIndex === -1) { + if (this.timeOnly) { + focusableElements[0].focus(); + } else { + var spanIndex = null; + for (var i = 0; i < focusableElements.length; i++) { + if (focusableElements[i].tagName === "SPAN") { + spanIndex = i; + break; + } + } + focusableElements[spanIndex].focus(); + } + } else if (focusedIndex === focusableElements.length - 1) focusableElements[0].focus(); + else focusableElements[focusedIndex + 1].focus(); + } + } + } + }, "trapFocus"), + onContainerButtonKeydown: /* @__PURE__ */ __name(function onContainerButtonKeydown(event2) { + switch (event2.code) { + case "Tab": + this.trapFocus(event2); + break; + case "Escape": + this.overlayVisible = false; + event2.preventDefault(); + break; + } + this.$emit("keydown", event2); + }, "onContainerButtonKeydown"), + onInput: /* @__PURE__ */ __name(function onInput(event2) { + try { + this.selectionStart = this.input.selectionStart; + this.selectionEnd = this.input.selectionEnd; + var value2 = this.parseValue(event2.target.value); + if (this.isValidSelection(value2)) { + this.typeUpdate = true; + this.updateModel(value2); + this.updateCurrentMetaData(); + } + } catch (err) { + } + this.$emit("input", event2); + }, "onInput"), + onInputClick: /* @__PURE__ */ __name(function onInputClick() { + if (this.showOnFocus && this.isEnabled() && !this.overlayVisible) { + this.overlayVisible = true; + } + }, "onInputClick"), + onFocus: /* @__PURE__ */ __name(function onFocus2(event2) { + if (this.showOnFocus && this.isEnabled()) { + this.overlayVisible = true; + } + this.focused = true; + this.$emit("focus", event2); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur(event2) { + var _this$formField$onBlu, _this$formField; + this.$emit("blur", { + originalEvent: event2, + value: event2.target.value + }); + (_this$formField$onBlu = (_this$formField = this.formField).onBlur) === null || _this$formField$onBlu === void 0 || _this$formField$onBlu.call(_this$formField); + this.focused = false; + event2.target.value = this.formatValue(this.d_value); + }, "onBlur"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown(event2) { + if (event2.code === "ArrowDown" && this.overlay) { + this.trapFocus(event2); + } else if (event2.code === "ArrowDown" && !this.overlay) { + this.overlayVisible = true; + } else if (event2.code === "Escape") { + if (this.overlayVisible) { + this.overlayVisible = false; + event2.preventDefault(); + } + } else if (event2.code === "Tab") { + if (this.overlay) { + getFocusableElements(this.overlay).forEach(function(el) { + return el.tabIndex = "-1"; + }); + } + if (this.overlayVisible) { + this.overlayVisible = false; + } + } else if (event2.code === "Enter") { + var _event$target$value; + if (this.manualInput && event2.target.value !== null && ((_event$target$value = event2.target.value) === null || _event$target$value === void 0 ? void 0 : _event$target$value.trim()) !== "") { + try { + var value2 = this.parseValue(event2.target.value); + if (this.isValidSelection(value2)) { + this.overlayVisible = false; + } + } catch (err) { + } + } + this.$emit("keydown", event2); + } + }, "onKeyDown"), + overlayRef: /* @__PURE__ */ __name(function overlayRef(el) { + this.overlay = el; + }, "overlayRef"), + inputRef: /* @__PURE__ */ __name(function inputRef(el) { + this.input = el ? el.$el : void 0; + }, "inputRef"), + previousButtonRef: /* @__PURE__ */ __name(function previousButtonRef(el) { + this.previousButton = el ? el.$el : void 0; + }, "previousButtonRef"), + nextButtonRef: /* @__PURE__ */ __name(function nextButtonRef(el) { + this.nextButton = el ? el.$el : void 0; + }, "nextButtonRef"), + getMonthName: /* @__PURE__ */ __name(function getMonthName(index) { + return this.$primevue.config.locale.monthNames[index]; + }, "getMonthName"), + getYear: /* @__PURE__ */ __name(function getYear(month2) { + return this.currentView === "month" ? this.currentYear : month2.year; + }, "getYear"), + onOverlayClick: /* @__PURE__ */ __name(function onOverlayClick(event2) { + event2.stopPropagation(); + if (!this.inline) { + OverlayEventBus.emit("overlay-click", { + originalEvent: event2, + target: this.$el + }); + } + }, "onOverlayClick"), + onOverlayKeyDown: /* @__PURE__ */ __name(function onOverlayKeyDown(event2) { + switch (event2.code) { + case "Escape": + if (!this.inline) { + this.input.focus(); + this.overlayVisible = false; + } + break; + } + }, "onOverlayKeyDown"), + onOverlayMouseUp: /* @__PURE__ */ __name(function onOverlayMouseUp(event2) { + this.onOverlayClick(event2); + }, "onOverlayMouseUp"), + createResponsiveStyle: /* @__PURE__ */ __name(function createResponsiveStyle() { + if (this.numberOfMonths > 1 && this.responsiveOptions && !this.isUnstyled) { + if (!this.responsiveStyleElement) { + var _this$$primevue; + this.responsiveStyleElement = document.createElement("style"); + this.responsiveStyleElement.type = "text/css"; + setAttribute(this.responsiveStyleElement, "nonce", (_this$$primevue = this.$primevue) === null || _this$$primevue === void 0 || (_this$$primevue = _this$$primevue.config) === null || _this$$primevue === void 0 || (_this$$primevue = _this$$primevue.csp) === null || _this$$primevue === void 0 ? void 0 : _this$$primevue.nonce); + document.body.appendChild(this.responsiveStyleElement); + } + var innerHTML = ""; + if (this.responsiveOptions) { + var comparer = localeComparator(); + var responsiveOptions2 = _toConsumableArray$d(this.responsiveOptions).filter(function(o) { + return !!(o.breakpoint && o.numMonths); + }).sort(function(o1, o2) { + return -1 * comparer(o1.breakpoint, o2.breakpoint); + }); + for (var i = 0; i < responsiveOptions2.length; i++) { + var _responsiveOptions$i = responsiveOptions2[i], breakpoint2 = _responsiveOptions$i.breakpoint, numMonths = _responsiveOptions$i.numMonths; + var styles = "\n .p-datepicker-panel[".concat(this.$attrSelector, "] .p-datepicker-calendar:nth-child(").concat(numMonths, ") .p-datepicker-next-button {\n display: inline-flex;\n }\n "); + for (var j = numMonths; j < this.numberOfMonths; j++) { + styles += "\n .p-datepicker-panel[".concat(this.$attrSelector, "] .p-datepicker-calendar:nth-child(").concat(j + 1, ") {\n display: none;\n }\n "); + } + innerHTML += "\n @media screen and (max-width: ".concat(breakpoint2, ") {\n ").concat(styles, "\n }\n "); + } + } + this.responsiveStyleElement.innerHTML = innerHTML; + } + }, "createResponsiveStyle"), + destroyResponsiveStyleElement: /* @__PURE__ */ __name(function destroyResponsiveStyleElement() { + if (this.responsiveStyleElement) { + this.responsiveStyleElement.remove(); + this.responsiveStyleElement = null; + } + }, "destroyResponsiveStyleElement") + }, + computed: { + viewDate: /* @__PURE__ */ __name(function viewDate() { + var propValue = this.d_value; + if (propValue && Array.isArray(propValue)) { + if (this.isRangeSelection()) { + propValue = this.inline ? propValue[0] : propValue[1] || propValue[0]; + } else if (this.isMultipleSelection()) { + propValue = propValue[propValue.length - 1]; + } + } + if (propValue && typeof propValue !== "string") { + return propValue; + } else { + var today = /* @__PURE__ */ new Date(); + if (this.maxDate && this.maxDate < today) { + return this.maxDate; + } + if (this.minDate && this.minDate > today) { + return this.minDate; + } + return today; + } + }, "viewDate"), + inputFieldValue: /* @__PURE__ */ __name(function inputFieldValue() { + return this.formatValue(this.d_value); + }, "inputFieldValue"), + months: /* @__PURE__ */ __name(function months2() { + var months3 = []; + for (var i = 0; i < this.numberOfMonths; i++) { + var month2 = this.currentMonth + i; + var year2 = this.currentYear; + if (month2 > 11) { + month2 = month2 % 11 - 1; + year2 = year2 + 1; + } + var dates = []; + var firstDay = this.getFirstDayOfMonthIndex(month2, year2); + var daysLength = this.getDaysCountInMonth(month2, year2); + var prevMonthDaysLength = this.getDaysCountInPrevMonth(month2, year2); + var dayNo = 1; + var today = /* @__PURE__ */ new Date(); + var weekNumbers = []; + var monthRows = Math.ceil((daysLength + firstDay) / 7); + for (var _i2 = 0; _i2 < monthRows; _i2++) { + var week = []; + if (_i2 == 0) { + for (var j = prevMonthDaysLength - firstDay + 1; j <= prevMonthDaysLength; j++) { + var prev = this.getPreviousMonthAndYear(month2, year2); + week.push({ + day: j, + month: prev.month, + year: prev.year, + otherMonth: true, + today: this.isToday(today, j, prev.month, prev.year), + selectable: this.isSelectable(j, prev.month, prev.year, true) + }); + } + var remainingDaysLength = 7 - week.length; + for (var _j = 0; _j < remainingDaysLength; _j++) { + week.push({ + day: dayNo, + month: month2, + year: year2, + today: this.isToday(today, dayNo, month2, year2), + selectable: this.isSelectable(dayNo, month2, year2, false) + }); + dayNo++; + } + } else { + for (var _j2 = 0; _j2 < 7; _j2++) { + if (dayNo > daysLength) { + var next = this.getNextMonthAndYear(month2, year2); + week.push({ + day: dayNo - daysLength, + month: next.month, + year: next.year, + otherMonth: true, + today: this.isToday(today, dayNo - daysLength, next.month, next.year), + selectable: this.isSelectable(dayNo - daysLength, next.month, next.year, true) + }); + } else { + week.push({ + day: dayNo, + month: month2, + year: year2, + today: this.isToday(today, dayNo, month2, year2), + selectable: this.isSelectable(dayNo, month2, year2, false) + }); + } + dayNo++; + } + } + if (this.showWeek) { + weekNumbers.push(this.getWeekNumber(new Date(week[0].year, week[0].month, week[0].day))); + } + dates.push(week); + } + months3.push({ + month: month2, + year: year2, + dates, + weekNumbers + }); + } + return months3; + }, "months"), + weekDays: /* @__PURE__ */ __name(function weekDays() { + var weekDays2 = []; + var dayIndex = this.$primevue.config.locale.firstDayOfWeek; + for (var i = 0; i < 7; i++) { + weekDays2.push(this.$primevue.config.locale.dayNamesMin[dayIndex]); + dayIndex = dayIndex == 6 ? 0 : ++dayIndex; + } + return weekDays2; + }, "weekDays"), + ticksTo1970: /* @__PURE__ */ __name(function ticksTo1970() { + return ((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 1e7; + }, "ticksTo1970"), + sundayIndex: /* @__PURE__ */ __name(function sundayIndex() { + return this.$primevue.config.locale.firstDayOfWeek > 0 ? 7 - this.$primevue.config.locale.firstDayOfWeek : 0; + }, "sundayIndex"), + datePattern: /* @__PURE__ */ __name(function datePattern() { + return this.dateFormat || this.$primevue.config.locale.dateFormat; + }, "datePattern"), + monthPickerValues: /* @__PURE__ */ __name(function monthPickerValues() { + var _this12 = this; + var monthPickerValues2 = []; + var isSelectableMonth = /* @__PURE__ */ __name(function isSelectableMonth2(baseMonth) { + if (_this12.minDate) { + var minMonth = _this12.minDate.getMonth(); + var minYear = _this12.minDate.getFullYear(); + if (_this12.currentYear < minYear || _this12.currentYear === minYear && baseMonth < minMonth) { + return false; + } + } + if (_this12.maxDate) { + var maxMonth = _this12.maxDate.getMonth(); + var maxYear = _this12.maxDate.getFullYear(); + if (_this12.currentYear > maxYear || _this12.currentYear === maxYear && baseMonth > maxMonth) { + return false; + } + } + return true; + }, "isSelectableMonth"); + for (var i = 0; i <= 11; i++) { + monthPickerValues2.push({ + value: this.$primevue.config.locale.monthNamesShort[i], + selectable: isSelectableMonth(i) + }); + } + return monthPickerValues2; + }, "monthPickerValues"), + yearPickerValues: /* @__PURE__ */ __name(function yearPickerValues() { + var _this13 = this; + var yearPickerValues2 = []; + var base = this.currentYear - this.currentYear % 10; + var isSelectableYear = /* @__PURE__ */ __name(function isSelectableYear2(baseYear) { + if (_this13.minDate) { + if (_this13.minDate.getFullYear() > baseYear) return false; + } + if (_this13.maxDate) { + if (_this13.maxDate.getFullYear() < baseYear) return false; + } + return true; + }, "isSelectableYear"); + for (var i = 0; i < 10; i++) { + yearPickerValues2.push({ + value: base + i, + selectable: isSelectableYear(base + i) + }); + } + return yearPickerValues2; + }, "yearPickerValues"), + formattedCurrentHour: /* @__PURE__ */ __name(function formattedCurrentHour() { + if (this.currentHour == 0 && this.hourFormat == "12") { + return this.currentHour + 12; + } + return this.currentHour < 10 ? "0" + this.currentHour : this.currentHour; + }, "formattedCurrentHour"), + formattedCurrentMinute: /* @__PURE__ */ __name(function formattedCurrentMinute() { + return this.currentMinute < 10 ? "0" + this.currentMinute : this.currentMinute; + }, "formattedCurrentMinute"), + formattedCurrentSecond: /* @__PURE__ */ __name(function formattedCurrentSecond() { + return this.currentSecond < 10 ? "0" + this.currentSecond : this.currentSecond; + }, "formattedCurrentSecond"), + todayLabel: /* @__PURE__ */ __name(function todayLabel() { + return this.$primevue.config.locale.today; + }, "todayLabel"), + clearLabel: /* @__PURE__ */ __name(function clearLabel() { + return this.$primevue.config.locale.clear; + }, "clearLabel"), + weekHeaderLabel: /* @__PURE__ */ __name(function weekHeaderLabel() { + return this.$primevue.config.locale.weekHeader; + }, "weekHeaderLabel"), + monthNames: /* @__PURE__ */ __name(function monthNames() { + return this.$primevue.config.locale.monthNames; + }, "monthNames"), + switchViewButtonDisabled: /* @__PURE__ */ __name(function switchViewButtonDisabled() { + return this.numberOfMonths > 1 || this.disabled; + }, "switchViewButtonDisabled"), + panelId: /* @__PURE__ */ __name(function panelId() { + return this.d_id + "_panel"; + }, "panelId") + }, + components: { + InputText: script$1o, + Button: script$1e, + Portal: script$1f, + CalendarIcon: script$13, + ChevronLeftIcon: script$1p, + ChevronRightIcon: script$1l, + ChevronUpIcon: script$1j, + ChevronDownIcon: script$1k + }, + directives: { + ripple: Ripple + } +}; +var _hoisted_1$s = ["id"]; +var _hoisted_2$l = ["disabled", "aria-label", "aria-expanded", "aria-controls"]; +var _hoisted_3$h = ["id", "role", "aria-modal", "aria-label"]; +var _hoisted_4$9 = ["disabled", "aria-label"]; +var _hoisted_5$4 = ["disabled", "aria-label"]; +var _hoisted_6$2 = ["disabled", "aria-label"]; +var _hoisted_7$2 = ["disabled", "aria-label"]; +var _hoisted_8$1 = ["data-p-disabled"]; +var _hoisted_9 = ["abbr"]; +var _hoisted_10 = ["data-p-disabled"]; +var _hoisted_11 = ["aria-label", "data-p-today", "data-p-other-month"]; +var _hoisted_12 = ["onClick", "onKeydown", "aria-selected", "aria-disabled", "data-p-disabled", "data-p-selected"]; +var _hoisted_13 = ["onClick", "onKeydown", "data-p-disabled", "data-p-selected"]; +var _hoisted_14 = ["onClick", "onKeydown", "data-p-disabled", "data-p-selected"]; +function render$V(_ctx, _cache, $props, $setup, $data, $options) { + var _component_InputText = resolveComponent("InputText"); + var _component_Button = resolveComponent("Button"); + var _component_Portal = resolveComponent("Portal"); + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createElementBlock("span", mergeProps({ + ref: "container", + id: $data.d_id, + "class": _ctx.cx("root"), + style: _ctx.sx("root") + }, _ctx.ptmi("root")), [!_ctx.inline ? (openBlock(), createBlock(_component_InputText, { + key: 0, + ref: $options.inputRef, + id: _ctx.inputId, + role: "combobox", + "class": normalizeClass([_ctx.inputClass, _ctx.cx("pcInputText")]), + style: normalizeStyle(_ctx.inputStyle), + defaultValue: $options.inputFieldValue, + placeholder: _ctx.placeholder, + name: _ctx.name, + size: _ctx.size, + invalid: _ctx.invalid, + variant: _ctx.variant, + fluid: _ctx.fluid, + unstyled: _ctx.unstyled, + autocomplete: "off", + "aria-autocomplete": "none", + "aria-haspopup": "dialog", + "aria-expanded": $data.overlayVisible, + "aria-controls": $options.panelId, + "aria-labelledby": _ctx.ariaLabelledby, + "aria-label": _ctx.ariaLabel, + inputmode: "none", + disabled: _ctx.disabled, + readonly: !_ctx.manualInput || _ctx.readonly, + tabindex: 0, + onInput: $options.onInput, + onClick: $options.onInputClick, + onFocus: $options.onFocus, + onBlur: $options.onBlur, + onKeydown: $options.onKeyDown, + pt: _ctx.ptm("pcInputText") + }, null, 8, ["id", "class", "style", "defaultValue", "placeholder", "name", "size", "invalid", "variant", "fluid", "unstyled", "aria-expanded", "aria-controls", "aria-labelledby", "aria-label", "disabled", "readonly", "onInput", "onClick", "onFocus", "onBlur", "onKeydown", "pt"])) : createCommentVNode("", true), _ctx.showIcon && _ctx.iconDisplay === "button" && !_ctx.inline ? renderSlot(_ctx.$slots, "dropdownbutton", { + key: 1, + toggleCallback: $options.onButtonClick + }, function() { + return [createBaseVNode("button", mergeProps({ + "class": _ctx.cx("dropdown"), + disabled: _ctx.disabled, + onClick: _cache[0] || (_cache[0] = function() { + return $options.onButtonClick && $options.onButtonClick.apply($options, arguments); + }), + type: "button", + "aria-label": _ctx.$primevue.config.locale.chooseDate, + "aria-haspopup": "dialog", + "aria-expanded": $data.overlayVisible, + "aria-controls": $options.panelId + }, _ctx.ptm("dropdown")), [renderSlot(_ctx.$slots, "dropdownicon", { + "class": normalizeClass(_ctx.icon) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.icon ? "span" : "CalendarIcon"), mergeProps({ + "class": _ctx.icon + }, _ctx.ptm("dropdownIcon")), null, 16, ["class"]))]; + })], 16, _hoisted_2$l)]; + }) : _ctx.showIcon && _ctx.iconDisplay === "input" && !_ctx.inline ? (openBlock(), createElementBlock(Fragment, { + key: 2 + }, [_ctx.$slots.inputicon || _ctx.showIcon ? (openBlock(), createElementBlock("span", mergeProps({ + key: 0, + "class": _ctx.cx("inputIconContainer") + }, _ctx.ptm("inputIconContainer")), [renderSlot(_ctx.$slots, "inputicon", { + "class": normalizeClass(_ctx.cx("inputIcon")), + clickCallback: $options.onButtonClick + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.icon ? "i" : "CalendarIcon"), mergeProps({ + "class": [_ctx.icon, _ctx.cx("inputIcon")], + onClick: $options.onButtonClick + }, _ctx.ptm("inputicon")), null, 16, ["class", "onClick"]))]; + })], 16)) : createCommentVNode("", true)], 64)) : createCommentVNode("", true), createVNode(_component_Portal, { + appendTo: _ctx.appendTo, + disabled: _ctx.inline + }, { + "default": withCtx(function() { + return [createVNode(Transition, mergeProps({ + name: "p-connected-overlay", + onEnter: _cache[58] || (_cache[58] = function($event) { + return $options.onOverlayEnter($event); + }), + onAfterEnter: $options.onOverlayEnterComplete, + onAfterLeave: $options.onOverlayAfterLeave, + onLeave: $options.onOverlayLeave + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [_ctx.inline || $data.overlayVisible ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: $options.overlayRef, + id: $options.panelId, + "class": [_ctx.cx("panel"), _ctx.panelClass], + style: _ctx.panelStyle, + role: _ctx.inline ? null : "dialog", + "aria-modal": _ctx.inline ? null : "true", + "aria-label": _ctx.$primevue.config.locale.chooseDate, + onClick: _cache[55] || (_cache[55] = function() { + return $options.onOverlayClick && $options.onOverlayClick.apply($options, arguments); + }), + onKeydown: _cache[56] || (_cache[56] = function() { + return $options.onOverlayKeyDown && $options.onOverlayKeyDown.apply($options, arguments); + }), + onMouseup: _cache[57] || (_cache[57] = function() { + return $options.onOverlayMouseUp && $options.onOverlayMouseUp.apply($options, arguments); + }) + }, _ctx.ptm("panel")), [!_ctx.timeOnly ? (openBlock(), createElementBlock(Fragment, { + key: 0 + }, [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("calendarContainer") + }, _ctx.ptm("calendarContainer")), [(openBlock(true), createElementBlock(Fragment, null, renderList($options.months, function(month2, groupIndex) { + return openBlock(), createElementBlock("div", mergeProps({ + key: month2.month + month2.year, + "class": _ctx.cx("calendar"), + ref_for: true + }, _ctx.ptm("calendar")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("header"), + ref_for: true + }, _ctx.ptm("header")), [renderSlot(_ctx.$slots, "header"), withDirectives(createVNode(_component_Button, mergeProps({ + ref_for: true, + ref: $options.previousButtonRef, + "class": _ctx.cx("pcPrevButton"), + disabled: _ctx.disabled, + "aria-label": $data.currentView === "year" ? _ctx.$primevue.config.locale.prevDecade : $data.currentView === "month" ? _ctx.$primevue.config.locale.prevYear : _ctx.$primevue.config.locale.prevMonth, + unstyled: _ctx.unstyled, + onClick: $options.onPrevButtonClick, + onKeydown: $options.onContainerButtonKeydown + }, _ctx.navigatorButtonProps, { + pt: _ctx.ptm("pcPrevButton"), + "data-pc-group-section": "navigator" + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "previcon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.prevIcon ? "span" : "ChevronLeftIcon"), mergeProps({ + "class": [_ctx.prevIcon, slotProps["class"]], + ref_for: true + }, _ctx.ptm("pcPrevButton")["icon"]), null, 16, ["class"]))]; + })]; + }), + _: 2 + }, 1040, ["class", "disabled", "aria-label", "unstyled", "onClick", "onKeydown", "pt"]), [[vShow, groupIndex === 0]]), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("title"), + ref_for: true + }, _ctx.ptm("title")), [_ctx.$primevue.config.locale.showMonthAfterYear ? (openBlock(), createElementBlock(Fragment, { + key: 0 + }, [$data.currentView !== "year" ? (openBlock(), createElementBlock("button", mergeProps({ + key: 0, + type: "button", + onClick: _cache[1] || (_cache[1] = function() { + return $options.switchToYearView && $options.switchToYearView.apply($options, arguments); + }), + onKeydown: _cache[2] || (_cache[2] = function() { + return $options.onContainerButtonKeydown && $options.onContainerButtonKeydown.apply($options, arguments); + }), + "class": _ctx.cx("selectYear"), + disabled: $options.switchViewButtonDisabled, + "aria-label": _ctx.$primevue.config.locale.chooseYear, + ref_for: true + }, _ctx.ptm("selectYear"), { + "data-pc-group-section": "view" + }), toDisplayString($options.getYear(month2)), 17, _hoisted_4$9)) : createCommentVNode("", true), $data.currentView === "date" ? (openBlock(), createElementBlock("button", mergeProps({ + key: 1, + type: "button", + onClick: _cache[3] || (_cache[3] = function() { + return $options.switchToMonthView && $options.switchToMonthView.apply($options, arguments); + }), + onKeydown: _cache[4] || (_cache[4] = function() { + return $options.onContainerButtonKeydown && $options.onContainerButtonKeydown.apply($options, arguments); + }), + "class": _ctx.cx("selectMonth"), + disabled: $options.switchViewButtonDisabled, + "aria-label": _ctx.$primevue.config.locale.chooseMonth, + ref_for: true + }, _ctx.ptm("selectMonth"), { + "data-pc-group-section": "view" + }), toDisplayString($options.getMonthName(month2.month)), 17, _hoisted_5$4)) : createCommentVNode("", true)], 64)) : (openBlock(), createElementBlock(Fragment, { + key: 1 + }, [$data.currentView === "date" ? (openBlock(), createElementBlock("button", mergeProps({ + key: 0, + type: "button", + onClick: _cache[5] || (_cache[5] = function() { + return $options.switchToMonthView && $options.switchToMonthView.apply($options, arguments); + }), + onKeydown: _cache[6] || (_cache[6] = function() { + return $options.onContainerButtonKeydown && $options.onContainerButtonKeydown.apply($options, arguments); + }), + "class": _ctx.cx("selectMonth"), + disabled: $options.switchViewButtonDisabled, + "aria-label": _ctx.$primevue.config.locale.chooseMonth, + ref_for: true + }, _ctx.ptm("selectMonth"), { + "data-pc-group-section": "view" + }), toDisplayString($options.getMonthName(month2.month)), 17, _hoisted_6$2)) : createCommentVNode("", true), $data.currentView !== "year" ? (openBlock(), createElementBlock("button", mergeProps({ + key: 1, + type: "button", + onClick: _cache[7] || (_cache[7] = function() { + return $options.switchToYearView && $options.switchToYearView.apply($options, arguments); + }), + onKeydown: _cache[8] || (_cache[8] = function() { + return $options.onContainerButtonKeydown && $options.onContainerButtonKeydown.apply($options, arguments); + }), + "class": _ctx.cx("selectYear"), + disabled: $options.switchViewButtonDisabled, + "aria-label": _ctx.$primevue.config.locale.chooseYear, + ref_for: true + }, _ctx.ptm("selectYear"), { + "data-pc-group-section": "view" + }), toDisplayString($options.getYear(month2)), 17, _hoisted_7$2)) : createCommentVNode("", true)], 64)), $data.currentView === "year" ? (openBlock(), createElementBlock("span", mergeProps({ + key: 2, + "class": _ctx.cx("decade"), + ref_for: true + }, _ctx.ptm("decade")), [renderSlot(_ctx.$slots, "decade", { + years: $options.yearPickerValues + }, function() { + return [createTextVNode(toDisplayString($options.yearPickerValues[0].value) + " - " + toDisplayString($options.yearPickerValues[$options.yearPickerValues.length - 1].value), 1)]; + })], 16)) : createCommentVNode("", true)], 16), withDirectives(createVNode(_component_Button, mergeProps({ + ref_for: true, + ref: $options.nextButtonRef, + "class": _ctx.cx("pcNextButton"), + disabled: _ctx.disabled, + "aria-label": $data.currentView === "year" ? _ctx.$primevue.config.locale.nextDecade : $data.currentView === "month" ? _ctx.$primevue.config.locale.nextYear : _ctx.$primevue.config.locale.nextMonth, + unstyled: _ctx.unstyled, + onClick: $options.onNextButtonClick, + onKeydown: $options.onContainerButtonKeydown + }, _ctx.navigatorButtonProps, { + pt: _ctx.ptm("pcNextButton"), + "data-pc-group-section": "navigator" + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "nexticon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.nextIcon ? "span" : "ChevronRightIcon"), mergeProps({ + "class": [_ctx.nextIcon, slotProps["class"]], + ref_for: true + }, _ctx.ptm("pcNextButton")["icon"]), null, 16, ["class"]))]; + })]; + }), + _: 2 + }, 1040, ["class", "disabled", "aria-label", "unstyled", "onClick", "onKeydown", "pt"]), [[vShow, _ctx.numberOfMonths === 1 ? true : groupIndex === _ctx.numberOfMonths - 1]])], 16), $data.currentView === "date" ? (openBlock(), createElementBlock("table", mergeProps({ + key: 0, + "class": _ctx.cx("dayView"), + role: "grid", + ref_for: true + }, _ctx.ptm("dayView")), [createBaseVNode("thead", mergeProps({ + ref_for: true + }, _ctx.ptm("tableHeader")), [createBaseVNode("tr", mergeProps({ + ref_for: true + }, _ctx.ptm("tableHeaderRow")), [_ctx.showWeek ? (openBlock(), createElementBlock("th", mergeProps({ + key: 0, + scope: "col", + "class": _ctx.cx("weekHeader"), + ref_for: true + }, _ctx.ptm("weekHeader", { + context: { + disabled: _ctx.showWeek + } + }), { + "data-p-disabled": _ctx.showWeek, + "data-pc-group-section": "tableheadercell" + }), [renderSlot(_ctx.$slots, "weekheaderlabel", {}, function() { + return [createBaseVNode("span", mergeProps({ + ref_for: true + }, _ctx.ptm("weekHeaderLabel", { + context: { + disabled: _ctx.showWeek + } + }), { + "data-pc-group-section": "tableheadercelllabel" + }), toDisplayString($options.weekHeaderLabel), 17)]; + })], 16, _hoisted_8$1)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList($options.weekDays, function(weekDay) { + return openBlock(), createElementBlock("th", mergeProps({ + key: weekDay, + scope: "col", + abbr: weekDay, + ref_for: true + }, _ctx.ptm("tableHeaderCell"), { + "data-pc-group-section": "tableheadercell", + "class": _ctx.cx("weekDayCell") + }), [createBaseVNode("span", mergeProps({ + "class": _ctx.cx("weekDay"), + ref_for: true + }, _ctx.ptm("weekDay"), { + "data-pc-group-section": "tableheadercelllabel" + }), toDisplayString(weekDay), 17)], 16, _hoisted_9); + }), 128))], 16)], 16), createBaseVNode("tbody", mergeProps({ + ref_for: true + }, _ctx.ptm("tableBody")), [(openBlock(true), createElementBlock(Fragment, null, renderList(month2.dates, function(week, i) { + return openBlock(), createElementBlock("tr", mergeProps({ + key: week[0].day + "" + week[0].month, + ref_for: true + }, _ctx.ptm("tableBodyRow")), [_ctx.showWeek ? (openBlock(), createElementBlock("td", mergeProps({ + key: 0, + "class": _ctx.cx("weekNumber"), + ref_for: true + }, _ctx.ptm("weekNumber"), { + "data-pc-group-section": "tablebodycell" + }), [createBaseVNode("span", mergeProps({ + "class": _ctx.cx("weekLabelContainer"), + ref_for: true + }, _ctx.ptm("weekLabelContainer", { + context: { + disabled: _ctx.showWeek + } + }), { + "data-p-disabled": _ctx.showWeek, + "data-pc-group-section": "tablebodycelllabel" + }), [renderSlot(_ctx.$slots, "weeklabel", { + weekNumber: month2.weekNumbers[i] + }, function() { + return [month2.weekNumbers[i] < 10 ? (openBlock(), createElementBlock("span", mergeProps({ + key: 0, + style: { + "visibility": "hidden" + }, + ref_for: true + }, _ctx.ptm("weekLabel")), "0", 16)) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(month2.weekNumbers[i]), 1)]; + })], 16, _hoisted_10)], 16)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(week, function(date) { + return openBlock(), createElementBlock("td", mergeProps({ + key: date.day + "" + date.month, + "aria-label": date.day, + "class": _ctx.cx("dayCell", { + date + }), + ref_for: true + }, _ctx.ptm("dayCell", { + context: { + date, + today: date.today, + otherMonth: date.otherMonth, + selected: $options.isSelected(date), + disabled: !date.selectable + } + }), { + "data-p-today": date.today, + "data-p-other-month": date.otherMonth, + "data-pc-group-section": "tablebodycell" + }), [_ctx.showOtherMonths || !date.otherMonth ? withDirectives((openBlock(), createElementBlock("span", mergeProps({ + key: 0, + "class": _ctx.cx("day", { + date + }), + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onDateSelect($event, date); + }, "onClick"), + draggable: "false", + onKeydown: /* @__PURE__ */ __name(function onKeydown6($event) { + return $options.onDateCellKeydown($event, date, groupIndex); + }, "onKeydown"), + "aria-selected": $options.isSelected(date), + "aria-disabled": !date.selectable, + ref_for: true + }, _ctx.ptm("day", { + context: { + date, + today: date.today, + otherMonth: date.otherMonth, + selected: $options.isSelected(date), + disabled: !date.selectable + } + }), { + "data-p-disabled": !date.selectable, + "data-p-selected": $options.isSelected(date), + "data-pc-group-section": "tablebodycelllabel" + }), [renderSlot(_ctx.$slots, "date", { + date + }, function() { + return [createTextVNode(toDisplayString(date.day), 1)]; + })], 16, _hoisted_12)), [[_directive_ripple]]) : createCommentVNode("", true), $options.isSelected(date) ? (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": "p-hidden-accessible", + "aria-live": "polite", + ref_for: true + }, _ctx.ptm("hiddenSelectedDay"), { + "data-p-hidden-accessible": true + }), toDisplayString(date.day), 17)) : createCommentVNode("", true)], 16, _hoisted_11); + }), 128))], 16); + }), 128))], 16)], 16)) : createCommentVNode("", true)], 16); + }), 128))], 16), $data.currentView === "month" ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("monthView") + }, _ctx.ptm("monthView")), [(openBlock(true), createElementBlock(Fragment, null, renderList($options.monthPickerValues, function(m, i) { + return withDirectives((openBlock(), createElementBlock("span", mergeProps({ + key: m, + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onMonthSelect($event, { + month: m, + index: i + }); + }, "onClick"), + onKeydown: /* @__PURE__ */ __name(function onKeydown6($event) { + return $options.onMonthCellKeydown($event, { + month: m, + index: i + }); + }, "onKeydown"), + "class": _ctx.cx("month", { + month: m, + index: i + }), + ref_for: true + }, _ctx.ptm("month", { + context: { + month: m, + monthIndex: i, + selected: $options.isMonthSelected(i), + disabled: !m.selectable + } + }), { + "data-p-disabled": !m.selectable, + "data-p-selected": $options.isMonthSelected(i) + }), [createTextVNode(toDisplayString(m.value) + " ", 1), $options.isMonthSelected(i) ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": "p-hidden-accessible", + "aria-live": "polite", + ref_for: true + }, _ctx.ptm("hiddenMonth"), { + "data-p-hidden-accessible": true + }), toDisplayString(m.value), 17)) : createCommentVNode("", true)], 16, _hoisted_13)), [[_directive_ripple]]); + }), 128))], 16)) : createCommentVNode("", true), $data.currentView === "year" ? (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": _ctx.cx("yearView") + }, _ctx.ptm("yearView")), [(openBlock(true), createElementBlock(Fragment, null, renderList($options.yearPickerValues, function(y) { + return withDirectives((openBlock(), createElementBlock("span", mergeProps({ + key: y.value, + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onYearSelect($event, y); + }, "onClick"), + onKeydown: /* @__PURE__ */ __name(function onKeydown6($event) { + return $options.onYearCellKeydown($event, y); + }, "onKeydown"), + "class": _ctx.cx("year", { + year: y + }), + ref_for: true + }, _ctx.ptm("year", { + context: { + year: y, + selected: $options.isYearSelected(y.value), + disabled: !y.selectable + } + }), { + "data-p-disabled": !y.selectable, + "data-p-selected": $options.isYearSelected(y.value) + }), [createTextVNode(toDisplayString(y.value) + " ", 1), $options.isYearSelected(y.value) ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": "p-hidden-accessible", + "aria-live": "polite", + ref_for: true + }, _ctx.ptm("hiddenYear"), { + "data-p-hidden-accessible": true + }), toDisplayString(y.value), 17)) : createCommentVNode("", true)], 16, _hoisted_14)), [[_directive_ripple]]); + }), 128))], 16)) : createCommentVNode("", true)], 64)) : createCommentVNode("", true), (_ctx.showTime || _ctx.timeOnly) && $data.currentView === "date" ? (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": _ctx.cx("timePicker") + }, _ctx.ptm("timePicker")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("hourPicker") + }, _ctx.ptm("hourPicker"), { + "data-pc-group-section": "timepickerContainer" + }), [createVNode(_component_Button, mergeProps({ + "class": _ctx.cx("pcIncrementButton"), + "aria-label": _ctx.$primevue.config.locale.nextHour, + unstyled: _ctx.unstyled, + onMousedown: _cache[9] || (_cache[9] = function($event) { + return $options.onTimePickerElementMouseDown($event, 0, 1); + }), + onMouseup: _cache[10] || (_cache[10] = function($event) { + return $options.onTimePickerElementMouseUp($event); + }), + onKeydown: [$options.onContainerButtonKeydown, _cache[12] || (_cache[12] = withKeys(function($event) { + return $options.onTimePickerElementMouseDown($event, 0, 1); + }, ["enter"])), _cache[13] || (_cache[13] = withKeys(function($event) { + return $options.onTimePickerElementMouseDown($event, 0, 1); + }, ["space"]))], + onMouseleave: _cache[11] || (_cache[11] = function($event) { + return $options.onTimePickerElementMouseLeave(); + }), + onKeyup: [_cache[14] || (_cache[14] = withKeys(function($event) { + return $options.onTimePickerElementMouseUp($event); + }, ["enter"])), _cache[15] || (_cache[15] = withKeys(function($event) { + return $options.onTimePickerElementMouseUp($event); + }, ["space"]))] + }, _ctx.timepickerButtonProps, { + pt: _ctx.ptm("pcIncrementButton"), + "data-pc-group-section": "timepickerbutton" + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "incrementicon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.incrementIcon ? "span" : "ChevronUpIcon"), mergeProps({ + "class": [_ctx.incrementIcon, slotProps["class"]] + }, _ctx.ptm("pcIncrementButton")["icon"], { + "data-pc-group-section": "timepickerlabel" + }), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "aria-label", "unstyled", "onKeydown", "pt"]), createBaseVNode("span", mergeProps(_ctx.ptm("hour"), { + "data-pc-group-section": "timepickerlabel" + }), toDisplayString($options.formattedCurrentHour), 17), createVNode(_component_Button, mergeProps({ + "class": _ctx.cx("pcDecrementButton"), + "aria-label": _ctx.$primevue.config.locale.prevHour, + unstyled: _ctx.unstyled, + onMousedown: _cache[16] || (_cache[16] = function($event) { + return $options.onTimePickerElementMouseDown($event, 0, -1); + }), + onMouseup: _cache[17] || (_cache[17] = function($event) { + return $options.onTimePickerElementMouseUp($event); + }), + onKeydown: [$options.onContainerButtonKeydown, _cache[19] || (_cache[19] = withKeys(function($event) { + return $options.onTimePickerElementMouseDown($event, 0, -1); + }, ["enter"])), _cache[20] || (_cache[20] = withKeys(function($event) { + return $options.onTimePickerElementMouseDown($event, 0, -1); + }, ["space"]))], + onMouseleave: _cache[18] || (_cache[18] = function($event) { + return $options.onTimePickerElementMouseLeave(); + }), + onKeyup: [_cache[21] || (_cache[21] = withKeys(function($event) { + return $options.onTimePickerElementMouseUp($event); + }, ["enter"])), _cache[22] || (_cache[22] = withKeys(function($event) { + return $options.onTimePickerElementMouseUp($event); + }, ["space"]))] + }, _ctx.timepickerButtonProps, { + pt: _ctx.ptm("pcDecrementButton"), + "data-pc-group-section": "timepickerbutton" + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "decrementicon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.decrementIcon ? "span" : "ChevronDownIcon"), mergeProps({ + "class": [_ctx.decrementIcon, slotProps["class"]] + }, _ctx.ptm("pcDecrementButton")["icon"], { + "data-pc-group-section": "timepickerlabel" + }), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "aria-label", "unstyled", "onKeydown", "pt"])], 16), createBaseVNode("div", mergeProps(_ctx.ptm("separatorContainer"), { + "data-pc-group-section": "timepickerContainer" + }), [createBaseVNode("span", mergeProps(_ctx.ptm("separator"), { + "data-pc-group-section": "timepickerlabel" + }), toDisplayString(_ctx.timeSeparator), 17)], 16), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("minutePicker") + }, _ctx.ptm("minutePicker"), { + "data-pc-group-section": "timepickerContainer" + }), [createVNode(_component_Button, mergeProps({ + "class": _ctx.cx("pcIncrementButton"), + "aria-label": _ctx.$primevue.config.locale.nextMinute, + disabled: _ctx.disabled, + unstyled: _ctx.unstyled, + onMousedown: _cache[23] || (_cache[23] = function($event) { + return $options.onTimePickerElementMouseDown($event, 1, 1); + }), + onMouseup: _cache[24] || (_cache[24] = function($event) { + return $options.onTimePickerElementMouseUp($event); + }), + onKeydown: [$options.onContainerButtonKeydown, _cache[26] || (_cache[26] = withKeys(function($event) { + return $options.onTimePickerElementMouseDown($event, 1, 1); + }, ["enter"])), _cache[27] || (_cache[27] = withKeys(function($event) { + return $options.onTimePickerElementMouseDown($event, 1, 1); + }, ["space"]))], + onMouseleave: _cache[25] || (_cache[25] = function($event) { + return $options.onTimePickerElementMouseLeave(); + }), + onKeyup: [_cache[28] || (_cache[28] = withKeys(function($event) { + return $options.onTimePickerElementMouseUp($event); + }, ["enter"])), _cache[29] || (_cache[29] = withKeys(function($event) { + return $options.onTimePickerElementMouseUp($event); + }, ["space"]))] + }, _ctx.timepickerButtonProps, { + pt: _ctx.ptm("pcIncrementButton"), + "data-pc-group-section": "timepickerbutton" + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "incrementicon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.incrementIcon ? "span" : "ChevronUpIcon"), mergeProps({ + "class": [_ctx.incrementIcon, slotProps["class"]] + }, _ctx.ptm("pcIncrementButton")["icon"], { + "data-pc-group-section": "timepickerlabel" + }), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "aria-label", "disabled", "unstyled", "onKeydown", "pt"]), createBaseVNode("span", mergeProps(_ctx.ptm("minute"), { + "data-pc-group-section": "timepickerlabel" + }), toDisplayString($options.formattedCurrentMinute), 17), createVNode(_component_Button, mergeProps({ + "class": _ctx.cx("pcDecrementButton"), + "aria-label": _ctx.$primevue.config.locale.prevMinute, + disabled: _ctx.disabled, + onMousedown: _cache[30] || (_cache[30] = function($event) { + return $options.onTimePickerElementMouseDown($event, 1, -1); + }), + onMouseup: _cache[31] || (_cache[31] = function($event) { + return $options.onTimePickerElementMouseUp($event); + }), + onKeydown: [$options.onContainerButtonKeydown, _cache[33] || (_cache[33] = withKeys(function($event) { + return $options.onTimePickerElementMouseDown($event, 1, -1); + }, ["enter"])), _cache[34] || (_cache[34] = withKeys(function($event) { + return $options.onTimePickerElementMouseDown($event, 1, -1); + }, ["space"]))], + onMouseleave: _cache[32] || (_cache[32] = function($event) { + return $options.onTimePickerElementMouseLeave(); + }), + onKeyup: [_cache[35] || (_cache[35] = withKeys(function($event) { + return $options.onTimePickerElementMouseUp($event); + }, ["enter"])), _cache[36] || (_cache[36] = withKeys(function($event) { + return $options.onTimePickerElementMouseUp($event); + }, ["space"]))] + }, _ctx.timepickerButtonProps, { + pt: _ctx.ptm("pcDecrementButton"), + "data-pc-group-section": "timepickerbutton" + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "decrementicon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.decrementIcon ? "span" : "ChevronDownIcon"), mergeProps({ + "class": [_ctx.decrementIcon, slotProps["class"]] + }, _ctx.ptm("pcDecrementButton")["icon"], { + "data-pc-group-section": "timepickerlabel" + }), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "aria-label", "disabled", "onKeydown", "pt"])], 16), _ctx.showSeconds ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("separatorContainer") + }, _ctx.ptm("separatorContainer"), { + "data-pc-group-section": "timepickerContainer" + }), [createBaseVNode("span", mergeProps(_ctx.ptm("separator"), { + "data-pc-group-section": "timepickerlabel" + }), toDisplayString(_ctx.timeSeparator), 17)], 16)) : createCommentVNode("", true), _ctx.showSeconds ? (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": _ctx.cx("secondPicker") + }, _ctx.ptm("secondPicker"), { + "data-pc-group-section": "timepickerContainer" + }), [createVNode(_component_Button, mergeProps({ + "class": _ctx.cx("pcIncrementButton"), + "aria-label": _ctx.$primevue.config.locale.nextSecond, + disabled: _ctx.disabled, + unstyled: _ctx.unstyled, + onMousedown: _cache[37] || (_cache[37] = function($event) { + return $options.onTimePickerElementMouseDown($event, 2, 1); + }), + onMouseup: _cache[38] || (_cache[38] = function($event) { + return $options.onTimePickerElementMouseUp($event); + }), + onKeydown: [$options.onContainerButtonKeydown, _cache[40] || (_cache[40] = withKeys(function($event) { + return $options.onTimePickerElementMouseDown($event, 2, 1); + }, ["enter"])), _cache[41] || (_cache[41] = withKeys(function($event) { + return $options.onTimePickerElementMouseDown($event, 2, 1); + }, ["space"]))], + onMouseleave: _cache[39] || (_cache[39] = function($event) { + return $options.onTimePickerElementMouseLeave(); + }), + onKeyup: [_cache[42] || (_cache[42] = withKeys(function($event) { + return $options.onTimePickerElementMouseUp($event); + }, ["enter"])), _cache[43] || (_cache[43] = withKeys(function($event) { + return $options.onTimePickerElementMouseUp($event); + }, ["space"]))] + }, _ctx.timepickerButtonProps, { + pt: _ctx.ptm("pcIncrementButton"), + "data-pc-group-section": "timepickerbutton" + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "incrementicon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.incrementIcon ? "span" : "ChevronUpIcon"), mergeProps({ + "class": [_ctx.incrementIcon, slotProps["class"]] + }, _ctx.ptm("pcIncrementButton")["icon"], { + "data-pc-group-section": "timepickerlabel" + }), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "aria-label", "disabled", "unstyled", "onKeydown", "pt"]), createBaseVNode("span", mergeProps(_ctx.ptm("second"), { + "data-pc-group-section": "timepickerlabel" + }), toDisplayString($options.formattedCurrentSecond), 17), createVNode(_component_Button, mergeProps({ + "class": _ctx.cx("pcDecrementButton"), + "aria-label": _ctx.$primevue.config.locale.prevSecond, + disabled: _ctx.disabled, + unstyled: _ctx.unstyled, + onMousedown: _cache[44] || (_cache[44] = function($event) { + return $options.onTimePickerElementMouseDown($event, 2, -1); + }), + onMouseup: _cache[45] || (_cache[45] = function($event) { + return $options.onTimePickerElementMouseUp($event); + }), + onKeydown: [$options.onContainerButtonKeydown, _cache[47] || (_cache[47] = withKeys(function($event) { + return $options.onTimePickerElementMouseDown($event, 2, -1); + }, ["enter"])), _cache[48] || (_cache[48] = withKeys(function($event) { + return $options.onTimePickerElementMouseDown($event, 2, -1); + }, ["space"]))], + onMouseleave: _cache[46] || (_cache[46] = function($event) { + return $options.onTimePickerElementMouseLeave(); + }), + onKeyup: [_cache[49] || (_cache[49] = withKeys(function($event) { + return $options.onTimePickerElementMouseUp($event); + }, ["enter"])), _cache[50] || (_cache[50] = withKeys(function($event) { + return $options.onTimePickerElementMouseUp($event); + }, ["space"]))] + }, _ctx.timepickerButtonProps, { + pt: _ctx.ptm("pcDecrementButton"), + "data-pc-group-section": "timepickerbutton" + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "decrementicon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.decrementIcon ? "span" : "ChevronDownIcon"), mergeProps({ + "class": [_ctx.decrementIcon, slotProps["class"]] + }, _ctx.ptm("pcDecrementButton")["icon"], { + "data-pc-group-section": "timepickerlabel" + }), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "aria-label", "disabled", "unstyled", "onKeydown", "pt"])], 16)) : createCommentVNode("", true), _ctx.hourFormat == "12" ? (openBlock(), createElementBlock("div", mergeProps({ + key: 2, + "class": _ctx.cx("separatorContainer") + }, _ctx.ptm("separatorContainer"), { + "data-pc-group-section": "timepickerContainer" + }), [createBaseVNode("span", mergeProps(_ctx.ptm("separator"), { + "data-pc-group-section": "timepickerlabel" + }), toDisplayString(_ctx.timeSeparator), 17)], 16)) : createCommentVNode("", true), _ctx.hourFormat == "12" ? (openBlock(), createElementBlock("div", mergeProps({ + key: 3, + "class": _ctx.cx("ampmPicker") + }, _ctx.ptm("ampmPicker")), [createVNode(_component_Button, mergeProps({ + "class": _ctx.cx("pcIncrementButton"), + "aria-label": _ctx.$primevue.config.locale.am, + disabled: _ctx.disabled, + unstyled: _ctx.unstyled, + onClick: _cache[51] || (_cache[51] = function($event) { + return $options.toggleAMPM($event); + }), + onKeydown: $options.onContainerButtonKeydown + }, _ctx.timepickerButtonProps, { + pt: _ctx.ptm("pcIncrementButton"), + "data-pc-group-section": "timepickerbutton" + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "incrementicon", { + "class": normalizeClass(_ctx.cx("incrementIcon")) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.incrementIcon ? "span" : "ChevronUpIcon"), mergeProps({ + "class": [_ctx.cx("incrementIcon"), slotProps["class"]] + }, _ctx.ptm("pcIncrementButton")["icon"], { + "data-pc-group-section": "timepickerlabel" + }), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "aria-label", "disabled", "unstyled", "onKeydown", "pt"]), createBaseVNode("span", mergeProps(_ctx.ptm("ampm"), { + "data-pc-group-section": "timepickerlabel" + }), toDisplayString($data.pm ? _ctx.$primevue.config.locale.pm : _ctx.$primevue.config.locale.am), 17), createVNode(_component_Button, mergeProps({ + "class": _ctx.cx("pcDecrementButton"), + "aria-label": _ctx.$primevue.config.locale.pm, + disabled: _ctx.disabled, + onClick: _cache[52] || (_cache[52] = function($event) { + return $options.toggleAMPM($event); + }), + onKeydown: $options.onContainerButtonKeydown + }, _ctx.timepickerButtonProps, { + pt: _ctx.ptm("pcDecrementButton"), + "data-pc-group-section": "timepickerbutton" + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "decrementicon", { + "class": normalizeClass(_ctx.cx("decrementIcon")) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.decrementIcon ? "span" : "ChevronDownIcon"), mergeProps({ + "class": [_ctx.cx("decrementIcon"), slotProps["class"]] + }, _ctx.ptm("pcDecrementButton")["icon"], { + "data-pc-group-section": "timepickerlabel" + }), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "aria-label", "disabled", "onKeydown", "pt"])], 16)) : createCommentVNode("", true)], 16)) : createCommentVNode("", true), _ctx.showButtonBar ? (openBlock(), createElementBlock("div", mergeProps({ + key: 2, + "class": _ctx.cx("buttonbar") + }, _ctx.ptm("buttonbar")), [createVNode(_component_Button, mergeProps({ + label: $options.todayLabel, + onClick: _cache[53] || (_cache[53] = function($event) { + return $options.onTodayButtonClick($event); + }), + "class": _ctx.cx("pcTodayButton"), + unstyled: _ctx.unstyled, + onKeydown: $options.onContainerButtonKeydown + }, _ctx.todayButtonProps, { + pt: _ctx.ptm("pcTodayButton"), + "data-pc-group-section": "button" + }), null, 16, ["label", "class", "unstyled", "onKeydown", "pt"]), createVNode(_component_Button, mergeProps({ + label: $options.clearLabel, + onClick: _cache[54] || (_cache[54] = function($event) { + return $options.onClearButtonClick($event); + }), + "class": _ctx.cx("pcClearButton"), + unstyled: _ctx.unstyled, + onKeydown: $options.onContainerButtonKeydown + }, _ctx.clearButtonProps, { + pt: _ctx.ptm("pcClearButton"), + "data-pc-group-section": "button" + }), null, 16, ["label", "class", "unstyled", "onKeydown", "pt"])], 16)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "footer")], 16, _hoisted_3$h)) : createCommentVNode("", true)]; + }), + _: 3 + }, 16, ["onAfterEnter", "onAfterLeave", "onLeave"])]; + }), + _: 3 + }, 8, ["appendTo", "disabled"])], 16, _hoisted_1$s); +} +__name(render$V, "render$V"); +script$12.render = render$V; +var script$11 = { + name: "Calendar", + "extends": script$12, + mounted: /* @__PURE__ */ __name(function mounted6() { + console.warn("Deprecated since v4. Use DatePicker component instead."); + }, "mounted") +}; +var CalendarStyle = BaseStyle.extend({ + name: "calendar" +}); +var theme$y = /* @__PURE__ */ __name(function theme6(_ref) { + var dt = _ref.dt; + return "\n.p-cascadeselect {\n display: inline-flex;\n cursor: pointer;\n position: relative;\n user-select: none;\n background: ".concat(dt("cascadeselect.background"), ";\n border: 1px solid ").concat(dt("cascadeselect.border.color"), ";\n transition: background ").concat(dt("cascadeselect.transition.duration"), ", color ").concat(dt("cascadeselect.transition.duration"), ", border-color ").concat(dt("cascadeselect.transition.duration"), ", outline-color ").concat(dt("cascadeselect.transition.duration"), ", box-shadow ").concat(dt("cascadeselect.transition.duration"), ";\n border-radius: ").concat(dt("cascadeselect.border.radius"), ";\n outline-color: transparent;\n box-shadow: ").concat(dt("cascadeselect.shadow"), ";\n}\n\n.p-cascadeselect:not(.p-disabled):hover {\n border-color: ").concat(dt("cascadeselect.hover.border.color"), ";\n}\n\n.p-cascadeselect:not(.p-disabled).p-focus {\n border-color: ").concat(dt("cascadeselect.focus.border.color"), ";\n box-shadow: ").concat(dt("cascadeselect.focus.ring.shadow"), ";\n outline: ").concat(dt("cascadeselect.focus.ring.width"), " ").concat(dt("cascadeselect.focus.ring.style"), " ").concat(dt("cascadeselect.focus.ring.color"), ";\n outline-offset: ").concat(dt("cascadeselect.focus.ring.offset"), ";\n}\n\n.p-cascadeselect.p-variant-filled {\n background: ").concat(dt("cascadeselect.filled.background"), ";\n}\n\n.p-cascadeselect.p-variant-filled:not(.p-disabled):hover {\n background: ").concat(dt("cascadeselect.filled.hover.background"), ";\n}\n\n.p-cascadeselect.p-variant-filled.p-focus {\n background: ").concat(dt("cascadeselect.filled.focus.background"), ";\n}\n\n.p-cascadeselect.p-invalid {\n border-color: ").concat(dt("cascadeselect.invalid.border.color"), ";\n}\n\n.p-cascadeselect.p-disabled {\n opacity: 1;\n background: ").concat(dt("cascadeselect.disabled.background"), ";\n}\n\n.p-cascadeselect-dropdown {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: transparent;\n color: ").concat(dt("cascadeselect.dropdown.color"), ";\n width: ").concat(dt("cascadeselect.dropdown.width"), ";\n border-start-end-radius: ").concat(dt("border.radius.md"), ";\n border-end-end-radius: ").concat(dt("border.radius.md"), ";\n}\n\n.p-cascadeselect-clear-icon {\n position: absolute;\n top: 50%;\n margin-top: -0.5rem;\n color: ").concat(dt("cascadeselect.clear.icon.color"), ";\n inset-inline-end: ").concat(dt("cascadeselect.dropdown.width"), ";\n}\n\n.p-cascadeselect-label {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n flex: 1 1 auto;\n width: 1%;\n text-overflow: ellipsis;\n cursor: pointer;\n padding: ").concat(dt("cascadeselect.padding.y"), " ").concat(dt("cascadeselect.padding.x"), ";\n background: transparent;\n border: 0 none;\n outline: 0 none;\n}\n\n.p-cascadeselect-label.p-placeholder {\n color: ").concat(dt("cascadeselect.placeholder.color"), ";\n}\n\n.p-cascadeselect.p-invalid .p-cascadeselect-label.p-placeholder {\n color: ").concat(dt("cascadeselect.invalid.placeholder.color"), ";\n}\n\n.p-cascadeselect.p-disabled .p-cascadeselect-label {\n color: ").concat(dt("cascadeselect.disabled.color"), ";\n}\n\n.p-cascadeselect-label-empty {\n overflow: hidden;\n visibility: hidden;\n}\n\n.p-cascadeselect-fluid {\n display: flex;\n}\n\n.p-cascadeselect-fluid .p-cascadeselect-label {\n width: 1%;\n}\n\n.p-cascadeselect-overlay {\n background: ").concat(dt("cascadeselect.overlay.background"), ";\n color: ").concat(dt("cascadeselect.overlay.color"), ";\n border: 1px solid ").concat(dt("cascadeselect.overlay.border.color"), ";\n border-radius: ").concat(dt("cascadeselect.overlay.border.radius"), ";\n box-shadow: ").concat(dt("cascadeselect.overlay.shadow"), ";\n}\n\n.p-cascadeselect .p-cascadeselect-overlay {\n min-width: 100%;\n}\n\n.p-cascadeselect-option-list {\n display: none;\n min-width: 100%;\n position: absolute;\n z-index: 1;\n}\n\n.p-cascadeselect-list {\n min-width: 100%;\n margin: 0;\n padding: 0;\n list-style-type: none;\n padding: ").concat(dt("cascadeselect.list.padding"), ";\n display: flex;\n flex-direction: column;\n gap: ").concat(dt("cascadeselect.list.gap"), ";\n}\n\n.p-cascadeselect-option {\n cursor: pointer;\n font-weight: normal;\n white-space: nowrap;\n border: 0 none;\n color: ").concat(dt("cascadeselect.option.color"), ";\n background: transparent;\n border-radius: ").concat(dt("cascadeselect.option.border.radius"), ";\n}\n\n.p-cascadeselect-option-active {\n overflow: visible;\n}\n\n.p-cascadeselect-option-active > .p-cascadeselect-option-content {\n background: ").concat(dt("cascadeselect.option.focus.background"), ";\n color: ").concat(dt("cascadeselect.option.focus.color"), ";\n}\n\n.p-cascadeselect-option:not(.p-cascadeselect-option-selected):not(.p-disabled).p-focus > .p-cascadeselect-option-content {\n background: ").concat(dt("cascadeselect.option.focus.background"), ";\n color: ").concat(dt("cascadeselect.option.focus.color"), ";\n}\n\n.p-cascadeselect-option:not(.p-cascadeselect-option-selected):not(.p-disabled).p-focus > .p-cascadeselect-option-content > .p-cascadeselect-group-icon-container > .p-cascadeselect-group-icon {\n color: ").concat(dt("cascadeselect.option.icon.focus.color"), ";\n}\n\n.p-cascadeselect-option-selected > .p-cascadeselect-option-content {\n background: ").concat(dt("cascadeselect.option.selected.background"), ";\n color: ").concat(dt("cascadeselect.option.selected.color"), ";\n}\n\n.p-cascadeselect-option-selected.p-focus > .p-cascadeselect-option-content {\n background: ").concat(dt("cascadeselect.option.selected.focus.background"), ";\n color: ").concat(dt("cascadeselect.option.selected.focus.color"), ";\n}\n\n.p-cascadeselect-option-active > .p-cascadeselect-option-list {\n inset-inline-start: 100%;\n inset-block-start: 0;\n}\n\n.p-cascadeselect-option-content {\n display: flex;\n align-items: center;\n justify-content: space-between;\n overflow: hidden;\n position: relative;\n padding: ").concat(dt("cascadeselect.option.padding"), ";\n border-radius: ").concat(dt("cascadeselect.option.border.radius"), ";\n transition: background ").concat(dt("cascadeselect.transition.duration"), ", color ").concat(dt("cascadeselect.transition.duration"), ", border-color ").concat(dt("cascadeselect.transition.duration"), ", box-shadow ").concat(dt("cascadeselect.transition.duration"), ", outline-color ").concat(dt("cascadeselect.transition.duration"), ";\n}\n\n.p-cascadeselect-group-icon {\n font-size: ").concat(dt("cascadeselect.option.icon.size"), ";\n width: ").concat(dt("cascadeselect.option.icon.size"), ";\n height: ").concat(dt("cascadeselect.option.icon.size"), ";\n color: ").concat(dt("cascadeselect.option.icon.color"), ";\n}\n\n.p-cascadeselect-group-icon:dir(rtl) {\n transform: rotate(180deg);\n}\n\n.p-cascadeselect-mobile-active .p-cascadeselect-option-list {\n position: static;\n box-shadow: none;\n border: 0 none;\n padding-inline-start: ").concat(dt("tieredmenu.submenu.mobile.indent"), ";\n padding-inline-end: 0;\n}\n\n.p-cascadeselect-mobile-active .p-cascadeselect-group-icon {\n transition: transform 0.2s;\n transform: rotate(90deg);\n}\n\n.p-cascadeselect-mobile-active .p-cascadeselect-option-active > .p-cascadeselect-option-content .p-cascadeselect-group-icon {\n transform: rotate(-90deg);\n}\n\n.p-cascadeselect-sm .p-cascadeselect-label {\n font-size: ").concat(dt("cascadeselect.sm.font.size"), ";\n padding-block: ").concat(dt("cascadeselect.sm.padding.y"), ";\n padding-inline: ").concat(dt("cascadeselect.sm.padding.x"), ";\n}\n\n.p-cascadeselect-sm .p-cascadeselect-dropdown .p-icon {\n font-size: ").concat(dt("cascadeselect.sm.font.size"), ";\n width: ").concat(dt("cascadeselect.sm.font.size"), ";\n height: ").concat(dt("cascadeselect.sm.font.size"), ";\n}\n\n.p-cascadeselect-lg .p-cascadeselect-label {\n font-size: ").concat(dt("cascadeselect.lg.font.size"), ";\n padding-block: ").concat(dt("cascadeselect.lg.padding.y"), ";\n padding-inline: ").concat(dt("cascadeselect.lg.padding.x"), ";\n}\n\n.p-cascadeselect-lg .p-cascadeselect-dropdown .p-icon {\n font-size: ").concat(dt("cascadeselect.lg.font.size"), ";\n width: ").concat(dt("cascadeselect.lg.font.size"), ";\n height: ").concat(dt("cascadeselect.lg.font.size"), ";\n}\n"); +}, "theme"); +var inlineStyles$7 = { + root: /* @__PURE__ */ __name(function root6(_ref2) { + var props = _ref2.props; + return { + position: props.appendTo === "self" ? "relative" : void 0 + }; + }, "root") +}; +var classes$C = { + root: /* @__PURE__ */ __name(function root7(_ref3) { + var instance = _ref3.instance, props = _ref3.props; + return ["p-cascadeselect p-component p-inputwrapper", { + "p-cascadeselect-mobile": instance.queryMatches, + "p-disabled": props.disabled, + "p-invalid": instance.$invalid, + "p-variant-filled": instance.$variant === "filled", + "p-focus": instance.focused, + "p-inputwrapper-filled": instance.$filled, + "p-inputwrapper-focus": instance.focused || instance.overlayVisible, + "p-cascadeselect-open": instance.overlayVisible, + "p-cascadeselect-fluid": instance.$fluid, + "p-cascadeselect-sm p-inputfield-sm": props.size === "small", + "p-cascadeselect-lg p-inputfield-lg": props.size === "large" + }]; + }, "root"), + label: /* @__PURE__ */ __name(function label2(_ref4) { + var instance = _ref4.instance, props = _ref4.props; + return ["p-cascadeselect-label", { + "p-placeholder": instance.label === props.placeholder, + "p-cascadeselect-label-empty": !instance.$slots["value"] && (instance.label === "p-emptylabel" || instance.label.length === 0) + }]; + }, "label"), + clearIcon: "p-cascadeselect-clear-icon", + dropdown: "p-cascadeselect-dropdown", + loadingIcon: "p-cascadeselect-loading-icon", + dropdownIcon: "p-cascadeselect-dropdown-icon", + overlay: /* @__PURE__ */ __name(function overlay(_ref5) { + var instance = _ref5.instance; + return ["p-cascadeselect-overlay p-component", { + "p-cascadeselect-mobile-active": instance.queryMatches + }]; + }, "overlay"), + listContainer: "p-cascadeselect-list-container", + list: "p-cascadeselect-list", + option: /* @__PURE__ */ __name(function option(_ref6) { + var instance = _ref6.instance, processedOption = _ref6.processedOption; + return ["p-cascadeselect-option", { + "p-cascadeselect-option-active": instance.isOptionActive(processedOption), + "p-cascadeselect-option-selected": instance.isOptionSelected(processedOption), + "p-focus": instance.isOptionFocused(processedOption), + "p-disabled": instance.isOptionDisabled(processedOption) + }]; + }, "option"), + optionContent: "p-cascadeselect-option-content", + optionText: "p-cascadeselect-option-text", + groupIconContainer: "p-cascadeselect-group-icon-container", + groupIcon: "p-cascadeselect-group-icon", + optionList: "p-cascadeselect-overlay p-cascadeselect-option-list" +}; +var CascadeSelectStyle = BaseStyle.extend({ + name: "cascadeselect", + theme: theme$y, + classes: classes$C, + inlineStyles: inlineStyles$7 +}); +var script$2$8 = { + name: "BaseCascadeSelect", + "extends": script$1n, + props: { + options: Array, + optionLabel: null, + optionValue: null, + optionDisabled: null, + optionGroupLabel: null, + optionGroupChildren: null, + placeholder: String, + breakpoint: { + type: String, + "default": "960px" + }, + dataKey: null, + showClear: { + type: Boolean, + "default": false + }, + clearIcon: { + type: String, + "default": void 0 + }, + inputId: { + type: String, + "default": null + }, + inputClass: { + type: [String, Object], + "default": null + }, + inputStyle: { + type: Object, + "default": null + }, + inputProps: { + type: null, + "default": null + }, + panelClass: { + type: [String, Object], + "default": null + }, + panelStyle: { + type: Object, + "default": null + }, + panelProps: { + type: null, + "default": null + }, + overlayClass: { + type: [String, Object], + "default": null + }, + overlayStyle: { + type: Object, + "default": null + }, + overlayProps: { + type: null, + "default": null + }, + appendTo: { + type: [String, Object], + "default": "body" + }, + loading: { + type: Boolean, + "default": false + }, + dropdownIcon: { + type: String, + "default": void 0 + }, + loadingIcon: { + type: String, + "default": void 0 + }, + optionGroupIcon: { + type: String, + "default": void 0 + }, + autoOptionFocus: { + type: Boolean, + "default": false + }, + selectOnFocus: { + type: Boolean, + "default": false + }, + focusOnHover: { + type: Boolean, + "default": true + }, + searchLocale: { + type: String, + "default": void 0 + }, + searchMessage: { + type: String, + "default": null + }, + selectionMessage: { + type: String, + "default": null + }, + emptySelectionMessage: { + type: String, + "default": null + }, + emptySearchMessage: { + type: String, + "default": null + }, + emptyMessage: { + type: String, + "default": null + }, + tabindex: { + type: Number, + "default": 0 + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + } + }, + style: CascadeSelectStyle, + provide: /* @__PURE__ */ __name(function provide11() { + return { + $pcCascadeSelect: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1$E = { + name: "CascadeSelectSub", + hostName: "CascadeSelect", + "extends": script$1d, + emits: ["option-change", "option-focus-change", "option-focus-enter-change"], + container: null, + props: { + selectId: String, + focusedOptionId: String, + options: Array, + optionLabel: String, + optionValue: String, + optionDisabled: null, + optionGroupIcon: String, + optionGroupLabel: String, + optionGroupChildren: { + type: [String, Array], + "default": null + }, + activeOptionPath: Array, + level: Number, + templates: null, + value: null + }, + methods: { + getOptionId: /* @__PURE__ */ __name(function getOptionId(processedOption) { + return "".concat(this.selectId, "_").concat(processedOption.key); + }, "getOptionId"), + getOptionLabel: /* @__PURE__ */ __name(function getOptionLabel(processedOption) { + return this.optionLabel ? resolveFieldData(processedOption.option, this.optionLabel) : processedOption.option; + }, "getOptionLabel"), + getOptionValue: /* @__PURE__ */ __name(function getOptionValue(processedOption) { + return this.optionValue ? resolveFieldData(processedOption.option, this.optionValue) : processedOption.option; + }, "getOptionValue"), + getPTOptions: /* @__PURE__ */ __name(function getPTOptions(processedOption, index, key) { + return this.ptm(key, { + context: { + option: processedOption, + index, + level: this.level, + optionGroup: this.isOptionGroup(processedOption), + active: this.isOptionActive(processedOption), + focused: this.isOptionFocused(processedOption), + disabled: this.isOptionDisabled(processedOption) + } + }); + }, "getPTOptions"), + isOptionDisabled: /* @__PURE__ */ __name(function isOptionDisabled(processedOption) { + return this.optionDisabled ? resolveFieldData(processedOption.option, this.optionDisabled) : false; + }, "isOptionDisabled"), + getOptionGroupLabel: /* @__PURE__ */ __name(function getOptionGroupLabel(processedOption) { + return this.optionGroupLabel ? resolveFieldData(processedOption.option, this.optionGroupLabel) : null; + }, "getOptionGroupLabel"), + getOptionGroupChildren: /* @__PURE__ */ __name(function getOptionGroupChildren(processedOption) { + return processedOption.children; + }, "getOptionGroupChildren"), + isOptionGroup: /* @__PURE__ */ __name(function isOptionGroup(processedOption) { + return isNotEmpty(processedOption.children); + }, "isOptionGroup"), + isOptionSelected: /* @__PURE__ */ __name(function isOptionSelected(processedOption) { + return equals(this.value, processedOption === null || processedOption === void 0 ? void 0 : processedOption.option); + }, "isOptionSelected"), + isOptionActive: /* @__PURE__ */ __name(function isOptionActive(processedOption) { + return this.activeOptionPath.some(function(path) { + return path.key === processedOption.key; + }); + }, "isOptionActive"), + isOptionFocused: /* @__PURE__ */ __name(function isOptionFocused(processedOption) { + return this.focusedOptionId === this.getOptionId(processedOption); + }, "isOptionFocused"), + getOptionLabelToRender: /* @__PURE__ */ __name(function getOptionLabelToRender(processedOption) { + return this.isOptionGroup(processedOption) ? this.getOptionGroupLabel(processedOption) : this.getOptionLabel(processedOption); + }, "getOptionLabelToRender"), + onOptionClick: /* @__PURE__ */ __name(function onOptionClick(event2, processedOption) { + this.$emit("option-change", { + originalEvent: event2, + processedOption, + isFocus: true + }); + }, "onOptionClick"), + onOptionMouseEnter: /* @__PURE__ */ __name(function onOptionMouseEnter(event2, processedOption) { + this.$emit("option-focus-enter-change", { + originalEvent: event2, + processedOption + }); + }, "onOptionMouseEnter"), + onOptionMouseMove: /* @__PURE__ */ __name(function onOptionMouseMove(event2, processedOption) { + this.$emit("option-focus-change", { + originalEvent: event2, + processedOption + }); + }, "onOptionMouseMove"), + containerRef: /* @__PURE__ */ __name(function containerRef2(el) { + this.container = el; + }, "containerRef"), + listAriaLabel: /* @__PURE__ */ __name(function listAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.listLabel : void 0; + }, "listAriaLabel") + }, + directives: { + ripple: Ripple + }, + components: { + AngleRightIcon: script$1q + } +}; +var _hoisted_1$1$6 = ["id", "aria-label", "aria-selected", "aria-expanded", "aria-level", "aria-setsize", "aria-posinset", "data-p-option-group", "data-p-active", "data-p-focus", "data-p-disabled"]; +var _hoisted_2$k = ["onClick", "onMouseenter", "onMousemove"]; +function render$1$8(_ctx, _cache, $props, $setup, $data, $options) { + var _component_AngleRightIcon = resolveComponent("AngleRightIcon"); + var _component_CascadeSelectSub = resolveComponent("CascadeSelectSub", true); + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createElementBlock("ul", mergeProps({ + ref: $options.containerRef, + "class": _ctx.cx("list") + }, $props.level === 0 ? _ctx.ptm("list") : _ctx.ptm("optionList")), [(openBlock(true), createElementBlock(Fragment, null, renderList($props.options, function(processedOption, index) { + return openBlock(), createElementBlock("li", mergeProps({ + key: $options.getOptionLabelToRender(processedOption), + id: $options.getOptionId(processedOption), + "class": _ctx.cx("option", { + processedOption + }), + role: "treeitem", + "aria-label": $options.getOptionLabelToRender(processedOption), + "aria-selected": $options.isOptionGroup(processedOption) ? void 0 : $options.isOptionSelected(processedOption), + "aria-expanded": $options.isOptionGroup(processedOption) ? $options.isOptionActive(processedOption) : void 0, + "aria-level": $props.level + 1, + "aria-setsize": $props.options.length, + "aria-posinset": index + 1, + ref_for: true + }, $options.getPTOptions(processedOption, index, "option"), { + "data-p-option-group": $options.isOptionGroup(processedOption), + "data-p-active": $options.isOptionActive(processedOption), + "data-p-focus": $options.isOptionFocused(processedOption), + "data-p-disabled": $options.isOptionDisabled(processedOption) + }), [withDirectives((openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("optionContent"), + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onOptionClick($event, processedOption); + }, "onClick"), + onMouseenter: /* @__PURE__ */ __name(function onMouseenter($event) { + return $options.onOptionMouseEnter($event, processedOption); + }, "onMouseenter"), + onMousemove: /* @__PURE__ */ __name(function onMousemove($event) { + return $options.onOptionMouseMove($event, processedOption); + }, "onMousemove"), + ref_for: true + }, $options.getPTOptions(processedOption, index, "optionContent")), [$props.templates["option"] ? (openBlock(), createBlock(resolveDynamicComponent($props.templates["option"]), { + key: 0, + option: processedOption.option, + selected: $options.isOptionGroup(processedOption) ? false : $options.isOptionSelected(processedOption) + }, null, 8, ["option", "selected"])) : (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + "class": _ctx.cx("optionText"), + ref_for: true + }, $options.getPTOptions(processedOption, index, "optionText")), toDisplayString($options.getOptionLabelToRender(processedOption)), 17)), $options.isOptionGroup(processedOption) ? (openBlock(), createElementBlock("span", { + key: 2, + "class": normalizeClass(_ctx.cx("groupIconContainer")) + }, [$props.templates["optiongroupicon"] ? (openBlock(), createBlock(resolveDynamicComponent($props.templates["optiongroupicon"]), { + key: 0, + "class": normalizeClass(_ctx.cx("groupIcon")) + }, null, 8, ["class"])) : $props.optionGroupIcon ? (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + "class": [_ctx.cx("groupIcon"), $props.optionGroupIcon], + "aria-hidden": "true", + ref_for: true + }, $options.getPTOptions(processedOption, index, "groupIcon")), null, 16)) : (openBlock(), createBlock(_component_AngleRightIcon, mergeProps({ + key: 2, + "class": _ctx.cx("groupIcon"), + "aria-hidden": "true", + ref_for: true + }, $options.getPTOptions(processedOption, index, "groupIcon")), null, 16, ["class"]))], 2)) : createCommentVNode("", true)], 16, _hoisted_2$k)), [[_directive_ripple]]), $options.isOptionGroup(processedOption) && $options.isOptionActive(processedOption) ? (openBlock(), createBlock(_component_CascadeSelectSub, { + key: 0, + role: "group", + "class": normalizeClass(_ctx.cx("optionList")), + selectId: $props.selectId, + focusedOptionId: $props.focusedOptionId, + options: $options.getOptionGroupChildren(processedOption), + activeOptionPath: $props.activeOptionPath, + level: $props.level + 1, + templates: $props.templates, + optionLabel: $props.optionLabel, + optionValue: $props.optionValue, + optionDisabled: $props.optionDisabled, + optionGroupIcon: $props.optionGroupIcon, + optionGroupLabel: $props.optionGroupLabel, + optionGroupChildren: $props.optionGroupChildren, + value: $props.value, + onOptionChange: _cache[0] || (_cache[0] = function($event) { + return _ctx.$emit("option-change", $event); + }), + onOptionFocusChange: _cache[1] || (_cache[1] = function($event) { + return _ctx.$emit("option-focus-change", $event); + }), + onOptionFocusEnterChange: _cache[2] || (_cache[2] = function($event) { + return _ctx.$emit("option-focus-enter-change", $event); + }), + pt: _ctx.pt, + unstyled: _ctx.unstyled + }, null, 8, ["class", "selectId", "focusedOptionId", "options", "activeOptionPath", "level", "templates", "optionLabel", "optionValue", "optionDisabled", "optionGroupIcon", "optionGroupLabel", "optionGroupChildren", "value", "pt", "unstyled"])) : createCommentVNode("", true)], 16, _hoisted_1$1$6); + }), 128))], 16); +} +__name(render$1$8, "render$1$8"); +script$1$E.render = render$1$8; +function _typeof$1$3(o) { + "@babel/helpers - typeof"; + return _typeof$1$3 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$1$3(o); +} +__name(_typeof$1$3, "_typeof$1$3"); +function ownKeys$1$2(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$1$2, "ownKeys$1$2"); +function _objectSpread$1$2(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$1$2(Object(t2), true).forEach(function(r2) { + _defineProperty$1$3(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$1$2(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$1$2, "_objectSpread$1$2"); +function _defineProperty$1$3(e, r, t2) { + return (r = _toPropertyKey$1$3(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$1$3, "_defineProperty$1$3"); +function _toPropertyKey$1$3(t2) { + var i = _toPrimitive$1$3(t2, "string"); + return "symbol" == _typeof$1$3(i) ? i : i + ""; +} +__name(_toPropertyKey$1$3, "_toPropertyKey$1$3"); +function _toPrimitive$1$3(t2, r) { + if ("object" != _typeof$1$3(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$1$3(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$1$3, "_toPrimitive$1$3"); +var script$10 = { + name: "CascadeSelect", + "extends": script$2$8, + inheritAttrs: false, + emits: ["change", "focus", "blur", "click", "group-change", "before-show", "before-hide", "hide", "show"], + outsideClickListener: null, + matchMediaListener: null, + scrollHandler: null, + resizeListener: null, + overlay: null, + searchTimeout: null, + searchValue: null, + data: /* @__PURE__ */ __name(function data4() { + return { + id: this.$attrs.id, + clicked: false, + focused: false, + focusedOptionInfo: { + index: -1, + level: 0, + parentKey: "" + }, + activeOptionPath: [], + overlayVisible: false, + dirty: false, + mobileActive: false, + query: null, + queryMatches: false + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId2(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + options: /* @__PURE__ */ __name(function options() { + this.autoUpdateModel(); + }, "options") + }, + mounted: /* @__PURE__ */ __name(function mounted7() { + this.id = this.id || UniqueComponentId(); + this.autoUpdateModel(); + this.bindMatchMediaListener(); + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount3() { + this.unbindOutsideClickListener(); + this.unbindResizeListener(); + this.unbindMatchMediaListener(); + if (this.scrollHandler) { + this.scrollHandler.destroy(); + this.scrollHandler = null; + } + if (this.overlay) { + ZIndex.clear(this.overlay); + this.overlay = null; + } + if (this.mobileActive) { + this.mobileActive = false; + } + }, "beforeUnmount"), + methods: { + getOptionLabel: /* @__PURE__ */ __name(function getOptionLabel2(option4) { + return this.optionLabel ? resolveFieldData(option4, this.optionLabel) : option4; + }, "getOptionLabel"), + getOptionValue: /* @__PURE__ */ __name(function getOptionValue2(option4) { + return this.optionValue ? resolveFieldData(option4, this.optionValue) : option4; + }, "getOptionValue"), + isOptionDisabled: /* @__PURE__ */ __name(function isOptionDisabled2(option4) { + return this.optionDisabled ? resolveFieldData(option4, this.optionDisabled) : false; + }, "isOptionDisabled"), + getOptionGroupLabel: /* @__PURE__ */ __name(function getOptionGroupLabel2(optionGroup) { + return this.optionGroupLabel ? resolveFieldData(optionGroup, this.optionGroupLabel) : null; + }, "getOptionGroupLabel"), + getOptionGroupChildren: /* @__PURE__ */ __name(function getOptionGroupChildren2(optionGroup, level) { + return isString(this.optionGroupChildren) ? resolveFieldData(optionGroup, this.optionGroupChildren) : resolveFieldData(optionGroup, this.optionGroupChildren[level]); + }, "getOptionGroupChildren"), + isOptionGroup: /* @__PURE__ */ __name(function isOptionGroup2(option4, level) { + return Object.prototype.hasOwnProperty.call(option4, this.optionGroupChildren[level]); + }, "isOptionGroup"), + getProccessedOptionLabel: /* @__PURE__ */ __name(function getProccessedOptionLabel() { + var processedOption = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; + var grouped = this.isProccessedOptionGroup(processedOption); + return grouped ? this.getOptionGroupLabel(processedOption.option, processedOption.level) : this.getOptionLabel(processedOption.option); + }, "getProccessedOptionLabel"), + isProccessedOptionGroup: /* @__PURE__ */ __name(function isProccessedOptionGroup(processedOption) { + return isNotEmpty(processedOption === null || processedOption === void 0 ? void 0 : processedOption.children); + }, "isProccessedOptionGroup"), + show: /* @__PURE__ */ __name(function show(isFocus) { + this.$emit("before-show"); + this.overlayVisible = true; + this.activeOptionPath = this.$filled ? this.findOptionPathByValue(this.d_value) : this.activeOptionPath; + if (this.$filled && isNotEmpty(this.activeOptionPath)) { + var processedOption = this.activeOptionPath[this.activeOptionPath.length - 1]; + this.focusedOptionInfo = { + index: processedOption.index, + level: processedOption.level, + parentKey: processedOption.parentKey + }; + } else { + this.focusedOptionInfo = { + index: this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : this.findSelectedOptionIndex(), + level: 0, + parentKey: "" + }; + } + isFocus && focus(this.$refs.focusInput); + }, "show"), + hide: /* @__PURE__ */ __name(function hide2(isFocus) { + var _this = this; + var _hide = /* @__PURE__ */ __name(function _hide2() { + _this.$emit("before-hide"); + _this.overlayVisible = false; + _this.clicked = false; + _this.activeOptionPath = []; + _this.focusedOptionInfo = { + index: -1, + level: 0, + parentKey: "" + }; + isFocus && focus(_this.$refs.focusInput); + }, "_hide"); + setTimeout(function() { + _hide(); + }, 0); + }, "hide"), + onFocus: /* @__PURE__ */ __name(function onFocus3(event2) { + if (this.disabled) { + return; + } + this.focused = true; + this.$emit("focus", event2); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur2(event2) { + var _this$formField$onBlu, _this$formField; + this.focused = false; + this.focusedOptionInfo = { + index: -1, + level: 0, + parentKey: "" + }; + this.searchValue = ""; + this.$emit("blur", event2); + (_this$formField$onBlu = (_this$formField = this.formField).onBlur) === null || _this$formField$onBlu === void 0 || _this$formField$onBlu.call(_this$formField); + }, "onBlur"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown2(event2) { + if (this.disabled || this.loading) { + event2.preventDefault(); + return; + } + var metaKey = event2.metaKey || event2.ctrlKey; + switch (event2.code) { + case "ArrowDown": + this.onArrowDownKey(event2); + break; + case "ArrowUp": + this.onArrowUpKey(event2); + break; + case "ArrowLeft": + this.onArrowLeftKey(event2); + break; + case "ArrowRight": + this.onArrowRightKey(event2); + break; + case "Home": + this.onHomeKey(event2); + break; + case "End": + this.onEndKey(event2); + break; + case "Space": + this.onSpaceKey(event2); + break; + case "Enter": + case "NumpadEnter": + this.onEnterKey(event2); + break; + case "Escape": + this.onEscapeKey(event2); + break; + case "Tab": + this.onTabKey(event2); + break; + case "PageDown": + case "PageUp": + case "Backspace": + case "ShiftLeft": + case "ShiftRight": + break; + default: + if (!metaKey && isPrintableCharacter(event2.key)) { + !this.overlayVisible && this.show(); + this.searchOptions(event2, event2.key); + } + break; + } + this.clicked = false; + }, "onKeyDown"), + onOptionChange: /* @__PURE__ */ __name(function onOptionChange(event2) { + var processedOption = event2.processedOption, type = event2.type; + if (isEmpty(processedOption)) return; + var index = processedOption.index, key = processedOption.key, level = processedOption.level, parentKey = processedOption.parentKey, children = processedOption.children; + var grouped = isNotEmpty(children); + var activeOptionPath = this.activeOptionPath.filter(function(p) { + return p.parentKey !== parentKey && p.parentKey !== key; + }); + this.focusedOptionInfo = { + index, + level, + parentKey + }; + if (type == "hover" && this.queryMatches) { + return; + } + if (grouped) { + activeOptionPath.push(processedOption); + } + this.activeOptionPath = activeOptionPath; + }, "onOptionChange"), + onOptionClick: /* @__PURE__ */ __name(function onOptionClick2(event2) { + var originalEvent = event2.originalEvent, processedOption = event2.processedOption, isFocus = event2.isFocus, isHide = event2.isHide, preventSelection = event2.preventSelection; + var index = processedOption.index, key = processedOption.key, level = processedOption.level, parentKey = processedOption.parentKey; + var grouped = this.isProccessedOptionGroup(processedOption); + var selected3 = this.isSelected(processedOption); + if (selected3) { + this.activeOptionPath = this.activeOptionPath.filter(function(p) { + return key !== p.key && key.startsWith(p.key); + }); + this.focusedOptionInfo = { + index, + level, + parentKey + }; + } else { + if (grouped) { + this.onOptionChange(event2); + this.onOptionGroupSelect(originalEvent, processedOption); + } else { + var activeOptionPath = this.activeOptionPath.filter(function(p) { + return p.parentKey !== parentKey; + }); + activeOptionPath.push(processedOption); + this.focusedOptionInfo = { + index, + level, + parentKey + }; + if (!preventSelection || (processedOption === null || processedOption === void 0 ? void 0 : processedOption.children.length) !== 0) { + this.activeOptionPath = activeOptionPath; + this.onOptionSelect(originalEvent, processedOption, isHide); + } + } + } + isFocus && focus(this.$refs.focusInput); + }, "onOptionClick"), + onOptionMouseEnter: /* @__PURE__ */ __name(function onOptionMouseEnter2(event2) { + if (this.focusOnHover) { + if (this.dirty || !this.dirty && isNotEmpty(this.d_value)) { + this.onOptionChange(_objectSpread$1$2(_objectSpread$1$2({}, event2), {}, { + type: "hover" + })); + } else if (!this.dirty && event2.processedOption.level === 0) { + this.onOptionClick(_objectSpread$1$2(_objectSpread$1$2({}, event2), {}, { + type: "hover" + })); + } + } + }, "onOptionMouseEnter"), + onOptionMouseMove: /* @__PURE__ */ __name(function onOptionMouseMove2(event2) { + if (this.focused && this.focusOnHover) { + this.changeFocusedOptionIndex(event2, event2.processedOption.index); + } + }, "onOptionMouseMove"), + onOptionSelect: /* @__PURE__ */ __name(function onOptionSelect(event2, processedOption) { + var isHide = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true; + var value2 = this.getOptionValue(processedOption === null || processedOption === void 0 ? void 0 : processedOption.option); + this.activeOptionPath.forEach(function(p) { + return p.selected = true; + }); + this.updateModel(event2, value2); + isHide && this.hide(true); + }, "onOptionSelect"), + onOptionGroupSelect: /* @__PURE__ */ __name(function onOptionGroupSelect(event2, processedOption) { + this.dirty = true; + this.$emit("group-change", { + originalEvent: event2, + value: processedOption.option + }); + }, "onOptionGroupSelect"), + onContainerClick: /* @__PURE__ */ __name(function onContainerClick(event2) { + if (this.disabled || this.loading) { + return; + } + if (event2.target.getAttribute("data-pc-section") === "clearicon" || event2.target.closest('[data-pc-section="clearicon"]')) { + return; + } else if (!this.overlay || !this.overlay.contains(event2.target)) { + this.overlayVisible ? this.hide() : this.show(); + focus(this.$refs.focusInput); + } + this.clicked = true; + this.$emit("click", event2); + }, "onContainerClick"), + onClearClick: /* @__PURE__ */ __name(function onClearClick(event2) { + this.updateModel(event2, null); + }, "onClearClick"), + onOverlayClick: /* @__PURE__ */ __name(function onOverlayClick2(event2) { + OverlayEventBus.emit("overlay-click", { + originalEvent: event2, + target: this.$el + }); + }, "onOverlayClick"), + onOverlayKeyDown: /* @__PURE__ */ __name(function onOverlayKeyDown2(event2) { + switch (event2.code) { + case "Escape": + this.onEscapeKey(event2); + break; + } + }, "onOverlayKeyDown"), + onArrowDownKey: /* @__PURE__ */ __name(function onArrowDownKey2(event2) { + if (!this.overlayVisible) { + this.show(); + } else { + var optionIndex = this.focusedOptionInfo.index !== -1 ? this.findNextOptionIndex(this.focusedOptionInfo.index) : this.clicked ? this.findFirstOptionIndex() : this.findFirstFocusedOptionIndex(); + this.changeFocusedOptionIndex(event2, optionIndex, true); + } + event2.preventDefault(); + }, "onArrowDownKey"), + onArrowUpKey: /* @__PURE__ */ __name(function onArrowUpKey2(event2) { + if (event2.altKey) { + if (this.focusedOptionInfo.index !== -1) { + var processedOption = this.visibleOptions[this.focusedOptionInfo.index]; + var grouped = this.isProccessedOptionGroup(processedOption); + !grouped && this.onOptionChange({ + originalEvent: event2, + processedOption + }); + } + this.overlayVisible && this.hide(); + event2.preventDefault(); + } else { + var optionIndex = this.focusedOptionInfo.index !== -1 ? this.findPrevOptionIndex(this.focusedOptionInfo.index) : this.clicked ? this.findLastOptionIndex() : this.findLastFocusedOptionIndex(); + this.changeFocusedOptionIndex(event2, optionIndex, true); + !this.overlayVisible && this.show(); + event2.preventDefault(); + } + }, "onArrowUpKey"), + onArrowLeftKey: /* @__PURE__ */ __name(function onArrowLeftKey(event2) { + var _this2 = this; + if (this.overlayVisible) { + var processedOption = this.visibleOptions[this.focusedOptionInfo.index]; + var parentOption = this.activeOptionPath.find(function(p) { + return p.key === (processedOption === null || processedOption === void 0 ? void 0 : processedOption.parentKey); + }); + var matched = this.focusedOptionInfo.parentKey === "" || parentOption && parentOption.key === this.focusedOptionInfo.parentKey; + var root35 = isEmpty(processedOption === null || processedOption === void 0 ? void 0 : processedOption.parent); + if (matched) { + this.activeOptionPath = this.activeOptionPath.filter(function(p) { + return p.parentKey !== _this2.focusedOptionInfo.parentKey; + }); + } + if (!root35) { + this.focusedOptionInfo = { + index: -1, + parentKey: parentOption ? parentOption.parentKey : "" + }; + this.searchValue = ""; + this.onArrowDownKey(event2); + } + event2.preventDefault(); + } + }, "onArrowLeftKey"), + onArrowRightKey: /* @__PURE__ */ __name(function onArrowRightKey(event2) { + if (this.overlayVisible) { + var processedOption = this.visibleOptions[this.focusedOptionInfo.index]; + var grouped = this.isProccessedOptionGroup(processedOption); + if (grouped) { + var matched = this.activeOptionPath.some(function(p) { + return (processedOption === null || processedOption === void 0 ? void 0 : processedOption.key) === p.key; + }); + if (matched) { + this.focusedOptionInfo = { + index: -1, + parentKey: processedOption === null || processedOption === void 0 ? void 0 : processedOption.key + }; + this.searchValue = ""; + this.onArrowDownKey(event2); + } else { + this.onOptionChange({ + originalEvent: event2, + processedOption + }); + } + } + event2.preventDefault(); + } + }, "onArrowRightKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey2(event2) { + this.changeFocusedOptionIndex(event2, this.findFirstOptionIndex()); + !this.overlayVisible && this.show(); + event2.preventDefault(); + }, "onHomeKey"), + onEndKey: /* @__PURE__ */ __name(function onEndKey2(event2) { + this.changeFocusedOptionIndex(event2, this.findLastOptionIndex()); + !this.overlayVisible && this.show(); + event2.preventDefault(); + }, "onEndKey"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey2(event2) { + if (!this.overlayVisible) { + this.focusedOptionInfo.index !== -1; + this.onArrowDownKey(event2); + } else { + if (this.focusedOptionInfo.index !== -1) { + var processedOption = this.visibleOptions[this.focusedOptionInfo.index]; + var grouped = this.isProccessedOptionGroup(processedOption); + this.onOptionClick({ + originalEvent: event2, + processedOption, + preventSelection: false + }); + !grouped && this.hide(); + } + } + event2.preventDefault(); + }, "onEnterKey"), + onSpaceKey: /* @__PURE__ */ __name(function onSpaceKey(event2) { + this.onEnterKey(event2); + }, "onSpaceKey"), + onEscapeKey: /* @__PURE__ */ __name(function onEscapeKey(event2) { + this.overlayVisible && this.hide(true); + event2.preventDefault(); + }, "onEscapeKey"), + onTabKey: /* @__PURE__ */ __name(function onTabKey(event2) { + if (this.focusedOptionInfo.index !== -1) { + var processedOption = this.visibleOptions[this.focusedOptionInfo.index]; + var grouped = this.isProccessedOptionGroup(processedOption); + !grouped && this.onOptionChange({ + originalEvent: event2, + processedOption + }); + } + this.overlayVisible && this.hide(); + }, "onTabKey"), + onOverlayEnter: /* @__PURE__ */ __name(function onOverlayEnter2(el) { + ZIndex.set("overlay", el, this.$primevue.config.zIndex.overlay); + addStyle(el, { + position: "absolute", + top: "0", + left: "0" + }); + this.alignOverlay(); + this.scrollInView(); + }, "onOverlayEnter"), + onOverlayAfterEnter: /* @__PURE__ */ __name(function onOverlayAfterEnter() { + this.bindOutsideClickListener(); + this.bindScrollListener(); + this.bindResizeListener(); + this.$emit("show"); + }, "onOverlayAfterEnter"), + onOverlayLeave: /* @__PURE__ */ __name(function onOverlayLeave2() { + this.unbindOutsideClickListener(); + this.unbindScrollListener(); + this.unbindResizeListener(); + this.$emit("hide"); + this.overlay = null; + this.dirty = false; + }, "onOverlayLeave"), + onOverlayAfterLeave: /* @__PURE__ */ __name(function onOverlayAfterLeave2(el) { + ZIndex.clear(el); + }, "onOverlayAfterLeave"), + alignOverlay: /* @__PURE__ */ __name(function alignOverlay2() { + if (this.appendTo === "self") { + relativePosition(this.overlay, this.$el); + } else { + this.overlay.style.minWidth = getOuterWidth(this.$el) + "px"; + absolutePosition(this.overlay, this.$el); + } + }, "alignOverlay"), + bindOutsideClickListener: /* @__PURE__ */ __name(function bindOutsideClickListener3() { + var _this3 = this; + if (!this.outsideClickListener) { + this.outsideClickListener = function(event2) { + if (_this3.overlayVisible && _this3.overlay && !_this3.$el.contains(event2.target) && !_this3.overlay.contains(event2.target)) { + _this3.hide(); + } + }; + document.addEventListener("click", this.outsideClickListener); + } + }, "bindOutsideClickListener"), + unbindOutsideClickListener: /* @__PURE__ */ __name(function unbindOutsideClickListener3() { + if (this.outsideClickListener) { + document.removeEventListener("click", this.outsideClickListener); + this.outsideClickListener = null; + } + }, "unbindOutsideClickListener"), + bindScrollListener: /* @__PURE__ */ __name(function bindScrollListener2() { + var _this4 = this; + if (!this.scrollHandler) { + this.scrollHandler = new ConnectedOverlayScrollHandler(this.$refs.container, function() { + if (_this4.overlayVisible) { + _this4.hide(); + } + }); + } + this.scrollHandler.bindScrollListener(); + }, "bindScrollListener"), + unbindScrollListener: /* @__PURE__ */ __name(function unbindScrollListener2() { + if (this.scrollHandler) { + this.scrollHandler.unbindScrollListener(); + } + }, "unbindScrollListener"), + bindResizeListener: /* @__PURE__ */ __name(function bindResizeListener2() { + var _this5 = this; + if (!this.resizeListener) { + this.resizeListener = function() { + if (_this5.overlayVisible && !isTouchDevice()) { + _this5.hide(); + } + }; + window.addEventListener("resize", this.resizeListener); + } + }, "bindResizeListener"), + unbindResizeListener: /* @__PURE__ */ __name(function unbindResizeListener2() { + if (this.resizeListener) { + window.removeEventListener("resize", this.resizeListener); + this.resizeListener = null; + } + }, "unbindResizeListener"), + bindMatchMediaListener: /* @__PURE__ */ __name(function bindMatchMediaListener2() { + var _this6 = this; + if (!this.matchMediaListener) { + var query = matchMedia("(max-width: ".concat(this.breakpoint, ")")); + this.query = query; + this.queryMatches = query.matches; + this.matchMediaListener = function() { + _this6.queryMatches = query.matches; + _this6.mobileActive = false; + }; + this.query.addEventListener("change", this.matchMediaListener); + } + }, "bindMatchMediaListener"), + unbindMatchMediaListener: /* @__PURE__ */ __name(function unbindMatchMediaListener2() { + if (this.matchMediaListener) { + this.query.removeEventListener("change", this.matchMediaListener); + this.matchMediaListener = null; + } + }, "unbindMatchMediaListener"), + isOptionMatched: /* @__PURE__ */ __name(function isOptionMatched(processedOption) { + var _this$getProccessedOp; + return this.isValidOption(processedOption) && ((_this$getProccessedOp = this.getProccessedOptionLabel(processedOption)) === null || _this$getProccessedOp === void 0 ? void 0 : _this$getProccessedOp.toLocaleLowerCase(this.searchLocale).startsWith(this.searchValue.toLocaleLowerCase(this.searchLocale))); + }, "isOptionMatched"), + isValidOption: /* @__PURE__ */ __name(function isValidOption(processedOption) { + return isNotEmpty(processedOption) && !this.isOptionDisabled(processedOption.option); + }, "isValidOption"), + isValidSelectedOption: /* @__PURE__ */ __name(function isValidSelectedOption(processedOption) { + return this.isValidOption(processedOption) && this.isSelected(processedOption); + }, "isValidSelectedOption"), + isSelected: /* @__PURE__ */ __name(function isSelected2(processedOption) { + return this.activeOptionPath.some(function(p) { + return p.key === processedOption.key; + }); + }, "isSelected"), + findFirstOptionIndex: /* @__PURE__ */ __name(function findFirstOptionIndex() { + var _this7 = this; + return this.visibleOptions.findIndex(function(processedOption) { + return _this7.isValidOption(processedOption); + }); + }, "findFirstOptionIndex"), + findLastOptionIndex: /* @__PURE__ */ __name(function findLastOptionIndex() { + var _this8 = this; + return findLastIndex(this.visibleOptions, function(processedOption) { + return _this8.isValidOption(processedOption); + }); + }, "findLastOptionIndex"), + findNextOptionIndex: /* @__PURE__ */ __name(function findNextOptionIndex(index) { + var _this9 = this; + var matchedOptionIndex = index < this.visibleOptions.length - 1 ? this.visibleOptions.slice(index + 1).findIndex(function(processedOption) { + return _this9.isValidOption(processedOption); + }) : -1; + return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index; + }, "findNextOptionIndex"), + findPrevOptionIndex: /* @__PURE__ */ __name(function findPrevOptionIndex(index) { + var _this10 = this; + var matchedOptionIndex = index > 0 ? findLastIndex(this.visibleOptions.slice(0, index), function(processedOption) { + return _this10.isValidOption(processedOption); + }) : -1; + return matchedOptionIndex > -1 ? matchedOptionIndex : index; + }, "findPrevOptionIndex"), + findSelectedOptionIndex: /* @__PURE__ */ __name(function findSelectedOptionIndex() { + var _this11 = this; + return this.visibleOptions.findIndex(function(processedOption) { + return _this11.isValidSelectedOption(processedOption); + }); + }, "findSelectedOptionIndex"), + findFirstFocusedOptionIndex: /* @__PURE__ */ __name(function findFirstFocusedOptionIndex() { + var selectedIndex = this.findSelectedOptionIndex(); + return selectedIndex < 0 ? this.findFirstOptionIndex() : selectedIndex; + }, "findFirstFocusedOptionIndex"), + findLastFocusedOptionIndex: /* @__PURE__ */ __name(function findLastFocusedOptionIndex() { + var selectedIndex = this.findSelectedOptionIndex(); + return selectedIndex < 0 ? this.findLastOptionIndex() : selectedIndex; + }, "findLastFocusedOptionIndex"), + findOptionPathByValue: /* @__PURE__ */ __name(function findOptionPathByValue(value2, processedOptions2) { + var level = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0; + processedOptions2 = processedOptions2 || level === 0 && this.processedOptions; + if (!processedOptions2) return null; + if (isEmpty(value2)) return []; + for (var i = 0; i < processedOptions2.length; i++) { + var processedOption = processedOptions2[i]; + if (equals(value2, this.getOptionValue(processedOption.option), this.equalityKey)) { + return [processedOption]; + } + var matchedOptions = this.findOptionPathByValue(value2, processedOption.children, level + 1); + if (matchedOptions) { + matchedOptions.unshift(processedOption); + return matchedOptions; + } + } + }, "findOptionPathByValue"), + searchOptions: /* @__PURE__ */ __name(function searchOptions(event2, _char) { + var _this12 = this; + this.searchValue = (this.searchValue || "") + _char; + var optionIndex = -1; + var matched = false; + if (isNotEmpty(this.searchValue)) { + if (this.focusedOptionInfo.index !== -1) { + optionIndex = this.visibleOptions.slice(this.focusedOptionInfo.index).findIndex(function(processedOption) { + return _this12.isOptionMatched(processedOption); + }); + optionIndex = optionIndex === -1 ? this.visibleOptions.slice(0, this.focusedOptionInfo.index).findIndex(function(processedOption) { + return _this12.isOptionMatched(processedOption); + }) : optionIndex + this.focusedOptionInfo.index; + } else { + optionIndex = this.visibleOptions.findIndex(function(processedOption) { + return _this12.isOptionMatched(processedOption); + }); + } + if (optionIndex !== -1) { + matched = true; + } + if (optionIndex === -1 && this.focusedOptionInfo.index === -1) { + optionIndex = this.findFirstFocusedOptionIndex(); + } + if (optionIndex !== -1) { + this.changeFocusedOptionIndex(event2, optionIndex); + } + } + if (this.searchTimeout) { + clearTimeout(this.searchTimeout); + } + this.searchTimeout = setTimeout(function() { + _this12.searchValue = ""; + _this12.searchTimeout = null; + }, 500); + return matched; + }, "searchOptions"), + changeFocusedOptionIndex: /* @__PURE__ */ __name(function changeFocusedOptionIndex(event2, index, preventSelection) { + if (this.focusedOptionInfo.index !== index) { + this.focusedOptionInfo.index = index; + this.scrollInView(); + if (this.focusOnHover) { + this.onOptionClick({ + originalEvent: event2, + processedOption: this.visibleOptions[index], + isHide: false, + preventSelection + }); + } + if (this.selectOnFocus) { + this.onOptionChange({ + originalEvent: event2, + processedOption: this.visibleOptions[index], + isHide: false + }); + } + } + }, "changeFocusedOptionIndex"), + scrollInView: /* @__PURE__ */ __name(function scrollInView2() { + var _this13 = this; + var index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : -1; + this.$nextTick(function() { + var id4 = index !== -1 ? "".concat(_this13.id, "_").concat(index) : _this13.focusedOptionId; + var element = findSingle(_this13.list, 'li[id="'.concat(id4, '"]')); + if (element) { + element.scrollIntoView && element.scrollIntoView({ + block: "nearest", + inline: "start" + }); + } + }); + }, "scrollInView"), + autoUpdateModel: /* @__PURE__ */ __name(function autoUpdateModel() { + if (this.selectOnFocus && this.autoOptionFocus && !this.$filled) { + this.focusedOptionInfo.index = this.findFirstFocusedOptionIndex(); + this.onOptionChange({ + processedOption: this.visibleOptions[this.focusedOptionInfo.index], + isHide: false + }); + !this.overlayVisible && (this.focusedOptionInfo = { + index: -1, + level: 0, + parentKey: "" + }); + } + }, "autoUpdateModel"), + updateModel: /* @__PURE__ */ __name(function updateModel2(event2, value2) { + this.writeValue(value2, event2); + this.$emit("change", { + originalEvent: event2, + value: value2 + }); + }, "updateModel"), + createProcessedOptions: /* @__PURE__ */ __name(function createProcessedOptions(options4) { + var _this14 = this; + var level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; + var parent = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + var parentKey = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : ""; + var processedOptions2 = []; + options4 && options4.forEach(function(option4, index) { + var key = (parentKey !== "" ? parentKey + "_" : "") + index; + var newOption = { + option: option4, + index, + level, + key, + parent, + parentKey + }; + newOption["children"] = _this14.createProcessedOptions(_this14.getOptionGroupChildren(option4, level), level + 1, newOption, key); + processedOptions2.push(newOption); + }); + return processedOptions2; + }, "createProcessedOptions"), + overlayRef: /* @__PURE__ */ __name(function overlayRef2(el) { + this.overlay = el; + }, "overlayRef") + }, + computed: { + // @deprecated use $filled instead. + hasSelectedOption: /* @__PURE__ */ __name(function hasSelectedOption() { + return this.$filled; + }, "hasSelectedOption"), + label: /* @__PURE__ */ __name(function label3() { + var label12 = this.placeholder || "p-emptylabel"; + if (this.$filled) { + var activeOptionPath = this.findOptionPathByValue(this.d_value); + var processedOption = isNotEmpty(activeOptionPath) ? activeOptionPath[activeOptionPath.length - 1] : null; + return processedOption ? this.getOptionLabel(processedOption.option) : label12; + } + return label12; + }, "label"), + processedOptions: /* @__PURE__ */ __name(function processedOptions() { + return this.createProcessedOptions(this.options || []); + }, "processedOptions"), + visibleOptions: /* @__PURE__ */ __name(function visibleOptions() { + var _this15 = this; + var processedOption = this.activeOptionPath.find(function(p) { + return p.key === _this15.focusedOptionInfo.parentKey; + }); + return processedOption ? processedOption.children : this.processedOptions; + }, "visibleOptions"), + equalityKey: /* @__PURE__ */ __name(function equalityKey() { + return this.optionValue ? null : this.dataKey; + }, "equalityKey"), + searchResultMessageText: /* @__PURE__ */ __name(function searchResultMessageText() { + return isNotEmpty(this.visibleOptions) ? this.searchMessageText.replaceAll("{0}", this.visibleOptions.length) : this.emptySearchMessageText; + }, "searchResultMessageText"), + searchMessageText: /* @__PURE__ */ __name(function searchMessageText() { + return this.searchMessage || this.$primevue.config.locale.searchMessage || ""; + }, "searchMessageText"), + emptySearchMessageText: /* @__PURE__ */ __name(function emptySearchMessageText() { + return this.emptySearchMessage || this.$primevue.config.locale.emptySearchMessage || ""; + }, "emptySearchMessageText"), + emptyMessageText: /* @__PURE__ */ __name(function emptyMessageText() { + return this.emptyMessage || this.$primevue.config.locale.emptyMessage || ""; + }, "emptyMessageText"), + selectionMessageText: /* @__PURE__ */ __name(function selectionMessageText() { + return this.selectionMessage || this.$primevue.config.locale.selectionMessage || ""; + }, "selectionMessageText"), + emptySelectionMessageText: /* @__PURE__ */ __name(function emptySelectionMessageText() { + return this.emptySelectionMessage || this.$primevue.config.locale.emptySelectionMessage || ""; + }, "emptySelectionMessageText"), + selectedMessageText: /* @__PURE__ */ __name(function selectedMessageText() { + return this.$filled ? this.selectionMessageText.replaceAll("{0}", "1") : this.emptySelectionMessageText; + }, "selectedMessageText"), + focusedOptionId: /* @__PURE__ */ __name(function focusedOptionId() { + return this.focusedOptionInfo.index !== -1 ? "".concat(this.id).concat(isNotEmpty(this.focusedOptionInfo.parentKey) ? "_" + this.focusedOptionInfo.parentKey : "", "_").concat(this.focusedOptionInfo.index) : null; + }, "focusedOptionId"), + isClearIconVisible: /* @__PURE__ */ __name(function isClearIconVisible() { + return this.showClear && this.d_value != null && isNotEmpty(this.options); + }, "isClearIconVisible") + }, + components: { + CascadeSelectSub: script$1$E, + Portal: script$1f, + ChevronDownIcon: script$1k, + SpinnerIcon: script$1r, + AngleRightIcon: script$1q, + TimesIcon: script$1g + } +}; +function _typeof$k(o) { + "@babel/helpers - typeof"; + return _typeof$k = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$k(o); +} +__name(_typeof$k, "_typeof$k"); +function ownKeys$i(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$i, "ownKeys$i"); +function _objectSpread$i(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$i(Object(t2), true).forEach(function(r2) { + _defineProperty$j(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$i(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$i, "_objectSpread$i"); +function _defineProperty$j(e, r, t2) { + return (r = _toPropertyKey$j(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$j, "_defineProperty$j"); +function _toPropertyKey$j(t2) { + var i = _toPrimitive$j(t2, "string"); + return "symbol" == _typeof$k(i) ? i : i + ""; +} +__name(_toPropertyKey$j, "_toPropertyKey$j"); +function _toPrimitive$j(t2, r) { + if ("object" != _typeof$k(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$k(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$j, "_toPrimitive$j"); +var _hoisted_1$r = ["id", "disabled", "placeholder", "tabindex", "aria-label", "aria-labelledby", "aria-expanded", "aria-controls", "aria-activedescendant", "aria-invalid"]; +function render$U(_ctx, _cache, $props, $setup, $data, $options) { + var _component_SpinnerIcon = resolveComponent("SpinnerIcon"); + var _component_CascadeSelectSub = resolveComponent("CascadeSelectSub"); + var _component_Portal = resolveComponent("Portal"); + return openBlock(), createElementBlock("div", mergeProps({ + ref: "container", + "class": _ctx.cx("root"), + style: _ctx.sx("root"), + onClick: _cache[5] || (_cache[5] = function($event) { + return $options.onContainerClick($event); + }) + }, _ctx.ptmi("root")), [createBaseVNode("div", mergeProps({ + "class": "p-hidden-accessible" + }, _ctx.ptm("hiddenInputContainer"), { + "data-p-hidden-accessible": true + }), [createBaseVNode("input", mergeProps({ + ref: "focusInput", + id: _ctx.inputId, + type: "text", + "class": _ctx.inputClass, + style: _ctx.inputStyle, + readonly: "", + disabled: _ctx.disabled, + placeholder: _ctx.placeholder, + tabindex: !_ctx.disabled ? _ctx.tabindex : -1, + role: "combobox", + "aria-label": _ctx.ariaLabel, + "aria-labelledby": _ctx.ariaLabelledby, + "aria-haspopup": "tree", + "aria-expanded": $data.overlayVisible, + "aria-controls": $data.id + "_tree", + "aria-activedescendant": $data.focused ? $options.focusedOptionId : void 0, + "aria-invalid": _ctx.invalid || void 0, + onFocus: _cache[0] || (_cache[0] = function() { + return $options.onFocus && $options.onFocus.apply($options, arguments); + }), + onBlur: _cache[1] || (_cache[1] = function() { + return $options.onBlur && $options.onBlur.apply($options, arguments); + }), + onKeydown: _cache[2] || (_cache[2] = function() { + return $options.onKeyDown && $options.onKeyDown.apply($options, arguments); + }) + }, _objectSpread$i(_objectSpread$i({}, _ctx.inputProps), _ctx.ptm("hiddenInput"))), null, 16, _hoisted_1$r)], 16), createBaseVNode("span", mergeProps({ + "class": _ctx.cx("label") + }, _ctx.ptm("label")), [renderSlot(_ctx.$slots, "value", { + value: _ctx.d_value, + placeholder: _ctx.placeholder + }, function() { + return [createTextVNode(toDisplayString($options.label), 1)]; + })], 16), $options.isClearIconVisible ? renderSlot(_ctx.$slots, "clearicon", { + key: 0, + "class": normalizeClass(_ctx.cx("clearIcon")), + clearCallback: $options.onClearClick + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.clearIcon ? "i" : "TimesIcon"), mergeProps({ + ref: "clearIcon", + "class": [_ctx.cx("clearIcon"), _ctx.clearIcon], + onClick: $options.onClearClick + }, _ctx.ptm("clearIcon"), { + "data-pc-section": "clearicon" + }), null, 16, ["class", "onClick"]))]; + }) : createCommentVNode("", true), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("dropdown"), + role: "button", + tabindex: "-1" + }, _ctx.ptm("dropdown")), [_ctx.loading ? renderSlot(_ctx.$slots, "loadingicon", { + key: 0, + "class": normalizeClass(_ctx.cx("loadingIcon")) + }, function() { + return [_ctx.loadingIcon ? (openBlock(), createElementBlock("span", mergeProps({ + key: 0, + "class": [_ctx.cx("loadingIcon"), "pi-spin", _ctx.loadingIcon], + "aria-hidden": "true" + }, _ctx.ptm("loadingIcon")), null, 16)) : (openBlock(), createBlock(_component_SpinnerIcon, mergeProps({ + key: 1, + "class": _ctx.cx("loadingIcon"), + spin: "", + "aria-hidden": "true" + }, _ctx.ptm("loadingIcon")), null, 16, ["class"]))]; + }) : renderSlot(_ctx.$slots, "dropdownicon", { + key: 1, + "class": normalizeClass(_ctx.cx("dropdownIcon")) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.dropdownIcon ? "span" : "ChevronDownIcon"), mergeProps({ + "class": [_ctx.cx("dropdownIcon"), _ctx.dropdownIcon], + "aria-hidden": "true" + }, _ctx.ptm("dropdownIcon")), null, 16, ["class"]))]; + })], 16), createBaseVNode("span", mergeProps({ + role: "status", + "aria-live": "polite", + "class": "p-hidden-accessible" + }, _ctx.ptm("hiddenSearchResult"), { + "data-p-hidden-accessible": true + }), toDisplayString($options.searchResultMessageText), 17), createVNode(_component_Portal, { + appendTo: _ctx.appendTo + }, { + "default": withCtx(function() { + return [createVNode(Transition, mergeProps({ + name: "p-connected-overlay", + onEnter: $options.onOverlayEnter, + onAfterEnter: $options.onOverlayAfterEnter, + onLeave: $options.onOverlayLeave, + onAfterLeave: $options.onOverlayAfterLeave + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [$data.overlayVisible ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: $options.overlayRef, + "class": [_ctx.cx("overlay"), _ctx.panelClass, _ctx.overlayClass], + style: [_ctx.panelStyle, _ctx.overlayStyle], + onClick: _cache[3] || (_cache[3] = function() { + return $options.onOverlayClick && $options.onOverlayClick.apply($options, arguments); + }), + onKeydown: _cache[4] || (_cache[4] = function() { + return $options.onOverlayKeyDown && $options.onOverlayKeyDown.apply($options, arguments); + }) + }, _objectSpread$i(_objectSpread$i(_objectSpread$i({}, _ctx.panelProps), _ctx.overlayProps), _ctx.ptm("overlay"))), [renderSlot(_ctx.$slots, "header", { + value: _ctx.d_value, + options: _ctx.options + }), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("listContainer") + }, _ctx.ptm("listContainer")), [createVNode(_component_CascadeSelectSub, { + id: $data.id + "_tree", + role: "tree", + "aria-orientation": "horizontal", + selectId: $data.id, + focusedOptionId: $data.focused ? $options.focusedOptionId : void 0, + options: $options.processedOptions, + activeOptionPath: $data.activeOptionPath, + level: 0, + templates: _ctx.$slots, + optionLabel: _ctx.optionLabel, + optionValue: _ctx.optionValue, + optionDisabled: _ctx.optionDisabled, + optionGroupIcon: _ctx.optionGroupIcon, + optionGroupLabel: _ctx.optionGroupLabel, + optionGroupChildren: _ctx.optionGroupChildren, + value: _ctx.d_value, + onOptionChange: $options.onOptionClick, + onOptionFocusChange: $options.onOptionMouseMove, + onOptionFocusEnterChange: $options.onOptionMouseEnter, + pt: _ctx.pt, + unstyled: _ctx.unstyled + }, null, 8, ["id", "selectId", "focusedOptionId", "options", "activeOptionPath", "templates", "optionLabel", "optionValue", "optionDisabled", "optionGroupIcon", "optionGroupLabel", "optionGroupChildren", "value", "onOptionChange", "onOptionFocusChange", "onOptionFocusEnterChange", "pt", "unstyled"])], 16), createBaseVNode("span", mergeProps({ + role: "status", + "aria-live": "polite", + "class": "p-hidden-accessible" + }, _ctx.ptm("hiddenSelectedMessage"), { + "data-p-hidden-accessible": true + }), toDisplayString($options.selectedMessageText), 17), renderSlot(_ctx.$slots, "footer", { + value: _ctx.d_value, + options: _ctx.options + })], 16)) : createCommentVNode("", true)]; + }), + _: 3 + }, 16, ["onEnter", "onAfterEnter", "onLeave", "onAfterLeave"])]; + }), + _: 3 + }, 8, ["appendTo"])], 16); +} +__name(render$U, "render$U"); +script$10.render = render$U; +var theme$x = /* @__PURE__ */ __name(function theme7(_ref) { + _ref.dt; + return "\n.p-checkbox-group {\n display: inline-flex;\n}\n"; +}, "theme"); +var classes$B = { + root: "p-checkbox-group p-component" +}; +var CheckboxGroupStyle = BaseStyle.extend({ + name: "checkboxgroup", + theme: theme$x, + classes: classes$B +}); +var script$1$D = { + name: "BaseCheckboxGroup", + "extends": script$1s, + style: CheckboxGroupStyle, + provide: /* @__PURE__ */ __name(function provide12() { + return { + $pcCheckboxGroup: this, + $parentInstance: this + }; + }, "provide") +}; +var script$$ = { + name: "CheckboxGroup", + "extends": script$1$D, + inheritAttrs: false, + data: /* @__PURE__ */ __name(function data5() { + return { + groupName: this.name + }; + }, "data"), + watch: { + name: /* @__PURE__ */ __name(function name(newValue) { + this.groupName = newValue || uuid("checkbox-group-"); + }, "name") + }, + mounted: /* @__PURE__ */ __name(function mounted8() { + this.groupName = this.groupName || uuid("checkbox-group-"); + }, "mounted") +}; +function render$T(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default")], 16); +} +__name(render$T, "render$T"); +script$$.render = render$T; +var theme$w = /* @__PURE__ */ __name(function theme8(_ref) { + var dt = _ref.dt; + return "\n.p-inputchips {\n display: inline-flex;\n}\n\n.p-inputchips-input {\n margin: 0;\n list-style-type: none;\n cursor: text;\n overflow: hidden;\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n padding: calc(".concat(dt("inputchips.padding.y"), " / 2) ").concat(dt("inputchips.padding.x"), ";\n gap: calc(").concat(dt("inputchips.padding.y"), " / 2);\n color: ").concat(dt("inputchips.color"), ";\n background: ").concat(dt("inputchips.background"), ";\n border: 1px solid ").concat(dt("inputchips.border.color"), ";\n border-radius: ").concat(dt("inputchips.border.radius"), ";\n width: 100%;\n transition: background ").concat(dt("inputchips.transition.duration"), ", color ").concat(dt("inputchips.transition.duration"), ", border-color ").concat(dt("inputchips.transition.duration"), ", outline-color ").concat(dt("inputchips.transition.duration"), ", box-shadow ").concat(dt("inputchips.transition.duration"), ";\n outline-color: transparent;\n box-shadow: ").concat(dt("inputchips.shadow"), ";\n}\n\n.p-inputchips:not(.p-disabled):hover .p-inputchips-input {\n border-color: ").concat(dt("inputchips.hover.border.color"), ";\n}\n\n.p-inputchips:not(.p-disabled).p-focus .p-inputchips-input {\n border-color: ").concat(dt("inputchips.focus.border.color"), ";\n box-shadow: ").concat(dt("inputchips.focus.ring.shadow"), ";\n outline: ").concat(dt("inputchips.focus.ring.width"), " ").concat(dt("inputchips.focus.ring.style"), " ").concat(dt("inputchips.focus.ring.color"), ";\n outline-offset: ").concat(dt("inputchips.focus.ring.offset"), ";\n}\n\n.p-inputchips.p-invalid .p-inputchips-input {\n border-color: ").concat(dt("inputchips.invalid.border.color"), ";\n}\n\n.p-variant-filled.p-inputchips-input {\n background: ").concat(dt("inputchips.filled.background"), ";\n}\n\n.p-inputchips:not(.p-disabled).p-focus .p-variant-filled.p-inputchips-input {\n background: ").concat(dt("inputchips.filled.focus.background"), ";\n}\n\n.p-inputchips.p-disabled .p-inputchips-input {\n opacity: 1;\n background: ").concat(dt("inputchips.disabled.background"), ";\n color: ").concat(dt("inputchips.disabled.color"), ";\n}\n\n.p-inputchips-chip.p-chip {\n padding-top: calc(").concat(dt("inputchips.padding.y"), " / 2);\n padding-bottom: calc(").concat(dt("inputchips.padding.y"), " / 2);\n border-radius: ").concat(dt("inputchips.chip.border.radius"), ";\n transition: background ").concat(dt("inputchips.transition.duration"), ", color ").concat(dt("inputchips.transition.duration"), ";\n}\n\n.p-inputchips-chip-item.p-focus .p-inputchips-chip {\n background: ").concat(dt("inputchips.chip.focus.background"), ";\n color: ").concat(dt("inputchips.chip.focus.color"), ";\n}\n\n.p-inputchips-input:has(.p-inputchips-chip) {\n padding-left: calc(").concat(dt("inputchips.padding.y"), " / 2);\n padding-right: calc(").concat(dt("inputchips.padding.y"), " / 2);\n}\n\n.p-inputchips-input-item {\n flex: 1 1 auto;\n display: inline-flex;\n padding-top: calc(").concat(dt("inputchips.padding.y"), " / 2);\n padding-bottom: calc(").concat(dt("inputchips.padding.y"), " / 2);\n}\n\n.p-inputchips-input-item input {\n border: 0 none;\n outline: 0 none;\n background: transparent;\n margin: 0;\n padding: 0;\n box-shadow: none;\n border-radius: 0;\n width: 100%;\n font-family: inherit;\n font-feature-settings: inherit;\n font-size: 1rem;\n color: inherit;\n}\n\n.p-inputchips-input-item input::placeholder {\n color: ").concat(dt("inputchips.placeholder.color"), ";\n}\n"); +}, "theme"); +var classes$A = { + root: /* @__PURE__ */ __name(function root8(_ref2) { + var instance = _ref2.instance, props = _ref2.props; + return ["p-inputchips p-component p-inputwrapper", { + "p-disabled": props.disabled, + "p-invalid": props.invalid, + "p-focus": instance.focused, + "p-inputwrapper-filled": props.modelValue && props.modelValue.length || instance.inputValue && instance.inputValue.length, + "p-inputwrapper-focus": instance.focused + }]; + }, "root"), + input: /* @__PURE__ */ __name(function input(_ref3) { + var props = _ref3.props, instance = _ref3.instance; + return ["p-inputchips-input", { + "p-variant-filled": props.variant ? props.variant === "filled" : instance.$primevue.config.inputStyle === "filled" || instance.$primevue.config.inputVariant === "filled" + }]; + }, "input"), + chipItem: /* @__PURE__ */ __name(function chipItem(_ref4) { + var state = _ref4.state, index = _ref4.index; + return ["p-inputchips-chip-item", { + "p-focus": state.focusedIndex === index + }]; + }, "chipItem"), + pcChip: "p-inputchips-chip", + chipIcon: "p-inputchips-chip-icon", + inputItem: "p-inputchips-input-item" +}; +var InputChipsStyle = BaseStyle.extend({ + name: "inputchips", + theme: theme$w, + classes: classes$A +}); +var script$1$C = { + name: "BaseInputChips", + "extends": script$1d, + props: { + modelValue: { + type: Array, + "default": null + }, + max: { + type: Number, + "default": null + }, + separator: { + type: [String, Object], + "default": null + }, + addOnBlur: { + type: Boolean, + "default": null + }, + allowDuplicate: { + type: Boolean, + "default": true + }, + placeholder: { + type: String, + "default": null + }, + variant: { + type: String, + "default": null + }, + invalid: { + type: Boolean, + "default": false + }, + disabled: { + type: Boolean, + "default": false + }, + inputId: { + type: String, + "default": null + }, + inputClass: { + type: [String, Object], + "default": null + }, + inputStyle: { + type: Object, + "default": null + }, + inputProps: { + type: null, + "default": null + }, + removeTokenIcon: { + type: String, + "default": void 0 + }, + chipIcon: { + type: String, + "default": void 0 + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + } + }, + style: InputChipsStyle, + provide: /* @__PURE__ */ __name(function provide13() { + return { + $pcInputChips: this, + $parentInstance: this + }; + }, "provide") +}; +function _toConsumableArray$c(r) { + return _arrayWithoutHoles$c(r) || _iterableToArray$c(r) || _unsupportedIterableToArray$d(r) || _nonIterableSpread$c(); +} +__name(_toConsumableArray$c, "_toConsumableArray$c"); +function _nonIterableSpread$c() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$c, "_nonIterableSpread$c"); +function _unsupportedIterableToArray$d(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$d(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$d(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$d, "_unsupportedIterableToArray$d"); +function _iterableToArray$c(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$c, "_iterableToArray$c"); +function _arrayWithoutHoles$c(r) { + if (Array.isArray(r)) return _arrayLikeToArray$d(r); +} +__name(_arrayWithoutHoles$c, "_arrayWithoutHoles$c"); +function _arrayLikeToArray$d(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$d, "_arrayLikeToArray$d"); +var script$_ = { + name: "InputChips", + "extends": script$1$C, + inheritAttrs: false, + emits: ["update:modelValue", "add", "remove", "focus", "blur"], + data: /* @__PURE__ */ __name(function data6() { + return { + id: this.$attrs.id, + inputValue: null, + focused: false, + focusedIndex: null + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId3(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId") + }, + mounted: /* @__PURE__ */ __name(function mounted9() { + console.warn("Deprecated since v4. Use AutoComplete component instead with its typeahead property."); + this.id = this.id || UniqueComponentId(); + }, "mounted"), + methods: { + onWrapperClick: /* @__PURE__ */ __name(function onWrapperClick() { + this.$refs.input.focus(); + }, "onWrapperClick"), + onInput: /* @__PURE__ */ __name(function onInput2(event2) { + this.inputValue = event2.target.value; + this.focusedIndex = null; + }, "onInput"), + onFocus: /* @__PURE__ */ __name(function onFocus4(event2) { + this.focused = true; + this.focusedIndex = null; + this.$emit("focus", event2); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur3(event2) { + this.focused = false; + this.focusedIndex = null; + if (this.addOnBlur) { + this.addItem(event2, event2.target.value, false); + } + this.$emit("blur", event2); + }, "onBlur"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown3(event2) { + var inputValue = event2.target.value; + switch (event2.code) { + case "Backspace": + if (inputValue.length === 0 && this.modelValue && this.modelValue.length > 0) { + if (this.focusedIndex !== null) { + this.removeItem(event2, this.focusedIndex); + } else this.removeItem(event2, this.modelValue.length - 1); + } + break; + case "Enter": + case "NumpadEnter": + if (inputValue && inputValue.trim().length && !this.maxedOut) { + this.addItem(event2, inputValue, true); + } + break; + case "ArrowLeft": + if (inputValue.length === 0 && this.modelValue && this.modelValue.length > 0) { + this.$refs.container.focus(); + } + break; + case "ArrowRight": + event2.stopPropagation(); + break; + default: + if (this.separator) { + if (this.separator === event2.key || event2.key.match(this.separator)) { + this.addItem(event2, inputValue, true); + } + } + break; + } + }, "onKeyDown"), + onPaste: /* @__PURE__ */ __name(function onPaste(event2) { + var _this = this; + if (this.separator) { + var separator = this.separator.replace("\\n", "\n").replace("\\r", "\r").replace("\\t", " "); + var pastedData = (event2.clipboardData || window["clipboardData"]).getData("Text"); + if (pastedData) { + var value2 = this.modelValue || []; + var pastedValues = pastedData.split(separator); + pastedValues = pastedValues.filter(function(val) { + return _this.allowDuplicate || value2.indexOf(val) === -1; + }); + value2 = [].concat(_toConsumableArray$c(value2), _toConsumableArray$c(pastedValues)); + this.updateModel(event2, value2, true); + } + } + }, "onPaste"), + onContainerFocus: /* @__PURE__ */ __name(function onContainerFocus() { + this.focused = true; + }, "onContainerFocus"), + onContainerBlur: /* @__PURE__ */ __name(function onContainerBlur() { + this.focusedIndex = -1; + this.focused = false; + }, "onContainerBlur"), + onContainerKeyDown: /* @__PURE__ */ __name(function onContainerKeyDown(event2) { + switch (event2.code) { + case "ArrowLeft": + this.onArrowLeftKeyOn(event2); + break; + case "ArrowRight": + this.onArrowRightKeyOn(event2); + break; + case "Backspace": + this.onBackspaceKeyOn(event2); + break; + } + }, "onContainerKeyDown"), + onArrowLeftKeyOn: /* @__PURE__ */ __name(function onArrowLeftKeyOn() { + if (this.inputValue.length === 0 && this.modelValue && this.modelValue.length > 0) { + this.focusedIndex = this.focusedIndex === null ? this.modelValue.length - 1 : this.focusedIndex - 1; + if (this.focusedIndex < 0) this.focusedIndex = 0; + } + }, "onArrowLeftKeyOn"), + onArrowRightKeyOn: /* @__PURE__ */ __name(function onArrowRightKeyOn() { + if (this.inputValue.length === 0 && this.modelValue && this.modelValue.length > 0) { + if (this.focusedIndex === this.modelValue.length - 1) { + this.focusedIndex = null; + this.$refs.input.focus(); + } else { + this.focusedIndex++; + } + } + }, "onArrowRightKeyOn"), + onBackspaceKeyOn: /* @__PURE__ */ __name(function onBackspaceKeyOn(event2) { + if (this.focusedIndex !== null) { + this.removeItem(event2, this.focusedIndex); + } + }, "onBackspaceKeyOn"), + updateModel: /* @__PURE__ */ __name(function updateModel3(event2, value2, preventDefault) { + var _this2 = this; + this.$emit("update:modelValue", value2); + this.$emit("add", { + originalEvent: event2, + value: value2 + }); + this.$refs.input.value = ""; + this.inputValue = ""; + setTimeout(function() { + _this2.maxedOut && (_this2.focused = false); + }, 0); + if (preventDefault) { + event2.preventDefault(); + } + }, "updateModel"), + addItem: /* @__PURE__ */ __name(function addItem(event2, item8, preventDefault) { + if (item8 && item8.trim().length) { + var value2 = this.modelValue ? _toConsumableArray$c(this.modelValue) : []; + if (this.allowDuplicate || value2.indexOf(item8) === -1) { + value2.push(item8); + this.updateModel(event2, value2, preventDefault); + } + } + }, "addItem"), + removeItem: /* @__PURE__ */ __name(function removeItem(event2, index) { + if (this.disabled) { + return; + } + var values = _toConsumableArray$c(this.modelValue); + var removedItem = values.splice(index, 1); + this.focusedIndex = null; + this.$refs.input.focus(); + this.$emit("update:modelValue", values); + this.$emit("remove", { + originalEvent: event2, + value: removedItem + }); + }, "removeItem") + }, + computed: { + maxedOut: /* @__PURE__ */ __name(function maxedOut() { + return this.max && this.modelValue && this.max === this.modelValue.length; + }, "maxedOut"), + focusedOptionId: /* @__PURE__ */ __name(function focusedOptionId2() { + return this.focusedIndex !== null ? "".concat(this.id, "_inputchips_item_").concat(this.focusedIndex) : null; + }, "focusedOptionId") + }, + components: { + Chip: script$1t + } +}; +function _typeof$j(o) { + "@babel/helpers - typeof"; + return _typeof$j = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$j(o); +} +__name(_typeof$j, "_typeof$j"); +function ownKeys$h(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$h, "ownKeys$h"); +function _objectSpread$h(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$h(Object(t2), true).forEach(function(r2) { + _defineProperty$i(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$h(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$h, "_objectSpread$h"); +function _defineProperty$i(e, r, t2) { + return (r = _toPropertyKey$i(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$i, "_defineProperty$i"); +function _toPropertyKey$i(t2) { + var i = _toPrimitive$i(t2, "string"); + return "symbol" == _typeof$j(i) ? i : i + ""; +} +__name(_toPropertyKey$i, "_toPropertyKey$i"); +function _toPrimitive$i(t2, r) { + if ("object" != _typeof$j(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$j(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$i, "_toPrimitive$i"); +var _hoisted_1$q = ["aria-labelledby", "aria-label", "aria-activedescendant"]; +var _hoisted_2$j = ["id", "aria-label", "aria-setsize", "aria-posinset", "data-p-focused"]; +var _hoisted_3$g = ["id", "disabled", "placeholder", "aria-invalid"]; +function render$S(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Chip = resolveComponent("Chip"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [createBaseVNode("ul", mergeProps({ + ref: "container", + "class": _ctx.cx("input"), + tabindex: "-1", + role: "listbox", + "aria-orientation": "horizontal", + "aria-labelledby": _ctx.ariaLabelledby, + "aria-label": _ctx.ariaLabel, + "aria-activedescendant": $data.focused ? $options.focusedOptionId : void 0, + onClick: _cache[5] || (_cache[5] = function($event) { + return $options.onWrapperClick(); + }), + onFocus: _cache[6] || (_cache[6] = function() { + return $options.onContainerFocus && $options.onContainerFocus.apply($options, arguments); + }), + onBlur: _cache[7] || (_cache[7] = function() { + return $options.onContainerBlur && $options.onContainerBlur.apply($options, arguments); + }), + onKeydown: _cache[8] || (_cache[8] = function() { + return $options.onContainerKeyDown && $options.onContainerKeyDown.apply($options, arguments); + }) + }, _ctx.ptm("input")), [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.modelValue, function(val, i) { + return openBlock(), createElementBlock("li", mergeProps({ + key: "".concat(i, "_").concat(val), + id: $data.id + "_inputchips_item_" + i, + role: "option", + "class": _ctx.cx("chipItem", { + index: i + }), + "aria-label": val, + "aria-selected": true, + "aria-setsize": _ctx.modelValue.length, + "aria-posinset": i + 1, + ref_for: true + }, _ctx.ptm("chipItem"), { + "data-p-focused": $data.focusedIndex === i + }), [renderSlot(_ctx.$slots, "chip", { + "class": normalizeClass(_ctx.cx("pcChip")), + index: i, + value: val, + removeCallback: /* @__PURE__ */ __name(function removeCallback(event2) { + return _ctx.removeOption(event2, i); + }, "removeCallback") + }, function() { + return [createVNode(_component_Chip, { + "class": normalizeClass(_ctx.cx("pcChip")), + label: val, + removeIcon: _ctx.chipIcon || _ctx.removeTokenIcon, + removable: "", + unstyled: _ctx.unstyled, + onRemove: /* @__PURE__ */ __name(function onRemove($event) { + return $options.removeItem($event, i); + }, "onRemove"), + pt: _ctx.ptm("pcChip") + }, { + removeicon: withCtx(function() { + return [renderSlot(_ctx.$slots, _ctx.$slots.chipicon ? "chipicon" : "removetokenicon", { + "class": normalizeClass(_ctx.cx("chipIcon")), + index: i, + removeCallback: /* @__PURE__ */ __name(function removeCallback(event2) { + return $options.removeItem(event2, i); + }, "removeCallback") + })]; + }), + _: 2 + }, 1032, ["class", "label", "removeIcon", "unstyled", "onRemove", "pt"])]; + })], 16, _hoisted_2$j); + }), 128)), createBaseVNode("li", mergeProps({ + "class": _ctx.cx("inputItem"), + role: "option" + }, _ctx.ptm("inputItem")), [createBaseVNode("input", mergeProps({ + ref: "input", + id: _ctx.inputId, + type: "text", + "class": _ctx.inputClass, + style: _ctx.inputStyle, + disabled: _ctx.disabled || $options.maxedOut, + placeholder: _ctx.placeholder, + "aria-invalid": _ctx.invalid || void 0, + onFocus: _cache[0] || (_cache[0] = function($event) { + return $options.onFocus($event); + }), + onBlur: _cache[1] || (_cache[1] = function($event) { + return $options.onBlur($event); + }), + onInput: _cache[2] || (_cache[2] = function() { + return $options.onInput && $options.onInput.apply($options, arguments); + }), + onKeydown: _cache[3] || (_cache[3] = function($event) { + return $options.onKeyDown($event); + }), + onPaste: _cache[4] || (_cache[4] = function($event) { + return $options.onPaste($event); + }) + }, _objectSpread$h(_objectSpread$h({}, _ctx.inputProps), _ctx.ptm("inputItemField"))), null, 16, _hoisted_3$g)], 16)], 16, _hoisted_1$q)], 16); +} +__name(render$S, "render$S"); +script$_.render = render$S; +var script$Z = { + name: "Chips", + "extends": script$_, + mounted: /* @__PURE__ */ __name(function mounted10() { + console.warn("Deprecated since v4. Use InputChips component instead."); + }, "mounted") +}; +var ChipsStyle = BaseStyle.extend({ + name: "chips" +}); +var ColumnGroupStyle = BaseStyle.extend({ + name: "columngroup" +}); +var script$1$B = { + name: "BaseColumnGroup", + "extends": script$1d, + props: { + type: { + type: String, + "default": null + } + }, + style: ColumnGroupStyle, + provide: /* @__PURE__ */ __name(function provide14() { + return { + $pcColumnGroup: this, + $parentInstance: this + }; + }, "provide") +}; +var script$Y = { + name: "ColumnGroup", + "extends": script$1$B, + inheritAttrs: false, + inject: ["$columnGroups"], + mounted: /* @__PURE__ */ __name(function mounted11() { + var _this$$columnGroups; + (_this$$columnGroups = this.$columnGroups) === null || _this$$columnGroups === void 0 || _this$$columnGroups.add(this.$); + }, "mounted"), + unmounted: /* @__PURE__ */ __name(function unmounted2() { + var _this$$columnGroups2; + (_this$$columnGroups2 = this.$columnGroups) === null || _this$$columnGroups2 === void 0 || _this$$columnGroups2["delete"](this.$); + }, "unmounted"), + render: /* @__PURE__ */ __name(function render() { + return null; + }, "render") +}; +var theme$v = /* @__PURE__ */ __name(function theme9(_ref) { + var dt = _ref.dt; + return "\n.p-dataview {\n border-color: ".concat(dt("dataview.border.color"), ";\n border-width: ").concat(dt("dataview.border.width"), ";\n border-style: solid;\n border-radius: ").concat(dt("dataview.border.radius"), ";\n padding: ").concat(dt("dataview.padding"), ";\n}\n\n.p-dataview-header {\n background: ").concat(dt("dataview.header.background"), ";\n color: ").concat(dt("dataview.header.color"), ";\n border-color: ").concat(dt("dataview.header.border.color"), ";\n border-width: ").concat(dt("dataview.header.border.width"), ";\n border-style: solid;\n padding: ").concat(dt("dataview.header.padding"), ";\n border-radius: ").concat(dt("dataview.header.border.radius"), ";\n}\n\n.p-dataview-content {\n background: ").concat(dt("dataview.content.background"), ";\n border-color: ").concat(dt("dataview.content.border.color"), ";\n border-width: ").concat(dt("dataview.content.border.width"), ";\n border-style: solid;\n color: ").concat(dt("dataview.content.color"), ";\n padding: ").concat(dt("dataview.content.padding"), ";\n border-radius: ").concat(dt("dataview.content.border.radius"), ";\n}\n\n.p-dataview-footer {\n background: ").concat(dt("dataview.footer.background"), ";\n color: ").concat(dt("dataview.footer.color"), ";\n border-color: ").concat(dt("dataview.footer.border.color"), ";\n border-width: ").concat(dt("dataview.footer.border.width"), ";\n border-style: solid;\n padding: ").concat(dt("dataview.footer.padding"), ";\n border-radius: ").concat(dt("dataview.footer.border.radius"), ";\n}\n\n.p-dataview-paginator-top {\n border-width: ").concat(dt("dataview.paginator.top.border.width"), ";\n border-color: ").concat(dt("dataview.paginator.top.border.color"), ";\n border-style: solid;\n}\n\n.p-dataview-paginator-bottom {\n border-width: ").concat(dt("dataview.paginator.bottom.border.width"), ";\n border-color: ").concat(dt("dataview.paginator.bottom.border.color"), ";\n border-style: solid;\n}\n"); +}, "theme"); +var classes$z = { + root: /* @__PURE__ */ __name(function root9(_ref2) { + var props = _ref2.props; + return ["p-dataview p-component", { + "p-dataview-list": props.layout === "list", + "p-dataview-grid": props.layout === "grid" + }]; + }, "root"), + header: "p-dataview-header", + pcPaginator: /* @__PURE__ */ __name(function pcPaginator(_ref3) { + var position = _ref3.position; + return "p-dataview-paginator-" + position; + }, "pcPaginator"), + content: "p-dataview-content", + emptyMessage: "p-dataview-empty-message", + // TODO: remove? + footer: "p-dataview-footer" +}; +var DataViewStyle = BaseStyle.extend({ + name: "dataview", + theme: theme$v, + classes: classes$z +}); +var script$1$A = { + name: "BaseDataView", + "extends": script$1d, + props: { + value: { + type: Array, + "default": null + }, + layout: { + type: String, + "default": "list" + }, + rows: { + type: Number, + "default": 0 + }, + first: { + type: Number, + "default": 0 + }, + totalRecords: { + type: Number, + "default": 0 + }, + paginator: { + type: Boolean, + "default": false + }, + paginatorPosition: { + type: String, + "default": "bottom" + }, + alwaysShowPaginator: { + type: Boolean, + "default": true + }, + paginatorTemplate: { + type: String, + "default": "FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink RowsPerPageDropdown" + }, + pageLinkSize: { + type: Number, + "default": 5 + }, + rowsPerPageOptions: { + type: Array, + "default": null + }, + currentPageReportTemplate: { + type: String, + "default": "({currentPage} of {totalPages})" + }, + sortField: { + type: [String, Function], + "default": null + }, + sortOrder: { + type: Number, + "default": null + }, + lazy: { + type: Boolean, + "default": false + }, + dataKey: { + type: String, + "default": null + } + }, + style: DataViewStyle, + provide: /* @__PURE__ */ __name(function provide15() { + return { + $pcDataView: this, + $parentInstance: this + }; + }, "provide") +}; +function _toConsumableArray$b(r) { + return _arrayWithoutHoles$b(r) || _iterableToArray$b(r) || _unsupportedIterableToArray$c(r) || _nonIterableSpread$b(); +} +__name(_toConsumableArray$b, "_toConsumableArray$b"); +function _nonIterableSpread$b() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$b, "_nonIterableSpread$b"); +function _unsupportedIterableToArray$c(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$c(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$c(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$c, "_unsupportedIterableToArray$c"); +function _iterableToArray$b(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$b, "_iterableToArray$b"); +function _arrayWithoutHoles$b(r) { + if (Array.isArray(r)) return _arrayLikeToArray$c(r); +} +__name(_arrayWithoutHoles$b, "_arrayWithoutHoles$b"); +function _arrayLikeToArray$c(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$c, "_arrayLikeToArray$c"); +var script$X = { + name: "DataView", + "extends": script$1$A, + inheritAttrs: false, + emits: ["update:first", "update:rows", "page"], + data: /* @__PURE__ */ __name(function data7() { + return { + d_first: this.first, + d_rows: this.rows + }; + }, "data"), + watch: { + first: /* @__PURE__ */ __name(function first(newValue) { + this.d_first = newValue; + }, "first"), + rows: /* @__PURE__ */ __name(function rows(newValue) { + this.d_rows = newValue; + }, "rows"), + sortField: /* @__PURE__ */ __name(function sortField() { + this.resetPage(); + }, "sortField"), + sortOrder: /* @__PURE__ */ __name(function sortOrder() { + this.resetPage(); + }, "sortOrder") + }, + methods: { + getKey: /* @__PURE__ */ __name(function getKey2(item8, index) { + return this.dataKey ? resolveFieldData(item8, this.dataKey) : index; + }, "getKey"), + onPage: /* @__PURE__ */ __name(function onPage(event2) { + this.d_first = event2.first; + this.d_rows = event2.rows; + this.$emit("update:first", this.d_first); + this.$emit("update:rows", this.d_rows); + this.$emit("page", event2); + }, "onPage"), + sort: /* @__PURE__ */ __name(function sort$1() { + var _this = this; + if (this.value) { + var value2 = _toConsumableArray$b(this.value); + var comparer = localeComparator(); + value2.sort(function(data1, data210) { + var value1 = resolveFieldData(data1, _this.sortField); + var value22 = resolveFieldData(data210, _this.sortField); + return sort(value1, value22, _this.sortOrder, comparer); + }); + return value2; + } else { + return null; + } + }, "sort$1"), + resetPage: /* @__PURE__ */ __name(function resetPage() { + this.d_first = 0; + this.$emit("update:first", this.d_first); + }, "resetPage") + }, + computed: { + getTotalRecords: /* @__PURE__ */ __name(function getTotalRecords() { + if (this.totalRecords) return this.totalRecords; + else return this.value ? this.value.length : 0; + }, "getTotalRecords"), + empty: /* @__PURE__ */ __name(function empty() { + return !this.value || this.value.length === 0; + }, "empty"), + emptyMessageText: /* @__PURE__ */ __name(function emptyMessageText2() { + var _this$$primevue$confi; + return ((_this$$primevue$confi = this.$primevue.config) === null || _this$$primevue$confi === void 0 || (_this$$primevue$confi = _this$$primevue$confi.locale) === null || _this$$primevue$confi === void 0 ? void 0 : _this$$primevue$confi.emptyMessage) || ""; + }, "emptyMessageText"), + paginatorTop: /* @__PURE__ */ __name(function paginatorTop() { + return this.paginator && (this.paginatorPosition !== "bottom" || this.paginatorPosition === "both"); + }, "paginatorTop"), + paginatorBottom: /* @__PURE__ */ __name(function paginatorBottom() { + return this.paginator && (this.paginatorPosition !== "top" || this.paginatorPosition === "both"); + }, "paginatorBottom"), + items: /* @__PURE__ */ __name(function items() { + if (this.value && this.value.length) { + var data41 = this.value; + if (data41 && data41.length && this.sortField) { + data41 = this.sort(); + } + if (this.paginator) { + var first3 = this.lazy ? 0 : this.d_first; + return data41.slice(first3, first3 + this.d_rows); + } else { + return data41; + } + } else { + return null; + } + }, "items") + }, + components: { + DVPaginator: script$1u + } +}; +function render$R(_ctx, _cache, $props, $setup, $data, $options) { + var _component_DVPaginator = resolveComponent("DVPaginator"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [_ctx.$slots.header ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("header") + }, _ctx.ptm("header")), [renderSlot(_ctx.$slots, "header")], 16)) : createCommentVNode("", true), $options.paginatorTop ? (openBlock(), createBlock(_component_DVPaginator, { + key: 1, + rows: $data.d_rows, + first: $data.d_first, + totalRecords: $options.getTotalRecords, + pageLinkSize: _ctx.pageLinkSize, + template: _ctx.paginatorTemplate, + rowsPerPageOptions: _ctx.rowsPerPageOptions, + currentPageReportTemplate: _ctx.currentPageReportTemplate, + "class": normalizeClass(_ctx.cx("pcPaginator", { + position: "top" + })), + alwaysShow: _ctx.alwaysShowPaginator, + onPage: _cache[0] || (_cache[0] = function($event) { + return $options.onPage($event); + }), + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcPaginator") + }, createSlots({ + _: 2 + }, [_ctx.$slots.paginatorcontainer ? { + name: "container", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorcontainer", { + first: slotProps.first, + last: slotProps.last, + rows: slotProps.rows, + page: slotProps.page, + pageCount: slotProps.pageCount, + totalRecords: slotProps.totalRecords, + firstPageCallback: slotProps.firstPageCallback, + lastPageCallback: slotProps.lastPageCallback, + prevPageCallback: slotProps.prevPageCallback, + nextPageCallback: slotProps.nextPageCallback, + rowChangeCallback: slotProps.rowChangeCallback + })]; + }), + key: "0" + } : void 0, _ctx.$slots.paginatorstart ? { + name: "start", + fn: withCtx(function() { + return [renderSlot(_ctx.$slots, "paginatorstart")]; + }), + key: "1" + } : void 0, _ctx.$slots.paginatorend ? { + name: "end", + fn: withCtx(function() { + return [renderSlot(_ctx.$slots, "paginatorend")]; + }), + key: "2" + } : void 0]), 1032, ["rows", "first", "totalRecords", "pageLinkSize", "template", "rowsPerPageOptions", "currentPageReportTemplate", "class", "alwaysShow", "unstyled", "pt"])) : createCommentVNode("", true), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("content") + }, _ctx.ptm("content")), [!$options.empty ? (openBlock(), createElementBlock(Fragment, { + key: 0 + }, [_ctx.$slots.list && _ctx.layout === "list" ? renderSlot(_ctx.$slots, "list", { + key: 0, + items: $options.items + }) : createCommentVNode("", true), _ctx.$slots.grid && _ctx.layout === "grid" ? renderSlot(_ctx.$slots, "grid", { + key: 1, + items: $options.items + }) : createCommentVNode("", true)], 64)) : (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": _ctx.cx("emptyMessage") + }, _ctx.ptm("emptyMessage")), [renderSlot(_ctx.$slots, "empty", { + layout: _ctx.layout + }, function() { + return [createTextVNode(toDisplayString($options.emptyMessageText), 1)]; + })], 16))], 16), $options.paginatorBottom ? (openBlock(), createBlock(_component_DVPaginator, { + key: 2, + rows: $data.d_rows, + first: $data.d_first, + totalRecords: $options.getTotalRecords, + pageLinkSize: _ctx.pageLinkSize, + template: _ctx.paginatorTemplate, + rowsPerPageOptions: _ctx.rowsPerPageOptions, + currentPageReportTemplate: _ctx.currentPageReportTemplate, + "class": normalizeClass(_ctx.cx("pcPaginator", { + position: "bottom" + })), + alwaysShow: _ctx.alwaysShowPaginator, + onPage: _cache[1] || (_cache[1] = function($event) { + return $options.onPage($event); + }), + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcPaginator") + }, createSlots({ + _: 2 + }, [_ctx.$slots.paginatorcontainer ? { + name: "container", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorcontainer", { + first: slotProps.first, + last: slotProps.last, + rows: slotProps.rows, + page: slotProps.page, + pageCount: slotProps.pageCount, + totalRecords: slotProps.totalRecords, + firstPageCallback: slotProps.firstPageCallback, + lastPageCallback: slotProps.lastPageCallback, + prevPageCallback: slotProps.prevPageCallback, + nextPageCallback: slotProps.nextPageCallback, + rowChangeCallback: slotProps.rowChangeCallback + })]; + }), + key: "0" + } : void 0, _ctx.$slots.paginatorstart ? { + name: "start", + fn: withCtx(function() { + return [renderSlot(_ctx.$slots, "paginatorstart")]; + }), + key: "1" + } : void 0, _ctx.$slots.paginatorend ? { + name: "end", + fn: withCtx(function() { + return [renderSlot(_ctx.$slots, "paginatorend")]; + }), + key: "2" + } : void 0]), 1032, ["rows", "first", "totalRecords", "pageLinkSize", "template", "rowsPerPageOptions", "currentPageReportTemplate", "class", "alwaysShow", "unstyled", "pt"])) : createCommentVNode("", true), _ctx.$slots.footer ? (openBlock(), createElementBlock("div", mergeProps({ + key: 3, + "class": _ctx.cx("footer") + }, _ctx.ptm("footer")), [renderSlot(_ctx.$slots, "footer")], 16)) : createCommentVNode("", true)], 16); +} +__name(render$R, "render$R"); +script$X.render = render$R; +var DeferredContentStyle = BaseStyle.extend({ + name: "deferredcontent" +}); +var script$W = { + name: "DeferredContent", + "extends": script$1d, + inheritAttrs: false, + emits: ["load"], + style: DeferredContentStyle, + data: /* @__PURE__ */ __name(function data8() { + return { + loaded: false + }; + }, "data"), + mounted: /* @__PURE__ */ __name(function mounted12() { + if (!this.loaded) { + if (this.shouldLoad()) this.load(); + else this.bindScrollListener(); + } + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount4() { + this.unbindScrollListener(); + }, "beforeUnmount"), + methods: { + bindScrollListener: /* @__PURE__ */ __name(function bindScrollListener3() { + var _this = this; + this.documentScrollListener = function() { + if (_this.shouldLoad()) { + _this.load(); + _this.unbindScrollListener(); + } + }; + window.addEventListener("scroll", this.documentScrollListener); + }, "bindScrollListener"), + unbindScrollListener: /* @__PURE__ */ __name(function unbindScrollListener3() { + if (this.documentScrollListener) { + window.removeEventListener("scroll", this.documentScrollListener); + this.documentScrollListener = null; + } + }, "unbindScrollListener"), + shouldLoad: /* @__PURE__ */ __name(function shouldLoad() { + if (this.loaded) { + return false; + } else { + var rect = this.$refs.container.getBoundingClientRect(); + var docElement = document.documentElement; + var winHeight = docElement.clientHeight; + return winHeight >= rect.top; + } + }, "shouldLoad"), + load: /* @__PURE__ */ __name(function load(event2) { + this.loaded = true; + this.$emit("load", event2); + }, "load") + } +}; +function render$Q(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + ref: "container" + }, _ctx.ptmi("root")), [$data.loaded ? renderSlot(_ctx.$slots, "default", { + key: 0 + }) : createCommentVNode("", true)], 16); +} +__name(render$Q, "render$Q"); +script$W.render = render$Q; +var DynamicDialogEventBus = EventBus(); +var DialogService = { + install: /* @__PURE__ */ __name(function install(app) { + var DialogService2 = { + open: /* @__PURE__ */ __name(function open2(content, options4) { + var instance = { + content: content && markRaw(content), + options: options4 || {}, + data: options4 && options4.data, + close: /* @__PURE__ */ __name(function close2(params) { + DynamicDialogEventBus.emit("close", { + instance, + params + }); + }, "close") + }; + DynamicDialogEventBus.emit("open", { + instance + }); + return instance; + }, "open") + }; + app.config.globalProperties.$dialog = DialogService2; + app.provide(PrimeVueDialogSymbol, DialogService2); + }, "install") +}; +var theme$u = /* @__PURE__ */ __name(function theme10(_ref) { + var dt = _ref.dt; + return "\n.p-dock {\n position: absolute;\n z-index: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n}\n\n.p-dock-list-container {\n display: flex;\n pointer-events: auto;\n background: ".concat(dt("dock.background"), ";\n border: 1px solid ").concat(dt("dock.border.color"), ";\n padding: ").concat(dt("dock.padding"), ";\n border-radius: ").concat(dt("dock.border.radius"), ";\n}\n\n.p-dock-list {\n margin: 0;\n padding: 0;\n list-style: none;\n display: flex;\n align-items: center;\n justify-content: center;\n outline: 0 none;\n}\n\n.p-dock-item {\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n will-change: transform;\n padding: ").concat(dt("dock.item.padding"), ";\n border-radius: ").concat(dt("dock.item.border.radius"), ";\n}\n\n.p-dock-item.p-focus {\n box-shadow: ").concat(dt("dock.item.focus.ring.shadow"), ";\n outline: ").concat(dt("dock.item.focus.ring.width"), " ").concat(dt("dock.item.focus.ring.style"), " ").concat(dt("dock.item.focus.ring.color"), ";\n outline-offset: ").concat(dt("dock.item.focus.ring.offset"), ";\n}\n\n.p-dock-item-link {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n position: relative;\n overflow: hidden;\n cursor: default;\n width: ").concat(dt("dock.item.size"), ";\n height: ").concat(dt("dock.item.size"), ";\n}\n\n.p-dock-top {\n left: 0;\n top: 0;\n width: 100%;\n}\n\n.p-dock-bottom {\n left: 0;\n bottom: 0;\n width: 100%;\n}\n\n.p-dock-right {\n right: 0;\n top: 0;\n height: 100%;\n}\n\n.p-dock-right .p-dock-list {\n flex-direction: column;\n}\n\n.p-dock-left {\n left: 0;\n top: 0;\n height: 100%;\n}\n\n.p-dock-left .p-dock-list {\n flex-direction: column;\n}\n\n.p-dock-mobile.p-dock-top .p-dock-list-container,\n.p-dock-mobile.p-dock-bottom .p-dock-list-container {\n overflow-x: auto;\n width: 100%;\n}\n\n.p-dock-mobile.p-dock-top .p-dock-list-container .p-dock-list,\n.p-dock-mobile.p-dock-bottom .p-dock-list-container .p-dock-list {\n margin: 0 auto;\n}\n\n.p-dock-mobile.p-dock-left .p-dock-list-container,\n.p-dock-mobile.p-dock-right .p-dock-list-container {\n overflow-y: auto;\n height: 100%;\n}\n\n.p-dock-mobile.p-dock-left .p-dock-list-container .p-dock-list,\n.p-dock-mobile.p-dock-right .p-dock-list-container .p-dock-list {\n margin: auto 0;\n}\n\n.p-dock-mobile .p-dock-list .p-dock-item {\n transform: none;\n margin: 0;\n}\n"); +}, "theme"); +var classes$y = { + root: /* @__PURE__ */ __name(function root10(_ref2) { + var instance = _ref2.instance, props = _ref2.props; + return ["p-dock p-component", "p-dock-".concat(props.position), { + "p-dock-mobile": instance.queryMatches + }]; + }, "root"), + listContainer: "p-dock-list-container", + list: "p-dock-list", + item: /* @__PURE__ */ __name(function item2(_ref3) { + var instance = _ref3.instance, processedItem = _ref3.processedItem, id4 = _ref3.id; + return ["p-dock-item", { + "p-focus": instance.isItemActive(id4), + "p-disabled": instance.disabled(processedItem) + }]; + }, "item"), + itemContent: "p-dock-item-content", + itemLink: "p-dock-item-link", + itemIcon: "p-dock-item-icon" +}; +var DockStyle = BaseStyle.extend({ + name: "dock", + theme: theme$u, + classes: classes$y +}); +var script$2$7 = { + name: "BaseDock", + "extends": script$1d, + props: { + position: { + type: String, + "default": "bottom" + }, + model: null, + "class": null, + style: null, + tooltipOptions: null, + menuId: { + type: String, + "default": null + }, + tabindex: { + type: Number, + "default": 0 + }, + breakpoint: { + type: String, + "default": "960px" + }, + ariaLabel: { + type: String, + "default": null + }, + ariaLabelledby: { + type: String, + "default": null + } + }, + style: DockStyle, + provide: /* @__PURE__ */ __name(function provide16() { + return { + $pcDock: this, + $parentInstance: this + }; + }, "provide") +}; +function _toConsumableArray$a(r) { + return _arrayWithoutHoles$a(r) || _iterableToArray$a(r) || _unsupportedIterableToArray$b(r) || _nonIterableSpread$a(); +} +__name(_toConsumableArray$a, "_toConsumableArray$a"); +function _nonIterableSpread$a() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$a, "_nonIterableSpread$a"); +function _unsupportedIterableToArray$b(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$b(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$b(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$b, "_unsupportedIterableToArray$b"); +function _iterableToArray$a(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$a, "_iterableToArray$a"); +function _arrayWithoutHoles$a(r) { + if (Array.isArray(r)) return _arrayLikeToArray$b(r); +} +__name(_arrayWithoutHoles$a, "_arrayWithoutHoles$a"); +function _arrayLikeToArray$b(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$b, "_arrayLikeToArray$b"); +var script$1$z = { + name: "DockSub", + hostName: "Dock", + "extends": script$1d, + emits: ["focus", "blur"], + props: { + position: { + type: String, + "default": "bottom" + }, + model: { + type: Array, + "default": null + }, + templates: { + type: null, + "default": null + }, + tooltipOptions: null, + menuId: { + type: String, + "default": null + }, + tabindex: { + type: Number, + "default": 0 + }, + ariaLabel: { + type: String, + "default": null + }, + ariaLabelledby: { + type: String, + "default": null + } + }, + data: /* @__PURE__ */ __name(function data9() { + return { + id: this.menuId, + currentIndex: -3, + focused: false, + focusedOptionIndex: -1 + }; + }, "data"), + watch: { + menuId: /* @__PURE__ */ __name(function menuId(newValue) { + this.id = newValue || UniqueComponentId(); + }, "menuId") + }, + mounted: /* @__PURE__ */ __name(function mounted13() { + this.id = this.id || UniqueComponentId(); + }, "mounted"), + methods: { + getItemId: /* @__PURE__ */ __name(function getItemId(index) { + return "".concat(this.id, "_").concat(index); + }, "getItemId"), + getItemProp: /* @__PURE__ */ __name(function getItemProp(processedItem, name4) { + return processedItem && processedItem.item ? resolve(processedItem.item[name4]) : void 0; + }, "getItemProp"), + getPTOptions: /* @__PURE__ */ __name(function getPTOptions2(key, item8, index) { + return this.ptm(key, { + context: { + index, + item: item8, + active: this.isItemActive(this.getItemId(index)) + } + }); + }, "getPTOptions"), + isSameMenuItem: /* @__PURE__ */ __name(function isSameMenuItem(event2) { + return event2.currentTarget && (event2.currentTarget.isSameNode(event2.target) || event2.currentTarget.isSameNode(event2.target.closest('[data-pc-section="item"]'))); + }, "isSameMenuItem"), + isItemActive: /* @__PURE__ */ __name(function isItemActive2(id4) { + return id4 === this.focusedOptionIndex; + }, "isItemActive"), + onListMouseLeave: /* @__PURE__ */ __name(function onListMouseLeave() { + this.currentIndex = -3; + }, "onListMouseLeave"), + onItemMouseEnter: /* @__PURE__ */ __name(function onItemMouseEnter(index) { + this.currentIndex = index; + }, "onItemMouseEnter"), + onItemClick: /* @__PURE__ */ __name(function onItemClick(event2, processedItem) { + if (this.isSameMenuItem(event2)) { + var command = this.getItemProp(processedItem, "command"); + command && command({ + originalEvent: event2, + item: processedItem.item + }); + } + }, "onItemClick"), + onListFocus: /* @__PURE__ */ __name(function onListFocus(event2) { + this.focused = true; + this.changeFocusedOptionIndex(0); + this.$emit("focus", event2); + }, "onListFocus"), + onListBlur: /* @__PURE__ */ __name(function onListBlur(event2) { + this.focused = false; + this.focusedOptionIndex = -1; + this.$emit("blur", event2); + }, "onListBlur"), + onListKeyDown: /* @__PURE__ */ __name(function onListKeyDown(event2) { + switch (event2.code) { + case "ArrowDown": { + if (this.position === "left" || this.position === "right") this.onArrowDownKey(); + event2.preventDefault(); + break; + } + case "ArrowUp": { + if (this.position === "left" || this.position === "right") this.onArrowUpKey(); + event2.preventDefault(); + break; + } + case "ArrowRight": { + if (this.position === "top" || this.position === "bottom") this.onArrowDownKey(); + event2.preventDefault(); + break; + } + case "ArrowLeft": { + if (this.position === "top" || this.position === "bottom") this.onArrowUpKey(); + event2.preventDefault(); + break; + } + case "Home": { + this.onHomeKey(); + event2.preventDefault(); + break; + } + case "End": { + this.onEndKey(); + event2.preventDefault(); + break; + } + case "Enter": + case "NumpadEnter": + case "Space": { + this.onSpaceKey(event2); + event2.preventDefault(); + break; + } + } + }, "onListKeyDown"), + onArrowDownKey: /* @__PURE__ */ __name(function onArrowDownKey3() { + var optionIndex = this.findNextOptionIndex(this.focusedOptionIndex); + this.changeFocusedOptionIndex(optionIndex); + }, "onArrowDownKey"), + onArrowUpKey: /* @__PURE__ */ __name(function onArrowUpKey3() { + var optionIndex = this.findPrevOptionIndex(this.focusedOptionIndex); + this.changeFocusedOptionIndex(optionIndex); + }, "onArrowUpKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey3() { + this.changeFocusedOptionIndex(0); + }, "onHomeKey"), + onEndKey: /* @__PURE__ */ __name(function onEndKey3() { + this.changeFocusedOptionIndex(find(this.$refs.list, 'li[data-pc-section="item"][data-p-disabled="false"]').length - 1); + }, "onEndKey"), + onSpaceKey: /* @__PURE__ */ __name(function onSpaceKey2() { + var element = findSingle(this.$refs.list, 'li[id="'.concat("".concat(this.focusedOptionIndex), '"]')); + var anchorElement = element && findSingle(element, '[data-pc-section="itemlink"]'); + anchorElement ? anchorElement.click() : element && element.click(); + }, "onSpaceKey"), + findNextOptionIndex: /* @__PURE__ */ __name(function findNextOptionIndex2(index) { + var menuitems = find(this.$refs.list, 'li[data-pc-section="item"][data-p-disabled="false"]'); + var matchedOptionIndex = _toConsumableArray$a(menuitems).findIndex(function(link) { + return link.id === index; + }); + return matchedOptionIndex > -1 ? matchedOptionIndex + 1 : 0; + }, "findNextOptionIndex"), + findPrevOptionIndex: /* @__PURE__ */ __name(function findPrevOptionIndex2(index) { + var menuitems = find(this.$refs.list, 'li[data-pc-section="item"][data-p-disabled="false"]'); + var matchedOptionIndex = _toConsumableArray$a(menuitems).findIndex(function(link) { + return link.id === index; + }); + return matchedOptionIndex > -1 ? matchedOptionIndex - 1 : 0; + }, "findPrevOptionIndex"), + changeFocusedOptionIndex: /* @__PURE__ */ __name(function changeFocusedOptionIndex2(index) { + var menuitems = find(this.$refs.list, 'li[data-pc-section="item"][data-p-disabled="false"]'); + var order = index >= menuitems.length ? menuitems.length - 1 : index < 0 ? 0 : index; + this.focusedOptionIndex = menuitems[order].getAttribute("id"); + }, "changeFocusedOptionIndex"), + disabled: /* @__PURE__ */ __name(function disabled2(item8) { + return typeof item8.disabled === "function" ? item8.disabled() : item8.disabled; + }, "disabled"), + getMenuItemProps: /* @__PURE__ */ __name(function getMenuItemProps2(item8, index) { + return { + action: mergeProps({ + tabindex: -1, + "class": this.cx("itemLink") + }, this.getPTOptions("itemLink", item8, index)), + icon: mergeProps({ + "class": [this.cx("itemIcon"), item8.icon] + }, this.getPTOptions("itemIcon", item8, index)) + }; + }, "getMenuItemProps") + }, + computed: { + focusedOptionId: /* @__PURE__ */ __name(function focusedOptionId3() { + return this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : null; + }, "focusedOptionId") + }, + directives: { + ripple: Ripple, + tooltip: Tooltip + } +}; +var _hoisted_1$p = ["id", "aria-orientation", "aria-activedescendant", "tabindex", "aria-label", "aria-labelledby"]; +var _hoisted_2$i = ["id", "aria-label", "aria-disabled", "onClick", "onMouseenter", "data-p-focused", "data-p-disabled"]; +var _hoisted_3$f = ["href", "target"]; +function render$1$7(_ctx, _cache, $props, $setup, $data, $options) { + var _directive_ripple = resolveDirective("ripple"); + var _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("listContainer") + }, _ctx.ptm("listContainer")), [createBaseVNode("ul", mergeProps({ + ref: "list", + id: $data.id, + "class": _ctx.cx("list"), + role: "menu", + "aria-orientation": $props.position === "bottom" || $props.position === "top" ? "horizontal" : "vertical", + "aria-activedescendant": $data.focused ? $options.focusedOptionId : void 0, + tabindex: $props.tabindex, + "aria-label": $props.ariaLabel, + "aria-labelledby": $props.ariaLabelledby, + onFocus: _cache[0] || (_cache[0] = function() { + return $options.onListFocus && $options.onListFocus.apply($options, arguments); + }), + onBlur: _cache[1] || (_cache[1] = function() { + return $options.onListBlur && $options.onListBlur.apply($options, arguments); + }), + onKeydown: _cache[2] || (_cache[2] = function() { + return $options.onListKeyDown && $options.onListKeyDown.apply($options, arguments); + }), + onMouseleave: _cache[3] || (_cache[3] = function() { + return $options.onListMouseLeave && $options.onListMouseLeave.apply($options, arguments); + }) + }, _ctx.ptm("list")), [(openBlock(true), createElementBlock(Fragment, null, renderList($props.model, function(processedItem, index) { + return openBlock(), createElementBlock("li", mergeProps({ + key: index, + id: $options.getItemId(index), + "class": _ctx.cx("item", { + processedItem, + id: $options.getItemId(index) + }), + role: "menuitem", + "aria-label": processedItem.label, + "aria-disabled": $options.disabled(processedItem), + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onItemClick($event, processedItem); + }, "onClick"), + onMouseenter: /* @__PURE__ */ __name(function onMouseenter($event) { + return $options.onItemMouseEnter(index); + }, "onMouseenter"), + ref_for: true + }, $options.getPTOptions("item", processedItem, index), { + "data-p-focused": $options.isItemActive($options.getItemId(index)), + "data-p-disabled": $options.disabled(processedItem) || false + }), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("itemContent"), + ref_for: true + }, $options.getPTOptions("itemContent", processedItem, index)), [!$props.templates["item"] ? withDirectives((openBlock(), createElementBlock("a", mergeProps({ + key: 0, + href: processedItem.url, + "class": _ctx.cx("itemLink"), + target: processedItem.target, + tabindex: "-1", + "aria-hidden": "true", + ref_for: true + }, $options.getPTOptions("itemLink", processedItem, index)), [!$props.templates["icon"] && !$props.templates["itemicon"] ? withDirectives((openBlock(), createElementBlock("span", mergeProps({ + key: 0, + "class": [_ctx.cx("itemIcon"), processedItem.icon], + ref_for: true + }, $options.getPTOptions("itemIcon", processedItem, index)), null, 16)), [[_directive_ripple]]) : (openBlock(), createBlock(resolveDynamicComponent($props.templates["icon"] || $props.templates["itemicon"]), { + key: 1, + item: processedItem, + "class": normalizeClass(_ctx.cx("itemIcon")) + }, null, 8, ["item", "class"]))], 16, _hoisted_3$f)), [[_directive_tooltip, { + value: processedItem.label, + disabled: !$props.tooltipOptions + }, $props.tooltipOptions]]) : (openBlock(), createBlock(resolveDynamicComponent($props.templates["item"]), { + key: 1, + item: processedItem, + index, + label: processedItem.label, + props: $options.getMenuItemProps(processedItem, index) + }, null, 8, ["item", "index", "label", "props"]))], 16)], 16, _hoisted_2$i); + }), 128))], 16, _hoisted_1$p)], 16); +} +__name(render$1$7, "render$1$7"); +script$1$z.render = render$1$7; +var script$V = { + name: "Dock", + "extends": script$2$7, + inheritAttrs: false, + matchMediaListener: null, + data: /* @__PURE__ */ __name(function data10() { + return { + query: null, + queryMatches: false + }; + }, "data"), + mounted: /* @__PURE__ */ __name(function mounted14() { + this.bindMatchMediaListener(); + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount5() { + this.unbindMatchMediaListener(); + }, "beforeUnmount"), + methods: { + bindMatchMediaListener: /* @__PURE__ */ __name(function bindMatchMediaListener3() { + var _this = this; + if (!this.matchMediaListener) { + var query = matchMedia("(max-width: ".concat(this.breakpoint, ")")); + this.query = query; + this.queryMatches = query.matches; + this.matchMediaListener = function() { + _this.queryMatches = query.matches; + _this.mobileActive = false; + }; + this.query.addEventListener("change", this.matchMediaListener); + } + }, "bindMatchMediaListener"), + unbindMatchMediaListener: /* @__PURE__ */ __name(function unbindMatchMediaListener3() { + if (this.matchMediaListener) { + this.query.removeEventListener("change", this.matchMediaListener); + this.matchMediaListener = null; + } + }, "unbindMatchMediaListener") + }, + computed: { + containerClass: /* @__PURE__ */ __name(function containerClass() { + return [this["class"], this.cx("root")]; + }, "containerClass") + }, + components: { + DockSub: script$1$z + } +}; +function render$P(_ctx, _cache, $props, $setup, $data, $options) { + var _component_DockSub = resolveComponent("DockSub"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": $options.containerClass, + style: _ctx.style + }, _ctx.ptmi("root")), [createVNode(_component_DockSub, { + model: _ctx.model, + templates: _ctx.$slots, + tooltipOptions: _ctx.tooltipOptions, + position: _ctx.position, + menuId: _ctx.menuId, + "aria-label": _ctx.ariaLabel, + "aria-labelledby": _ctx.ariaLabelledby, + tabindex: _ctx.tabindex, + pt: _ctx.pt, + unstyled: _ctx.unstyled + }, null, 8, ["model", "templates", "tooltipOptions", "position", "menuId", "aria-label", "aria-labelledby", "tabindex", "pt", "unstyled"])], 16); +} +__name(render$P, "render$P"); +script$V.render = render$P; +var script$U = { + name: "Dropdown", + "extends": script$1v, + mounted: /* @__PURE__ */ __name(function mounted15() { + console.warn("Deprecated since v4. Use Select component instead."); + }, "mounted") +}; +var DropdownStyle = BaseStyle.extend({ + name: "dropdown" +}); +var DynamicDialogStyle = BaseStyle.extend({ + name: "dynamicdialog" +}); +var script$1$y = { + name: "BaseDynamicDialog", + "extends": script$1d, + props: {}, + style: DynamicDialogStyle, + provide: /* @__PURE__ */ __name(function provide17() { + return { + $pcDynamicDialog: this, + $parentInstance: this + }; + }, "provide") +}; +var script$T = { + name: "DynamicDialog", + "extends": script$1$y, + inheritAttrs: false, + data: /* @__PURE__ */ __name(function data11() { + return { + instanceMap: {} + }; + }, "data"), + openListener: null, + closeListener: null, + currentInstance: null, + mounted: /* @__PURE__ */ __name(function mounted16() { + var _this = this; + this.openListener = function(_ref) { + var instance = _ref.instance; + var key = UniqueComponentId() + "_dynamic_dialog"; + instance.visible = true; + instance.key = key; + _this.instanceMap[key] = instance; + }; + this.closeListener = function(_ref2) { + var instance = _ref2.instance, params = _ref2.params; + var key = instance.key; + var currentInstance = _this.instanceMap[key]; + if (currentInstance) { + currentInstance.visible = false; + currentInstance.options.onClose && currentInstance.options.onClose({ + data: params, + type: "config-close" + }); + _this.currentInstance = currentInstance; + } + }; + DynamicDialogEventBus.on("open", this.openListener); + DynamicDialogEventBus.on("close", this.closeListener); + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount6() { + DynamicDialogEventBus.off("open", this.openListener); + DynamicDialogEventBus.off("close", this.closeListener); + }, "beforeUnmount"), + methods: { + onDialogHide: /* @__PURE__ */ __name(function onDialogHide(instance) { + !this.currentInstance && instance.options.onClose && instance.options.onClose({ + type: "dialog-close" + }); + delete this.instanceMap[instance.key]; + }, "onDialogHide"), + onDialogAfterHide: /* @__PURE__ */ __name(function onDialogAfterHide() { + this.currentInstance && delete this.currentInstance; + this.currentInstance = null; + }, "onDialogAfterHide"), + getTemplateItems: /* @__PURE__ */ __name(function getTemplateItems(template) { + return Array.isArray(template) ? template : [template]; + }, "getTemplateItems") + }, + components: { + DDialog: script$1w + } +}; +function render$O(_ctx, _cache, $props, $setup, $data, $options) { + var _component_DDialog = resolveComponent("DDialog"); + return openBlock(true), createElementBlock(Fragment, null, renderList($data.instanceMap, function(instance, key) { + return openBlock(), createBlock(_component_DDialog, mergeProps({ + key, + visible: instance.visible, + "onUpdate:visible": /* @__PURE__ */ __name(function onUpdateVisible($event) { + return instance.visible = $event; + }, "onUpdateVisible"), + _instance: instance, + ref_for: true + }, instance.options.props, { + onHide: /* @__PURE__ */ __name(function onHide($event) { + return $options.onDialogHide(instance); + }, "onHide"), + onAfterHide: $options.onDialogAfterHide + }), createSlots({ + "default": withCtx(function() { + return [(openBlock(), createBlock(resolveDynamicComponent(instance.content), mergeProps({ + ref_for: true + }, instance.options.emits), null, 16))]; + }), + _: 2 + }, [instance.options.templates && instance.options.templates.header ? { + name: "header", + fn: withCtx(function() { + return [(openBlock(true), createElementBlock(Fragment, null, renderList($options.getTemplateItems(instance.options.templates.header), function(header2, index) { + return openBlock(), createBlock(resolveDynamicComponent(header2), mergeProps({ + key: index + "_header", + ref_for: true + }, instance.options.emits), null, 16); + }), 128))]; + }), + key: "0" + } : void 0, instance.options.templates && instance.options.templates.footer ? { + name: "footer", + fn: withCtx(function() { + return [(openBlock(true), createElementBlock(Fragment, null, renderList($options.getTemplateItems(instance.options.templates.footer), function(footer, index) { + return openBlock(), createBlock(resolveDynamicComponent(footer), mergeProps({ + key: index + "_footer", + ref_for: true + }, instance.options.emits), null, 16); + }), 128))]; + }), + key: "1" + } : void 0]), 1040, ["visible", "onUpdate:visible", "_instance", "onHide", "onAfterHide"]); + }), 128); +} +__name(render$O, "render$O"); +script$T.render = render$O; +var theme$t = /* @__PURE__ */ __name(function theme11(_ref) { + var dt = _ref.dt; + return "\n.p-fieldset {\n background: ".concat(dt("fieldset.background"), ";\n border: 1px solid ").concat(dt("fieldset.border.color"), ";\n border-radius: ").concat(dt("fieldset.border.radius"), ";\n color: ").concat(dt("fieldset.color"), ";\n padding: ").concat(dt("fieldset.padding"), ";\n margin: 0;\n}\n\n.p-fieldset-legend {\n background: ").concat(dt("fieldset.legend.background"), ";\n border-radius: ").concat(dt("fieldset.legend.border.radius"), ";\n border-width: ").concat(dt("fieldset.legend.border.width"), ";\n border-style: solid;\n border-color: ").concat(dt("fieldset.legend.border.color"), ";\n padding: ").concat(dt("fieldset.legend.padding"), ";\n transition: background ").concat(dt("fieldset.transition.duration"), ", color ").concat(dt("fieldset.transition.duration"), ", outline-color ").concat(dt("fieldset.transition.duration"), ", box-shadow ").concat(dt("fieldset.transition.duration"), ";\n}\n\n.p-fieldset-toggleable > .p-fieldset-legend {\n padding: 0;\n}\n\n.p-fieldset-toggle-button {\n cursor: pointer;\n user-select: none;\n overflow: hidden;\n position: relative;\n text-decoration: none;\n display: flex;\n gap: ").concat(dt("fieldset.legend.gap"), ";\n align-items: center;\n justify-content: center;\n padding: ").concat(dt("fieldset.legend.padding"), ";\n background: transparent;\n border: 0 none;\n border-radius: ").concat(dt("fieldset.legend.border.radius"), ";\n transition: background ").concat(dt("fieldset.transition.duration"), ", color ").concat(dt("fieldset.transition.duration"), ", outline-color ").concat(dt("fieldset.transition.duration"), ", box-shadow ").concat(dt("fieldset.transition.duration"), ";\n outline-color: transparent;\n}\n\n.p-fieldset-legend-label {\n font-weight: ").concat(dt("fieldset.legend.font.weight"), ";\n}\n\n.p-fieldset-toggle-button:focus-visible {\n box-shadow: ").concat(dt("fieldset.legend.focus.ring.shadow"), ";\n outline: ").concat(dt("fieldset.legend.focus.ring.width"), " ").concat(dt("fieldset.legend.focus.ring.style"), " ").concat(dt("fieldset.legend.focus.ring.color"), ";\n outline-offset: ").concat(dt("fieldset.legend.focus.ring.offset"), ";\n}\n\n.p-fieldset-toggleable > .p-fieldset-legend:hover {\n color: ").concat(dt("fieldset.legend.hover.color"), ";\n background: ").concat(dt("fieldset.legend.hover.background"), ";\n}\n\n.p-fieldset-toggle-icon {\n color: ").concat(dt("fieldset.toggle.icon.color"), ";\n transition: color ").concat(dt("fieldset.transition.duration"), ";\n}\n\n.p-fieldset-toggleable > .p-fieldset-legend:hover .p-fieldset-toggle-icon {\n color: ").concat(dt("fieldset.toggle.icon.hover.color"), ";\n}\n\n.p-fieldset .p-fieldset-content {\n padding: ").concat(dt("fieldset.content.padding"), ";\n}\n"); +}, "theme"); +var classes$x = { + root: /* @__PURE__ */ __name(function root11(_ref2) { + var props = _ref2.props; + return ["p-fieldset p-component", { + "p-fieldset-toggleable": props.toggleable + }]; + }, "root"), + legend: "p-fieldset-legend", + legendLabel: "p-fieldset-legend-label", + toggleButton: "p-fieldset-toggle-button", + toggleIcon: "p-fieldset-toggle-icon", + contentContainer: "p-fieldset-content-container", + content: "p-fieldset-content" +}; +var FieldsetStyle = BaseStyle.extend({ + name: "fieldset", + theme: theme$t, + classes: classes$x +}); +var script$1$x = { + name: "BaseFieldset", + "extends": script$1d, + props: { + legend: String, + toggleable: Boolean, + collapsed: Boolean, + toggleButtonProps: { + type: null, + "default": null + } + }, + style: FieldsetStyle, + provide: /* @__PURE__ */ __name(function provide18() { + return { + $pcFieldset: this, + $parentInstance: this + }; + }, "provide") +}; +var script$S = { + name: "Fieldset", + "extends": script$1$x, + inheritAttrs: false, + emits: ["update:collapsed", "toggle"], + data: /* @__PURE__ */ __name(function data12() { + return { + id: this.$attrs.id, + d_collapsed: this.collapsed + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId4(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + collapsed: /* @__PURE__ */ __name(function collapsed(newValue) { + this.d_collapsed = newValue; + }, "collapsed") + }, + mounted: /* @__PURE__ */ __name(function mounted17() { + this.id = this.id || UniqueComponentId(); + }, "mounted"), + methods: { + toggle: /* @__PURE__ */ __name(function toggle(event2) { + this.d_collapsed = !this.d_collapsed; + this.$emit("update:collapsed", this.d_collapsed); + this.$emit("toggle", { + originalEvent: event2, + value: this.d_collapsed + }); + }, "toggle"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown4(event2) { + if (event2.code === "Enter" || event2.code === "NumpadEnter" || event2.code === "Space") { + this.toggle(event2); + event2.preventDefault(); + } + }, "onKeyDown") + }, + computed: { + buttonAriaLabel: /* @__PURE__ */ __name(function buttonAriaLabel() { + return this.toggleButtonProps && this.toggleButtonProps.ariaLabel ? this.toggleButtonProps.ariaLabel : this.legend; + }, "buttonAriaLabel") + }, + directives: { + ripple: Ripple + }, + components: { + PlusIcon: script$1x, + MinusIcon: script$1y + } +}; +function _typeof$i(o) { + "@babel/helpers - typeof"; + return _typeof$i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$i(o); +} +__name(_typeof$i, "_typeof$i"); +function ownKeys$g(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$g, "ownKeys$g"); +function _objectSpread$g(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$g(Object(t2), true).forEach(function(r2) { + _defineProperty$h(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$g(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$g, "_objectSpread$g"); +function _defineProperty$h(e, r, t2) { + return (r = _toPropertyKey$h(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$h, "_defineProperty$h"); +function _toPropertyKey$h(t2) { + var i = _toPrimitive$h(t2, "string"); + return "symbol" == _typeof$i(i) ? i : i + ""; +} +__name(_toPropertyKey$h, "_toPropertyKey$h"); +function _toPrimitive$h(t2, r) { + if ("object" != _typeof$i(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$i(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$h, "_toPrimitive$h"); +var _hoisted_1$o = ["id"]; +var _hoisted_2$h = ["id", "aria-controls", "aria-expanded", "aria-label"]; +var _hoisted_3$e = ["id", "aria-labelledby"]; +function render$N(_ctx, _cache, $props, $setup, $data, $options) { + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createElementBlock("fieldset", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [createBaseVNode("legend", mergeProps({ + "class": _ctx.cx("legend") + }, _ctx.ptm("legend")), [renderSlot(_ctx.$slots, "legend", { + toggleCallback: $options.toggle + }, function() { + return [!_ctx.toggleable ? (openBlock(), createElementBlock("span", mergeProps({ + key: 0, + id: $data.id + "_header", + "class": _ctx.cx("legendLabel") + }, _ctx.ptm("legendLabel")), toDisplayString(_ctx.legend), 17, _hoisted_1$o)) : createCommentVNode("", true), _ctx.toggleable ? withDirectives((openBlock(), createElementBlock("button", mergeProps({ + key: 1, + id: $data.id + "_header", + type: "button", + "aria-controls": $data.id + "_content", + "aria-expanded": !$data.d_collapsed, + "aria-label": $options.buttonAriaLabel, + "class": _ctx.cx("toggleButton"), + onClick: _cache[0] || (_cache[0] = function() { + return $options.toggle && $options.toggle.apply($options, arguments); + }), + onKeydown: _cache[1] || (_cache[1] = function() { + return $options.onKeyDown && $options.onKeyDown.apply($options, arguments); + }) + }, _objectSpread$g(_objectSpread$g({}, _ctx.toggleButtonProps), _ctx.ptm("toggleButton"))), [renderSlot(_ctx.$slots, _ctx.$slots.toggleicon ? "toggleicon" : "togglericon", { + collapsed: $data.d_collapsed, + "class": normalizeClass(_ctx.cx("toggleIcon")) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent($data.d_collapsed ? "PlusIcon" : "MinusIcon"), mergeProps({ + "class": _ctx.cx("toggleIcon") + }, _ctx.ptm("toggleIcon")), null, 16, ["class"]))]; + }), createBaseVNode("span", mergeProps({ + "class": _ctx.cx("legendLabel") + }, _ctx.ptm("legendLabel")), toDisplayString(_ctx.legend), 17)], 16, _hoisted_2$h)), [[_directive_ripple]]) : createCommentVNode("", true)]; + })], 16), createVNode(Transition, mergeProps({ + name: "p-toggleable-content" + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [withDirectives(createBaseVNode("div", mergeProps({ + id: $data.id + "_content", + "class": _ctx.cx("contentContainer"), + role: "region", + "aria-labelledby": $data.id + "_header" + }, _ctx.ptm("contentContainer")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("content") + }, _ctx.ptm("content")), [renderSlot(_ctx.$slots, "default")], 16)], 16, _hoisted_3$e), [[vShow, !$data.d_collapsed]])]; + }), + _: 3 + }, 16)], 16); +} +__name(render$N, "render$N"); +script$S.render = render$N; +var script$R = { + name: "UploadIcon", + "extends": script$1m +}; +function render$M(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + d: "M6.58942 9.82197C6.70165 9.93405 6.85328 9.99793 7.012 10C7.17071 9.99793 7.32234 9.93405 7.43458 9.82197C7.54681 9.7099 7.61079 9.55849 7.61286 9.4V2.04798L9.79204 4.22402C9.84752 4.28011 9.91365 4.32457 9.98657 4.35479C10.0595 4.38502 10.1377 4.40039 10.2167 4.40002C10.2956 4.40039 10.3738 4.38502 10.4467 4.35479C10.5197 4.32457 10.5858 4.28011 10.6413 4.22402C10.7538 4.11152 10.817 3.95902 10.817 3.80002C10.817 3.64102 10.7538 3.48852 10.6413 3.37602L7.45127 0.190618C7.44656 0.185584 7.44176 0.180622 7.43687 0.175736C7.32419 0.063214 7.17136 0 7.012 0C6.85264 0 6.69981 0.063214 6.58712 0.175736C6.58181 0.181045 6.5766 0.186443 6.5715 0.191927L3.38282 3.37602C3.27669 3.48976 3.2189 3.6402 3.22165 3.79564C3.2244 3.95108 3.28746 4.09939 3.39755 4.20932C3.50764 4.31925 3.65616 4.38222 3.81182 4.38496C3.96749 4.3877 4.11814 4.33001 4.23204 4.22402L6.41113 2.04807V9.4C6.41321 9.55849 6.47718 9.7099 6.58942 9.82197ZM11.9952 14H2.02883C1.751 13.9887 1.47813 13.9228 1.22584 13.8061C0.973545 13.6894 0.746779 13.5241 0.558517 13.3197C0.370254 13.1154 0.22419 12.876 0.128681 12.6152C0.0331723 12.3545 -0.00990605 12.0775 0.0019109 11.8V9.40005C0.0019109 9.24092 0.065216 9.08831 0.1779 8.97579C0.290584 8.86326 0.443416 8.80005 0.602775 8.80005C0.762134 8.80005 0.914966 8.86326 1.02765 8.97579C1.14033 9.08831 1.20364 9.24092 1.20364 9.40005V11.8C1.18295 12.0376 1.25463 12.274 1.40379 12.4602C1.55296 12.6463 1.76817 12.7681 2.00479 12.8H11.9952C12.2318 12.7681 12.447 12.6463 12.5962 12.4602C12.7453 12.274 12.817 12.0376 12.7963 11.8V9.40005C12.7963 9.24092 12.8596 9.08831 12.9723 8.97579C13.085 8.86326 13.2378 8.80005 13.3972 8.80005C13.5565 8.80005 13.7094 8.86326 13.8221 8.97579C13.9347 9.08831 13.998 9.24092 13.998 9.40005V11.8C14.022 12.3563 13.8251 12.8996 13.45 13.3116C13.0749 13.7236 12.552 13.971 11.9952 14Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$M, "render$M"); +script$R.render = render$M; +var theme$s = /* @__PURE__ */ __name(function theme12(_ref) { + var dt = _ref.dt; + return '\n.p-fileupload input[type="file"] {\n display: none;\n}\n\n.p-fileupload-advanced {\n border: 1px solid '.concat(dt("fileupload.border.color"), ";\n border-radius: ").concat(dt("fileupload.border.radius"), ";\n background: ").concat(dt("fileupload.background"), ";\n color: ").concat(dt("fileupload.color"), ";\n}\n\n.p-fileupload-header {\n display: flex;\n align-items: center;\n padding: ").concat(dt("fileupload.header.padding"), ";\n background: ").concat(dt("fileupload.header.background"), ";\n color: ").concat(dt("fileupload.header.color"), ";\n border-style: solid;\n border-width: ").concat(dt("fileupload.header.border.width"), ";\n border-color: ").concat(dt("fileupload.header.border.color"), ";\n border-radius: ").concat(dt("fileupload.header.border.radius"), ";\n gap: ").concat(dt("fileupload.header.gap"), ";\n}\n\n.p-fileupload-content {\n border: 1px solid transparent;\n display: flex;\n flex-direction: column;\n gap: ").concat(dt("fileupload.content.gap"), ";\n transition: border-color ").concat(dt("fileupload.transition.duration"), ";\n padding: ").concat(dt("fileupload.content.padding"), ";\n}\n\n.p-fileupload-content .p-progressbar {\n width: 100%;\n height: ").concat(dt("fileupload.progressbar.height"), ";\n}\n\n.p-fileupload-file-list {\n display: flex;\n flex-direction: column;\n gap: ").concat(dt("fileupload.filelist.gap"), ";\n}\n\n.p-fileupload-file {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n padding: ").concat(dt("fileupload.file.padding"), ";\n border-block-end: 1px solid ").concat(dt("fileupload.file.border.color"), ";\n gap: ").concat(dt("fileupload.file.gap"), ";\n}\n\n.p-fileupload-file:last-child {\n border-block-end: 0;\n}\n\n.p-fileupload-file-info {\n display: flex;\n flex-direction: column;\n gap: ").concat(dt("fileupload.file.info.gap"), ";\n}\n\n.p-fileupload-file-thumbnail {\n flex-shrink: 0;\n}\n\n.p-fileupload-file-actions {\n margin-inline-start: auto;\n}\n\n.p-fileupload-highlight {\n border: 1px dashed ").concat(dt("fileupload.content.highlight.border.color"), ";\n}\n\n.p-fileupload-basic {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n gap: ").concat(dt("fileupload.basic.gap"), ";\n}\n"); +}, "theme"); +var classes$w = { + root: /* @__PURE__ */ __name(function root12(_ref2) { + var props = _ref2.props; + return ["p-fileupload p-fileupload-".concat(props.mode, " p-component")]; + }, "root"), + header: "p-fileupload-header", + pcChooseButton: "p-fileupload-choose-button", + pcUploadButton: "p-fileupload-upload-button", + pcCancelButton: "p-fileupload-cancel-button", + content: "p-fileupload-content", + fileList: "p-fileupload-file-list", + file: "p-fileupload-file", + fileThumbnail: "p-fileupload-file-thumbnail", + fileInfo: "p-fileupload-file-info", + fileName: "p-fileupload-file-name", + fileSize: "p-fileupload-file-size", + pcFileBadge: "p-fileupload-file-badge", + fileActions: "p-fileupload-file-actions", + pcFileRemoveButton: "p-fileupload-file-remove-button" +}; +var FileUploadStyle = BaseStyle.extend({ + name: "fileupload", + theme: theme$s, + classes: classes$w +}); +var script$2$6 = { + name: "BaseFileUpload", + "extends": script$1d, + props: { + name: { + type: String, + "default": null + }, + url: { + type: String, + "default": null + }, + mode: { + type: String, + "default": "advanced" + }, + multiple: { + type: Boolean, + "default": false + }, + accept: { + type: String, + "default": null + }, + disabled: { + type: Boolean, + "default": false + }, + auto: { + type: Boolean, + "default": false + }, + maxFileSize: { + type: Number, + "default": null + }, + invalidFileSizeMessage: { + type: String, + "default": "{0}: Invalid file size, file size should be smaller than {1}." + }, + invalidFileTypeMessage: { + type: String, + "default": "{0}: Invalid file type, allowed file types: {1}." + }, + fileLimit: { + type: Number, + "default": null + }, + invalidFileLimitMessage: { + type: String, + "default": "Maximum number of files exceeded, limit is {0} at most." + }, + withCredentials: { + type: Boolean, + "default": false + }, + previewWidth: { + type: Number, + "default": 50 + }, + chooseLabel: { + type: String, + "default": null + }, + uploadLabel: { + type: String, + "default": null + }, + cancelLabel: { + type: String, + "default": null + }, + customUpload: { + type: Boolean, + "default": false + }, + showUploadButton: { + type: Boolean, + "default": true + }, + showCancelButton: { + type: Boolean, + "default": true + }, + chooseIcon: { + type: String, + "default": void 0 + }, + uploadIcon: { + type: String, + "default": void 0 + }, + cancelIcon: { + type: String, + "default": void 0 + }, + style: null, + "class": null, + chooseButtonProps: { + type: null, + "default": null + }, + uploadButtonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default7() { + return { + severity: "secondary" + }; + }, "_default") + }, + cancelButtonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default8() { + return { + severity: "secondary" + }; + }, "_default") + } + }, + style: FileUploadStyle, + provide: /* @__PURE__ */ __name(function provide19() { + return { + $pcFileUpload: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1$w = { + name: "FileContent", + hostName: "FileUpload", + "extends": script$1d, + emits: ["remove"], + props: { + files: { + type: Array, + "default": /* @__PURE__ */ __name(function _default9() { + return []; + }, "_default") + }, + badgeSeverity: { + type: String, + "default": "warn" + }, + badgeValue: { + type: String, + "default": null + }, + previewWidth: { + type: Number, + "default": 50 + }, + templates: { + type: null, + "default": null + } + }, + methods: { + formatSize: /* @__PURE__ */ __name(function formatSize(bytes) { + var _this$$primevue$confi; + var k = 1024; + var dm = 3; + var sizes = ((_this$$primevue$confi = this.$primevue.config.locale) === null || _this$$primevue$confi === void 0 ? void 0 : _this$$primevue$confi.fileSizeTypes) || ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; + if (bytes === 0) { + return "0 ".concat(sizes[0]); + } + var i = Math.floor(Math.log(bytes) / Math.log(k)); + var formattedSize = parseFloat((bytes / Math.pow(k, i)).toFixed(dm)); + return "".concat(formattedSize, " ").concat(sizes[i]); + }, "formatSize") + }, + components: { + Button: script$1e, + Badge: script$1z, + TimesIcon: script$1g + } +}; +var _hoisted_1$1$5 = ["alt", "src", "width"]; +function render$1$6(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Badge = resolveComponent("Badge"); + var _component_TimesIcon = resolveComponent("TimesIcon"); + var _component_Button = resolveComponent("Button"); + return openBlock(true), createElementBlock(Fragment, null, renderList($props.files, function(file, index) { + return openBlock(), createElementBlock("div", mergeProps({ + key: file.name + file.type + file.size, + "class": _ctx.cx("file"), + ref_for: true + }, _ctx.ptm("file")), [createBaseVNode("img", mergeProps({ + role: "presentation", + "class": _ctx.cx("fileThumbnail"), + alt: file.name, + src: file.objectURL, + width: $props.previewWidth, + ref_for: true + }, _ctx.ptm("fileThumbnail")), null, 16, _hoisted_1$1$5), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("fileInfo"), + ref_for: true + }, _ctx.ptm("fileInfo")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("fileName"), + ref_for: true + }, _ctx.ptm("fileName")), toDisplayString(file.name), 17), createBaseVNode("span", mergeProps({ + "class": _ctx.cx("fileSize"), + ref_for: true + }, _ctx.ptm("fileSize")), toDisplayString($options.formatSize(file.size)), 17)], 16), createVNode(_component_Badge, { + value: $props.badgeValue, + "class": normalizeClass(_ctx.cx("pcFileBadge")), + severity: $props.badgeSeverity, + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcFileBadge") + }, null, 8, ["value", "class", "severity", "unstyled", "pt"]), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("fileActions"), + ref_for: true + }, _ctx.ptm("fileActions")), [createVNode(_component_Button, { + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return _ctx.$emit("remove", index); + }, "onClick"), + text: "", + rounded: "", + severity: "danger", + "class": normalizeClass(_ctx.cx("pcFileRemoveButton")), + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcFileRemoveButton") + }, { + icon: withCtx(function(iconProps) { + return [$props.templates.fileremoveicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.fileremoveicon), { + key: 0, + "class": normalizeClass(iconProps["class"]), + file, + index + }, null, 8, ["class", "file", "index"])) : (openBlock(), createBlock(_component_TimesIcon, mergeProps({ + key: 1, + "class": iconProps["class"], + "aria-hidden": "true", + ref_for: true + }, _ctx.ptm("pcFileRemoveButton")["icon"]), null, 16, ["class"]))]; + }), + _: 2 + }, 1032, ["onClick", "class", "unstyled", "pt"])], 16)], 16); + }), 128); +} +__name(render$1$6, "render$1$6"); +script$1$w.render = render$1$6; +function _toConsumableArray$9(r) { + return _arrayWithoutHoles$9(r) || _iterableToArray$9(r) || _unsupportedIterableToArray$a(r) || _nonIterableSpread$9(); +} +__name(_toConsumableArray$9, "_toConsumableArray$9"); +function _nonIterableSpread$9() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$9, "_nonIterableSpread$9"); +function _iterableToArray$9(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$9, "_iterableToArray$9"); +function _arrayWithoutHoles$9(r) { + if (Array.isArray(r)) return _arrayLikeToArray$a(r); +} +__name(_arrayWithoutHoles$9, "_arrayWithoutHoles$9"); +function _createForOfIteratorHelper$3(r, e) { + var t2 = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (!t2) { + if (Array.isArray(r) || (t2 = _unsupportedIterableToArray$a(r)) || e) { + t2 && (r = t2); + var _n = 0, F = /* @__PURE__ */ __name(function F2() { + }, "F"); + return { s: F, n: /* @__PURE__ */ __name(function n() { + return _n >= r.length ? { done: true } : { done: false, value: r[_n++] }; + }, "n"), e: /* @__PURE__ */ __name(function e2(r2) { + throw r2; + }, "e"), f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var o, a = true, u = false; + return { s: /* @__PURE__ */ __name(function s() { + t2 = t2.call(r); + }, "s"), n: /* @__PURE__ */ __name(function n() { + var r2 = t2.next(); + return a = r2.done, r2; + }, "n"), e: /* @__PURE__ */ __name(function e2(r2) { + u = true, o = r2; + }, "e"), f: /* @__PURE__ */ __name(function f() { + try { + a || null == t2["return"] || t2["return"](); + } finally { + if (u) throw o; + } + }, "f") }; +} +__name(_createForOfIteratorHelper$3, "_createForOfIteratorHelper$3"); +function _unsupportedIterableToArray$a(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$a(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$a(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$a, "_unsupportedIterableToArray$a"); +function _arrayLikeToArray$a(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$a, "_arrayLikeToArray$a"); +var script$Q = { + name: "FileUpload", + "extends": script$2$6, + inheritAttrs: false, + emits: ["select", "uploader", "before-upload", "progress", "upload", "error", "before-send", "clear", "remove", "remove-uploaded-file"], + duplicateIEEvent: false, + data: /* @__PURE__ */ __name(function data13() { + return { + uploadedFileCount: 0, + files: [], + messages: [], + focused: false, + progress: null, + uploadedFiles: [] + }; + }, "data"), + methods: { + upload: /* @__PURE__ */ __name(function upload() { + if (this.hasFiles) this.uploader(); + }, "upload"), + onBasicUploaderClick: /* @__PURE__ */ __name(function onBasicUploaderClick(event2) { + if (event2.button === 0) this.$refs.fileInput.click(); + }, "onBasicUploaderClick"), + onFileSelect: /* @__PURE__ */ __name(function onFileSelect(event2) { + if (event2.type !== "drop" && this.isIE11() && this.duplicateIEEvent) { + this.duplicateIEEvent = false; + return; + } + if (this.isBasic && this.hasFiles) { + this.files = []; + } + this.messages = []; + this.files = this.files || []; + var files = event2.dataTransfer ? event2.dataTransfer.files : event2.target.files; + var _iterator = _createForOfIteratorHelper$3(files), _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + var file = _step.value; + if (!this.isFileSelected(file) && !this.isFileLimitExceeded()) { + if (this.validate(file)) { + if (this.isImage(file)) { + file.objectURL = window.URL.createObjectURL(file); + } + this.files.push(file); + } + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + this.$emit("select", { + originalEvent: event2, + files: this.files + }); + if (this.fileLimit) { + this.checkFileLimit(); + } + if (this.auto && this.hasFiles && !this.isFileLimitExceeded()) { + this.uploader(); + } + if (event2.type !== "drop" && this.isIE11()) { + this.clearIEInput(); + } else { + this.clearInputElement(); + } + }, "onFileSelect"), + choose: /* @__PURE__ */ __name(function choose() { + this.$refs.fileInput.click(); + }, "choose"), + uploader: /* @__PURE__ */ __name(function uploader() { + var _this = this; + if (this.customUpload) { + if (this.fileLimit) { + this.uploadedFileCount += this.files.length; + } + this.$emit("uploader", { + files: this.files + }); + this.clear(); + } else { + var xhr = new XMLHttpRequest(); + var formData = new FormData(); + this.$emit("before-upload", { + xhr, + formData + }); + var _iterator2 = _createForOfIteratorHelper$3(this.files), _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { + var file = _step2.value; + formData.append(this.name, file, file.name); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + xhr.upload.addEventListener("progress", function(event2) { + if (event2.lengthComputable) { + _this.progress = Math.round(event2.loaded * 100 / event2.total); + } + _this.$emit("progress", { + originalEvent: event2, + progress: _this.progress + }); + }); + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + var _this$uploadedFiles; + _this.progress = 0; + if (xhr.status >= 200 && xhr.status < 300) { + if (_this.fileLimit) { + _this.uploadedFileCount += _this.files.length; + } + _this.$emit("upload", { + xhr, + files: _this.files + }); + } else { + _this.$emit("error", { + xhr, + files: _this.files + }); + } + (_this$uploadedFiles = _this.uploadedFiles).push.apply(_this$uploadedFiles, _toConsumableArray$9(_this.files)); + _this.clear(); + } + }; + xhr.open("POST", this.url, true); + this.$emit("before-send", { + xhr, + formData + }); + xhr.withCredentials = this.withCredentials; + xhr.send(formData); + } + }, "uploader"), + clear: /* @__PURE__ */ __name(function clear() { + this.files = []; + this.messages = null; + this.$emit("clear"); + if (this.isAdvanced) { + this.clearInputElement(); + } + }, "clear"), + onFocus: /* @__PURE__ */ __name(function onFocus5() { + this.focused = true; + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur4() { + this.focused = false; + }, "onBlur"), + isFileSelected: /* @__PURE__ */ __name(function isFileSelected(file) { + if (this.files && this.files.length) { + var _iterator3 = _createForOfIteratorHelper$3(this.files), _step3; + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { + var sFile = _step3.value; + if (sFile.name + sFile.type + sFile.size === file.name + file.type + file.size) return true; + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + } + return false; + }, "isFileSelected"), + isIE11: /* @__PURE__ */ __name(function isIE11() { + return !!window["MSInputMethodContext"] && !!document["documentMode"]; + }, "isIE11"), + validate: /* @__PURE__ */ __name(function validate(file) { + if (this.accept && !this.isFileTypeValid(file)) { + this.messages.push(this.invalidFileTypeMessage.replace("{0}", file.name).replace("{1}", this.accept)); + return false; + } + if (this.maxFileSize && file.size > this.maxFileSize) { + this.messages.push(this.invalidFileSizeMessage.replace("{0}", file.name).replace("{1}", this.formatSize(this.maxFileSize))); + return false; + } + return true; + }, "validate"), + isFileTypeValid: /* @__PURE__ */ __name(function isFileTypeValid(file) { + var acceptableTypes = this.accept.split(",").map(function(type2) { + return type2.trim(); + }); + var _iterator4 = _createForOfIteratorHelper$3(acceptableTypes), _step4; + try { + for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) { + var type = _step4.value; + var acceptable = this.isWildcard(type) ? this.getTypeClass(file.type) === this.getTypeClass(type) : file.type == type || this.getFileExtension(file).toLowerCase() === type.toLowerCase(); + if (acceptable) { + return true; + } + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); + } + return false; + }, "isFileTypeValid"), + getTypeClass: /* @__PURE__ */ __name(function getTypeClass(fileType) { + return fileType.substring(0, fileType.indexOf("/")); + }, "getTypeClass"), + isWildcard: /* @__PURE__ */ __name(function isWildcard(fileType) { + return fileType.indexOf("*") !== -1; + }, "isWildcard"), + getFileExtension: /* @__PURE__ */ __name(function getFileExtension(file) { + return "." + file.name.split(".").pop(); + }, "getFileExtension"), + isImage: /* @__PURE__ */ __name(function isImage(file) { + return /^image\//.test(file.type); + }, "isImage"), + onDragEnter: /* @__PURE__ */ __name(function onDragEnter(event2) { + if (!this.disabled) { + event2.stopPropagation(); + event2.preventDefault(); + } + }, "onDragEnter"), + onDragOver: /* @__PURE__ */ __name(function onDragOver(event2) { + if (!this.disabled) { + !this.isUnstyled && addClass(this.$refs.content, "p-fileupload-highlight"); + this.$refs.content.setAttribute("data-p-highlight", true); + event2.stopPropagation(); + event2.preventDefault(); + } + }, "onDragOver"), + onDragLeave: /* @__PURE__ */ __name(function onDragLeave() { + if (!this.disabled) { + !this.isUnstyled && removeClass(this.$refs.content, "p-fileupload-highlight"); + this.$refs.content.setAttribute("data-p-highlight", false); + } + }, "onDragLeave"), + onDrop: /* @__PURE__ */ __name(function onDrop(event2) { + if (!this.disabled) { + !this.isUnstyled && removeClass(this.$refs.content, "p-fileupload-highlight"); + this.$refs.content.setAttribute("data-p-highlight", false); + event2.stopPropagation(); + event2.preventDefault(); + var files = event2.dataTransfer ? event2.dataTransfer.files : event2.target.files; + var allowDrop = this.multiple || files && files.length === 1; + if (allowDrop) { + this.onFileSelect(event2); + } + } + }, "onDrop"), + remove: /* @__PURE__ */ __name(function remove(index) { + this.clearInputElement(); + var removedFile = this.files.splice(index, 1)[0]; + this.files = _toConsumableArray$9(this.files); + this.$emit("remove", { + file: removedFile, + files: this.files + }); + }, "remove"), + removeUploadedFile: /* @__PURE__ */ __name(function removeUploadedFile(index) { + var removedFile = this.uploadedFiles.splice(index, 1)[0]; + this.uploadedFiles = _toConsumableArray$9(this.uploadedFiles); + this.$emit("remove-uploaded-file", { + file: removedFile, + files: this.uploadedFiles + }); + }, "removeUploadedFile"), + clearInputElement: /* @__PURE__ */ __name(function clearInputElement() { + this.$refs.fileInput.value = ""; + }, "clearInputElement"), + clearIEInput: /* @__PURE__ */ __name(function clearIEInput() { + if (this.$refs.fileInput) { + this.duplicateIEEvent = true; + this.$refs.fileInput.value = ""; + } + }, "clearIEInput"), + formatSize: /* @__PURE__ */ __name(function formatSize2(bytes) { + var _this$$primevue$confi; + var k = 1024; + var dm = 3; + var sizes = ((_this$$primevue$confi = this.$primevue.config.locale) === null || _this$$primevue$confi === void 0 ? void 0 : _this$$primevue$confi.fileSizeTypes) || ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; + if (bytes === 0) { + return "0 ".concat(sizes[0]); + } + var i = Math.floor(Math.log(bytes) / Math.log(k)); + var formattedSize = parseFloat((bytes / Math.pow(k, i)).toFixed(dm)); + return "".concat(formattedSize, " ").concat(sizes[i]); + }, "formatSize"), + isFileLimitExceeded: /* @__PURE__ */ __name(function isFileLimitExceeded() { + if (this.fileLimit && this.fileLimit <= this.files.length + this.uploadedFileCount && this.focused) { + this.focused = false; + } + return this.fileLimit && this.fileLimit < this.files.length + this.uploadedFileCount; + }, "isFileLimitExceeded"), + checkFileLimit: /* @__PURE__ */ __name(function checkFileLimit() { + if (this.isFileLimitExceeded()) { + this.messages.push(this.invalidFileLimitMessage.replace("{0}", this.fileLimit.toString())); + } + }, "checkFileLimit"), + onMessageClose: /* @__PURE__ */ __name(function onMessageClose() { + this.messages = null; + }, "onMessageClose") + }, + computed: { + isAdvanced: /* @__PURE__ */ __name(function isAdvanced() { + return this.mode === "advanced"; + }, "isAdvanced"), + isBasic: /* @__PURE__ */ __name(function isBasic() { + return this.mode === "basic"; + }, "isBasic"), + chooseButtonClass: /* @__PURE__ */ __name(function chooseButtonClass() { + return [this.cx("pcChooseButton"), this["class"]]; + }, "chooseButtonClass"), + basicFileChosenLabel: /* @__PURE__ */ __name(function basicFileChosenLabel() { + var _this$$primevue$confi3; + if (this.auto) return this.chooseButtonLabel; + else if (this.hasFiles) { + var _this$$primevue$confi2; + if (this.files && this.files.length === 1) return this.files[0].name; + return (_this$$primevue$confi2 = this.$primevue.config.locale) === null || _this$$primevue$confi2 === void 0 || (_this$$primevue$confi2 = _this$$primevue$confi2.fileChosenMessage) === null || _this$$primevue$confi2 === void 0 ? void 0 : _this$$primevue$confi2.replace("{0}", this.files.length); + } + return ((_this$$primevue$confi3 = this.$primevue.config.locale) === null || _this$$primevue$confi3 === void 0 ? void 0 : _this$$primevue$confi3.noFileChosenMessage) || ""; + }, "basicFileChosenLabel"), + hasFiles: /* @__PURE__ */ __name(function hasFiles() { + return this.files && this.files.length > 0; + }, "hasFiles"), + hasUploadedFiles: /* @__PURE__ */ __name(function hasUploadedFiles() { + return this.uploadedFiles && this.uploadedFiles.length > 0; + }, "hasUploadedFiles"), + chooseDisabled: /* @__PURE__ */ __name(function chooseDisabled() { + return this.disabled || this.fileLimit && this.fileLimit <= this.files.length + this.uploadedFileCount; + }, "chooseDisabled"), + uploadDisabled: /* @__PURE__ */ __name(function uploadDisabled() { + return this.disabled || !this.hasFiles || this.fileLimit && this.fileLimit < this.files.length; + }, "uploadDisabled"), + cancelDisabled: /* @__PURE__ */ __name(function cancelDisabled() { + return this.disabled || !this.hasFiles; + }, "cancelDisabled"), + chooseButtonLabel: /* @__PURE__ */ __name(function chooseButtonLabel() { + return this.chooseLabel || this.$primevue.config.locale.choose; + }, "chooseButtonLabel"), + uploadButtonLabel: /* @__PURE__ */ __name(function uploadButtonLabel() { + return this.uploadLabel || this.$primevue.config.locale.upload; + }, "uploadButtonLabel"), + cancelButtonLabel: /* @__PURE__ */ __name(function cancelButtonLabel() { + return this.cancelLabel || this.$primevue.config.locale.cancel; + }, "cancelButtonLabel"), + completedLabel: /* @__PURE__ */ __name(function completedLabel() { + return this.$primevue.config.locale.completed; + }, "completedLabel"), + pendingLabel: /* @__PURE__ */ __name(function pendingLabel() { + return this.$primevue.config.locale.pending; + }, "pendingLabel") + }, + components: { + Button: script$1e, + ProgressBar: script$1A, + Message: script$1B, + FileContent: script$1$w, + PlusIcon: script$1x, + UploadIcon: script$R, + TimesIcon: script$1g + }, + directives: { + ripple: Ripple + } +}; +var _hoisted_1$n = ["multiple", "accept", "disabled"]; +var _hoisted_2$g = ["files"]; +var _hoisted_3$d = ["accept", "disabled", "multiple"]; +function render$L(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Button = resolveComponent("Button"); + var _component_ProgressBar = resolveComponent("ProgressBar"); + var _component_Message = resolveComponent("Message"); + var _component_FileContent = resolveComponent("FileContent"); + return $options.isAdvanced ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [createBaseVNode("input", mergeProps({ + ref: "fileInput", + type: "file", + onChange: _cache[0] || (_cache[0] = function() { + return $options.onFileSelect && $options.onFileSelect.apply($options, arguments); + }), + multiple: _ctx.multiple, + accept: _ctx.accept, + disabled: $options.chooseDisabled + }, _ctx.ptm("input")), null, 16, _hoisted_1$n), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("header") + }, _ctx.ptm("header")), [renderSlot(_ctx.$slots, "header", { + files: $data.files, + uploadedFiles: $data.uploadedFiles, + chooseCallback: $options.choose, + uploadCallback: $options.uploader, + clearCallback: $options.clear + }, function() { + return [createVNode(_component_Button, mergeProps({ + label: $options.chooseButtonLabel, + "class": $options.chooseButtonClass, + style: _ctx.style, + disabled: _ctx.disabled, + unstyled: _ctx.unstyled, + onClick: $options.choose, + onKeydown: withKeys($options.choose, ["enter"]), + onFocus: $options.onFocus, + onBlur: $options.onBlur + }, _ctx.chooseButtonProps, { + pt: _ctx.ptm("pcChooseButton") + }), { + icon: withCtx(function(iconProps) { + return [renderSlot(_ctx.$slots, "chooseicon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.chooseIcon ? "span" : "PlusIcon"), mergeProps({ + "class": [iconProps["class"], _ctx.chooseIcon], + "aria-hidden": "true" + }, _ctx.ptm("pcChooseButton")["icon"]), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["label", "class", "style", "disabled", "unstyled", "onClick", "onKeydown", "onFocus", "onBlur", "pt"]), _ctx.showUploadButton ? (openBlock(), createBlock(_component_Button, mergeProps({ + key: 0, + "class": _ctx.cx("pcUploadButton"), + label: $options.uploadButtonLabel, + onClick: $options.uploader, + disabled: $options.uploadDisabled, + unstyled: _ctx.unstyled + }, _ctx.uploadButtonProps, { + pt: _ctx.ptm("pcUploadButton") + }), { + icon: withCtx(function(iconProps) { + return [renderSlot(_ctx.$slots, "uploadicon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.uploadIcon ? "span" : "UploadIcon"), mergeProps({ + "class": [iconProps["class"], _ctx.uploadIcon], + "aria-hidden": "true" + }, _ctx.ptm("pcUploadButton")["icon"], { + "data-pc-section": "uploadbuttonicon" + }), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "label", "onClick", "disabled", "unstyled", "pt"])) : createCommentVNode("", true), _ctx.showCancelButton ? (openBlock(), createBlock(_component_Button, mergeProps({ + key: 1, + "class": _ctx.cx("pcCancelButton"), + label: $options.cancelButtonLabel, + onClick: $options.clear, + disabled: $options.cancelDisabled, + unstyled: _ctx.unstyled + }, _ctx.cancelButtonProps, { + pt: _ctx.ptm("pcCancelButton") + }), { + icon: withCtx(function(iconProps) { + return [renderSlot(_ctx.$slots, "cancelicon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.cancelIcon ? "span" : "TimesIcon"), mergeProps({ + "class": [iconProps["class"], _ctx.cancelIcon], + "aria-hidden": "true" + }, _ctx.ptm("pcCancelButton")["icon"], { + "data-pc-section": "cancelbuttonicon" + }), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "label", "onClick", "disabled", "unstyled", "pt"])) : createCommentVNode("", true)]; + })], 16), createBaseVNode("div", mergeProps({ + ref: "content", + "class": _ctx.cx("content"), + onDragenter: _cache[1] || (_cache[1] = function() { + return $options.onDragEnter && $options.onDragEnter.apply($options, arguments); + }), + onDragover: _cache[2] || (_cache[2] = function() { + return $options.onDragOver && $options.onDragOver.apply($options, arguments); + }), + onDragleave: _cache[3] || (_cache[3] = function() { + return $options.onDragLeave && $options.onDragLeave.apply($options, arguments); + }), + onDrop: _cache[4] || (_cache[4] = function() { + return $options.onDrop && $options.onDrop.apply($options, arguments); + }) + }, _ctx.ptm("content"), { + "data-p-highlight": false + }), [renderSlot(_ctx.$slots, "content", { + files: $data.files, + uploadedFiles: $data.uploadedFiles, + removeUploadedFileCallback: $options.removeUploadedFile, + removeFileCallback: $options.remove, + progress: $data.progress, + messages: $data.messages + }, function() { + return [$options.hasFiles ? (openBlock(), createBlock(_component_ProgressBar, { + key: 0, + value: $data.progress, + showValue: false, + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcProgressbar") + }, null, 8, ["value", "unstyled", "pt"])) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList($data.messages, function(msg) { + return openBlock(), createBlock(_component_Message, { + key: msg, + severity: "error", + onClose: $options.onMessageClose, + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcMessage") + }, { + "default": withCtx(function() { + return [createTextVNode(toDisplayString(msg), 1)]; + }), + _: 2 + }, 1032, ["onClose", "unstyled", "pt"]); + }), 128)), $options.hasFiles ? (openBlock(), createElementBlock("div", { + key: 1, + "class": normalizeClass(_ctx.cx("fileList")) + }, [createVNode(_component_FileContent, { + files: $data.files, + onRemove: $options.remove, + badgeValue: $options.pendingLabel, + previewWidth: _ctx.previewWidth, + templates: _ctx.$slots, + unstyled: _ctx.unstyled, + pt: _ctx.pt + }, null, 8, ["files", "onRemove", "badgeValue", "previewWidth", "templates", "unstyled", "pt"])], 2)) : createCommentVNode("", true), $options.hasUploadedFiles ? (openBlock(), createElementBlock("div", { + key: 2, + "class": normalizeClass(_ctx.cx("fileList")) + }, [createVNode(_component_FileContent, { + files: $data.uploadedFiles, + onRemove: $options.removeUploadedFile, + badgeValue: $options.completedLabel, + badgeSeverity: "success", + previewWidth: _ctx.previewWidth, + templates: _ctx.$slots, + unstyled: _ctx.unstyled, + pt: _ctx.pt + }, null, 8, ["files", "onRemove", "badgeValue", "previewWidth", "templates", "unstyled", "pt"])], 2)) : createCommentVNode("", true)]; + }), _ctx.$slots.empty && !$options.hasFiles && !$options.hasUploadedFiles ? (openBlock(), createElementBlock("div", normalizeProps(mergeProps({ + key: 0 + }, _ctx.ptm("empty"))), [renderSlot(_ctx.$slots, "empty")], 16)) : createCommentVNode("", true)], 16)], 16)) : $options.isBasic ? (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [(openBlock(true), createElementBlock(Fragment, null, renderList($data.messages, function(msg) { + return openBlock(), createBlock(_component_Message, { + key: msg, + severity: "error", + onClose: $options.onMessageClose, + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcMessage") + }, { + "default": withCtx(function() { + return [createTextVNode(toDisplayString(msg), 1)]; + }), + _: 2 + }, 1032, ["onClose", "unstyled", "pt"]); + }), 128)), createVNode(_component_Button, mergeProps({ + label: $options.chooseButtonLabel, + "class": $options.chooseButtonClass, + style: _ctx.style, + disabled: _ctx.disabled, + unstyled: _ctx.unstyled, + onMouseup: $options.onBasicUploaderClick, + onKeydown: withKeys($options.choose, ["enter"]), + onFocus: $options.onFocus, + onBlur: $options.onBlur + }, _ctx.chooseButtonProps, { + pt: _ctx.ptm("pcChooseButton") + }), { + icon: withCtx(function(iconProps) { + return [renderSlot(_ctx.$slots, "chooseicon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.chooseIcon ? "span" : "PlusIcon"), mergeProps({ + "class": [iconProps["class"], _ctx.chooseIcon], + "aria-hidden": "true" + }, _ctx.ptm("pcChooseButton")["icon"]), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["label", "class", "style", "disabled", "unstyled", "onMouseup", "onKeydown", "onFocus", "onBlur", "pt"]), !_ctx.auto ? renderSlot(_ctx.$slots, "filelabel", { + key: 0, + "class": normalizeClass(_ctx.cx("filelabel")) + }, function() { + return [createBaseVNode("span", { + "class": normalizeClass(_ctx.cx("filelabel")), + files: $data.files + }, toDisplayString($options.basicFileChosenLabel), 11, _hoisted_2$g)]; + }) : createCommentVNode("", true), createBaseVNode("input", mergeProps({ + ref: "fileInput", + type: "file", + accept: _ctx.accept, + disabled: _ctx.disabled, + multiple: _ctx.multiple, + onChange: _cache[5] || (_cache[5] = function() { + return $options.onFileSelect && $options.onFileSelect.apply($options, arguments); + }), + onFocus: _cache[6] || (_cache[6] = function() { + return $options.onFocus && $options.onFocus.apply($options, arguments); + }), + onBlur: _cache[7] || (_cache[7] = function() { + return $options.onBlur && $options.onBlur.apply($options, arguments); + }) + }, _ctx.ptm("input")), null, 16, _hoisted_3$d)], 16)) : createCommentVNode("", true); +} +__name(render$L, "render$L"); +script$Q.render = render$L; +var classes$v = { + root: "p-fluid" +}; +var FluidStyle = BaseStyle.extend({ + name: "fluid", + classes: classes$v +}); +var script$1$v = { + name: "BaseFluid", + "extends": script$1d, + style: FluidStyle, + provide: /* @__PURE__ */ __name(function provide20() { + return { + $pcFluid: this, + $parentInstance: this + }; + }, "provide") +}; +var script$P = { + name: "Fluid", + "extends": script$1$v, + inheritAttrs: false +}; +function render$K(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default")], 16); +} +__name(render$K, "render$K"); +script$P.render = render$K; +var theme$r = /* @__PURE__ */ __name(function theme13(_ref) { + var dt = _ref.dt; + return "\n.p-iftalabel {\n display: block;\n position: relative;\n}\n\n.p-iftalabel label {\n position: absolute;\n pointer-events: none;\n top: ".concat(dt("iftalabel.top"), ";\n transition-property: all;\n transition-timing-function: ease;\n line-height: 1;\n font-size: ").concat(dt("iftalabel.font.size"), ";\n font-weight: ").concat(dt("iftalabel.font.weight"), ";\n inset-inline-start: ").concat(dt("iftalabel.position.x"), ";\n color: ").concat(dt("iftalabel.color"), ";\n transition-duration: ").concat(dt("iftalabel.transition.duration"), ";\n}\n\n.p-iftalabel .p-inputtext,\n.p-iftalabel .p-textarea,\n.p-iftalabel .p-select-label,\n.p-iftalabel .p-multiselect-label,\n.p-iftalabel .p-autocomplete-input-multiple,\n.p-iftalabel .p-cascadeselect-label,\n.p-iftalabel .p-treeselect-label {\n padding-block-start: ").concat(dt("iftalabel.input.padding.top"), ";\n padding-block-end: ").concat(dt("iftalabel.input.padding.bottom"), ";\n}\n\n.p-iftalabel:has(.p-invalid) label {\n color: ").concat(dt("iftalabel.invalid.color"), ";\n}\n\n.p-iftalabel:has(input:focus) label,\n.p-iftalabel:has(input:-webkit-autofill) label,\n.p-iftalabel:has(textarea:focus) label,\n.p-iftalabel:has(.p-inputwrapper-focus) label {\n color: ").concat(dt("iftalabel.focus.color"), ";\n}\n\n.p-iftalabel .p-inputicon {\n top: ").concat(dt("iftalabel.input.padding.top"), ";\n transform: translateY(25%);\n margin-top: 0;\n}\n"); +}, "theme"); +var classes$u = { + root: "p-iftalabel" +}; +var IftaLabelStyle = BaseStyle.extend({ + name: "iftalabel", + theme: theme$r, + classes: classes$u +}); +var script$1$u = { + name: "BaseIftaLabel", + "extends": script$1d, + style: IftaLabelStyle, + provide: /* @__PURE__ */ __name(function provide21() { + return { + $pcIftaLabel: this, + $parentInstance: this + }; + }, "provide") +}; +var script$O = { + name: "IftaLabel", + "extends": script$1$u, + inheritAttrs: false +}; +function render$J(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("span", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default")], 16); +} +__name(render$J, "render$J"); +script$O.render = render$J; +var script$N = { + name: "EyeIcon", + "extends": script$1m +}; +function render$I(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + d: "M0.0535499 7.25213C0.208567 7.59162 2.40413 12.4 7 12.4C11.5959 12.4 13.7914 7.59162 13.9465 7.25213C13.9487 7.2471 13.9506 7.24304 13.952 7.24001C13.9837 7.16396 14 7.08239 14 7.00001C14 6.91762 13.9837 6.83605 13.952 6.76001C13.9506 6.75697 13.9487 6.75292 13.9465 6.74788C13.7914 6.4084 11.5959 1.60001 7 1.60001C2.40413 1.60001 0.208567 6.40839 0.0535499 6.74788C0.0512519 6.75292 0.0494023 6.75697 0.048 6.76001C0.0163137 6.83605 0 6.91762 0 7.00001C0 7.08239 0.0163137 7.16396 0.048 7.24001C0.0494023 7.24304 0.0512519 7.2471 0.0535499 7.25213ZM7 11.2C3.664 11.2 1.736 7.92001 1.264 7.00001C1.736 6.08001 3.664 2.80001 7 2.80001C10.336 2.80001 12.264 6.08001 12.736 7.00001C12.264 7.92001 10.336 11.2 7 11.2ZM5.55551 9.16182C5.98308 9.44751 6.48576 9.6 7 9.6C7.68891 9.59789 8.349 9.32328 8.83614 8.83614C9.32328 8.349 9.59789 7.68891 9.59999 7C9.59999 6.48576 9.44751 5.98308 9.16182 5.55551C8.87612 5.12794 8.47006 4.7947 7.99497 4.59791C7.51988 4.40112 6.99711 4.34963 6.49276 4.44995C5.98841 4.55027 5.52513 4.7979 5.16152 5.16152C4.7979 5.52513 4.55027 5.98841 4.44995 6.49276C4.34963 6.99711 4.40112 7.51988 4.59791 7.99497C4.7947 8.47006 5.12794 8.87612 5.55551 9.16182ZM6.2222 5.83594C6.45243 5.6821 6.7231 5.6 7 5.6C7.37065 5.6021 7.72553 5.75027 7.98762 6.01237C8.24972 6.27446 8.39789 6.62934 8.4 7C8.4 7.27689 8.31789 7.54756 8.16405 7.77779C8.01022 8.00802 7.79157 8.18746 7.53575 8.29343C7.27994 8.39939 6.99844 8.42711 6.72687 8.37309C6.4553 8.31908 6.20584 8.18574 6.01005 7.98994C5.81425 7.79415 5.68091 7.54469 5.6269 7.27312C5.57288 7.00155 5.6006 6.72006 5.70656 6.46424C5.81253 6.20842 5.99197 5.98977 6.2222 5.83594Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$I, "render$I"); +script$N.render = render$I; +var script$M = { + name: "RefreshIcon", + "extends": script$1m +}; +function render$H(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + d: "M6.77051 5.96336C6.84324 5.99355 6.92127 6.00891 7.00002 6.00854C7.07877 6.00891 7.1568 5.99355 7.22953 5.96336C7.30226 5.93317 7.36823 5.88876 7.42357 5.83273L9.82101 3.43529C9.93325 3.32291 9.99629 3.17058 9.99629 3.01175C9.99629 2.85292 9.93325 2.70058 9.82101 2.5882L7.42357 0.190763C7.3687 0.131876 7.30253 0.0846451 7.22901 0.0518865C7.15549 0.019128 7.07612 0.00151319 6.99564 9.32772e-05C6.91517 -0.00132663 6.83523 0.0134773 6.7606 0.0436218C6.68597 0.0737664 6.61817 0.118634 6.56126 0.175548C6.50435 0.232462 6.45948 0.300257 6.42933 0.374888C6.39919 0.449519 6.38439 0.529456 6.38581 0.609933C6.38722 0.690409 6.40484 0.769775 6.4376 0.843296C6.47036 0.916817 6.51759 0.982986 6.57647 1.03786L7.95103 2.41241H6.99998C5.46337 2.41241 3.98969 3.02283 2.90314 4.10938C1.81659 5.19593 1.20618 6.66961 1.20618 8.20622C1.20618 9.74283 1.81659 11.2165 2.90314 12.3031C3.98969 13.3896 5.46337 14 6.99998 14C8.53595 13.9979 10.0084 13.3868 11.0945 12.3007C12.1806 11.2146 12.7917 9.74218 12.7938 8.20622C12.7938 8.04726 12.7306 7.89481 12.6182 7.78241C12.5058 7.67001 12.3534 7.60686 12.1944 7.60686C12.0355 7.60686 11.883 7.67001 11.7706 7.78241C11.6582 7.89481 11.5951 8.04726 11.5951 8.20622C11.5951 9.11504 11.3256 10.0035 10.8207 10.7591C10.3157 11.5148 9.59809 12.1037 8.75845 12.4515C7.9188 12.7993 6.99489 12.8903 6.10353 12.713C5.21217 12.5357 4.3934 12.0981 3.75077 11.4554C3.10813 10.8128 2.67049 9.99404 2.49319 9.10268C2.31589 8.21132 2.40688 7.2874 2.75468 6.44776C3.10247 5.60811 3.69143 4.89046 4.44709 4.38554C5.20275 3.88063 6.09116 3.61113 6.99998 3.61113H7.95098L6.57647 4.98564C6.46423 5.09802 6.40119 5.25035 6.40119 5.40918C6.40119 5.56801 6.46423 5.72035 6.57647 5.83273C6.63181 5.88876 6.69778 5.93317 6.77051 5.96336Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$H, "render$H"); +script$M.render = render$H; +var script$L = { + name: "SearchMinusIcon", + "extends": script$1m +}; +function render$G(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + d: "M6.0208 12.0411C4.83005 12.0411 3.66604 11.688 2.67596 11.0265C1.68589 10.3649 0.914216 9.42464 0.458534 8.32452C0.00285271 7.22441 -0.116374 6.01388 0.11593 4.84601C0.348235 3.67813 0.921637 2.60537 1.76363 1.76338C2.60562 0.921393 3.67838 0.34799 4.84625 0.115686C6.01412 -0.116618 7.22466 0.00260857 8.32477 0.45829C9.42488 0.913972 10.3652 1.68564 11.0267 2.67572C11.6883 3.66579 12.0414 4.8298 12.0414 6.02056C12.0395 7.41563 11.5542 8.76029 10.6783 9.8305L13.8244 12.9765C13.9367 13.089 13.9997 13.2414 13.9997 13.4003C13.9997 13.5592 13.9367 13.7116 13.8244 13.8241C13.769 13.8801 13.703 13.9245 13.6302 13.9548C13.5575 13.985 13.4794 14.0003 13.4006 14C13.3218 14.0003 13.2437 13.985 13.171 13.9548C13.0982 13.9245 13.0322 13.8801 12.9768 13.8241L9.83082 10.678C8.76059 11.5539 7.4159 12.0393 6.0208 12.0411ZM6.0208 1.20731C5.07199 1.20731 4.14449 1.48867 3.35559 2.0158C2.56669 2.54292 1.95181 3.29215 1.58872 4.16874C1.22562 5.04532 1.13062 6.00989 1.31572 6.94046C1.50083 7.87104 1.95772 8.72583 2.62863 9.39674C3.29954 10.0676 4.15433 10.5245 5.0849 10.7096C6.01548 10.8947 6.98005 10.7997 7.85663 10.4367C8.73322 10.0736 9.48244 9.45868 10.0096 8.66978C10.5367 7.88088 10.8181 6.95337 10.8181 6.00457C10.8181 4.73226 10.3126 3.51206 9.41297 2.6124C8.51331 1.71274 7.29311 1.20731 6.0208 1.20731ZM4.00591 6.60422H8.00362C8.16266 6.60422 8.31518 6.54104 8.42764 6.42859C8.5401 6.31613 8.60328 6.1636 8.60328 6.00456C8.60328 5.84553 8.5401 5.693 8.42764 5.58054C8.31518 5.46809 8.16266 5.40491 8.00362 5.40491H4.00591C3.84687 5.40491 3.69434 5.46809 3.58189 5.58054C3.46943 5.693 3.40625 5.84553 3.40625 6.00456C3.40625 6.1636 3.46943 6.31613 3.58189 6.42859C3.69434 6.54104 3.84687 6.60422 4.00591 6.60422Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$G, "render$G"); +script$L.render = render$G; +var script$K = { + name: "SearchPlusIcon", + "extends": script$1m +}; +function render$F(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + d: "M2.67596 11.0265C3.66604 11.688 4.83005 12.0411 6.0208 12.0411C6.81143 12.0411 7.59432 11.8854 8.32477 11.5828C8.86999 11.357 9.37802 11.0526 9.83311 10.6803L12.9768 13.8241C13.0322 13.8801 13.0982 13.9245 13.171 13.9548C13.2437 13.985 13.3218 14.0003 13.4006 14C13.4794 14.0003 13.5575 13.985 13.6302 13.9548C13.703 13.9245 13.769 13.8801 13.8244 13.8241C13.9367 13.7116 13.9997 13.5592 13.9997 13.4003C13.9997 13.2414 13.9367 13.089 13.8244 12.9765L10.6806 9.8328C11.0529 9.37773 11.3572 8.86972 11.5831 8.32452C11.8856 7.59408 12.0414 6.81119 12.0414 6.02056C12.0414 4.8298 11.6883 3.66579 11.0267 2.67572C10.3652 1.68564 9.42488 0.913972 8.32477 0.45829C7.22466 0.00260857 6.01412 -0.116618 4.84625 0.115686C3.67838 0.34799 2.60562 0.921393 1.76363 1.76338C0.921637 2.60537 0.348235 3.67813 0.11593 4.84601C-0.116374 6.01388 0.00285271 7.22441 0.458534 8.32452C0.914216 9.42464 1.68589 10.3649 2.67596 11.0265ZM3.35559 2.0158C4.14449 1.48867 5.07199 1.20731 6.0208 1.20731C7.29311 1.20731 8.51331 1.71274 9.41297 2.6124C10.3126 3.51206 10.8181 4.73226 10.8181 6.00457C10.8181 6.95337 10.5367 7.88088 10.0096 8.66978C9.48244 9.45868 8.73322 10.0736 7.85663 10.4367C6.98005 10.7997 6.01548 10.8947 5.0849 10.7096C4.15433 10.5245 3.29954 10.0676 2.62863 9.39674C1.95772 8.72583 1.50083 7.87104 1.31572 6.94046C1.13062 6.00989 1.22562 5.04532 1.58872 4.16874C1.95181 3.29215 2.56669 2.54292 3.35559 2.0158ZM6.00481 8.60309C5.84641 8.60102 5.69509 8.53718 5.58308 8.42517C5.47107 8.31316 5.40722 8.16183 5.40515 8.00344V6.60422H4.00591C3.84687 6.60422 3.69434 6.54104 3.58189 6.42859C3.46943 6.31613 3.40625 6.1636 3.40625 6.00456C3.40625 5.84553 3.46943 5.693 3.58189 5.58054C3.69434 5.46809 3.84687 5.40491 4.00591 5.40491H5.40515V4.00572C5.40515 3.84668 5.46833 3.69416 5.58079 3.5817C5.69324 3.46924 5.84577 3.40607 6.00481 3.40607C6.16385 3.40607 6.31637 3.46924 6.42883 3.5817C6.54129 3.69416 6.60447 3.84668 6.60447 4.00572V5.40491H8.00362C8.16266 5.40491 8.31518 5.46809 8.42764 5.58054C8.5401 5.693 8.60328 5.84553 8.60328 6.00456C8.60328 6.1636 8.5401 6.31613 8.42764 6.42859C8.31518 6.54104 8.16266 6.60422 8.00362 6.60422H6.60447V8.00344C6.60239 8.16183 6.53855 8.31316 6.42654 8.42517C6.31453 8.53718 6.1632 8.60102 6.00481 8.60309Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$F, "render$F"); +script$K.render = render$F; +var script$J = { + name: "UndoIcon", + "extends": script$1m +}; +function render$E(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + d: "M6.77042 5.96336C6.84315 5.99355 6.92118 6.00891 6.99993 6.00854C7.07868 6.00891 7.15671 5.99355 7.22944 5.96336C7.30217 5.93317 7.36814 5.88876 7.42348 5.83273C7.53572 5.72035 7.59876 5.56801 7.59876 5.40918C7.59876 5.25035 7.53572 5.09802 7.42348 4.98564L6.04897 3.61113H6.99998C7.9088 3.61113 8.79722 3.88063 9.55288 4.38554C10.3085 4.89046 10.8975 5.60811 11.2453 6.44776C11.5931 7.2874 11.6841 8.21132 11.5068 9.10268C11.3295 9.99404 10.8918 10.8128 10.2492 11.4554C9.60657 12.0981 8.7878 12.5357 7.89644 12.713C7.00508 12.8903 6.08116 12.7993 5.24152 12.4515C4.40188 12.1037 3.68422 11.5148 3.17931 10.7591C2.67439 10.0035 2.4049 9.11504 2.4049 8.20622C2.4049 8.04726 2.34175 7.89481 2.22935 7.78241C2.11695 7.67001 1.9645 7.60686 1.80554 7.60686C1.64658 7.60686 1.49413 7.67001 1.38172 7.78241C1.26932 7.89481 1.20618 8.04726 1.20618 8.20622C1.20829 9.74218 1.81939 11.2146 2.90548 12.3007C3.99157 13.3868 5.46402 13.9979 6.99998 14C8.5366 14 10.0103 13.3896 11.0968 12.3031C12.1834 11.2165 12.7938 9.74283 12.7938 8.20622C12.7938 6.66961 12.1834 5.19593 11.0968 4.10938C10.0103 3.02283 8.5366 2.41241 6.99998 2.41241H6.04892L7.42348 1.03786C7.48236 0.982986 7.5296 0.916817 7.56235 0.843296C7.59511 0.769775 7.61273 0.690409 7.61415 0.609933C7.61557 0.529456 7.60076 0.449519 7.57062 0.374888C7.54047 0.300257 7.49561 0.232462 7.43869 0.175548C7.38178 0.118634 7.31398 0.0737664 7.23935 0.0436218C7.16472 0.0134773 7.08478 -0.00132663 7.00431 9.32772e-05C6.92383 0.00151319 6.84447 0.019128 6.77095 0.0518865C6.69742 0.0846451 6.63126 0.131876 6.57638 0.190763L4.17895 2.5882C4.06671 2.70058 4.00366 2.85292 4.00366 3.01175C4.00366 3.17058 4.06671 3.32291 4.17895 3.43529L6.57638 5.83273C6.63172 5.88876 6.69769 5.93317 6.77042 5.96336Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$E, "render$E"); +script$J.render = render$E; +var theme$q = /* @__PURE__ */ __name(function theme14(_ref) { + var dt = _ref.dt; + return "\n.p-image-mask {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.p-image-preview {\n position: relative;\n display: inline-flex;\n line-height: 0;\n}\n\n.p-image-preview-mask {\n position: absolute;\n inset-inline-start: 0;\n inset-block-start: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.3s;\n border: 0 none;\n padding: 0;\n cursor: pointer;\n background: transparent;\n color: ".concat(dt("image.preview.mask.color"), ";\n transition: background ").concat(dt("image.transition.duration"), ";\n}\n\n.p-image-preview:hover > .p-image-preview-mask {\n opacity: 1;\n cursor: pointer;\n background: ").concat(dt("image.preview.mask.background"), ";\n}\n\n.p-image-preview-icon {\n font-size: ").concat(dt("image.preview.icon.size"), ";\n width: ").concat(dt("image.preview.icon.size"), ";\n height: ").concat(dt("image.preview.icon.size"), ";\n}\n\n.p-image-toolbar {\n position: absolute;\n inset-block-start: ").concat(dt("image.toolbar.position.top"), ";\n inset-inline-end: ").concat(dt("image.toolbar.position.right"), ";\n inset-inline-start: ").concat(dt("image.toolbar.position.left"), ";\n inset-block-end: ").concat(dt("image.toolbar.position.bottom"), ";\n display: flex;\n z-index: 1;\n padding: ").concat(dt("image.toolbar.padding"), ";\n background: ").concat(dt("image.toolbar.background"), ";\n backdrop-filter: blur(").concat(dt("image.toolbar.blur"), ");\n border-color: ").concat(dt("image.toolbar.border.color"), ";\n border-style: solid;\n border-width: ").concat(dt("image.toolbar.border.width"), ";\n border-radius: ").concat(dt("image.toolbar.border.radius"), ";\n gap: ").concat(dt("image.toolbar.gap"), ";\n}\n\n.p-image-action {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n color: ").concat(dt("image.action.color"), ";\n background: transparent;\n width: ").concat(dt("image.action.size"), ";\n height: ").concat(dt("image.action.size"), ";\n margin: 0;\n padding: 0;\n border: 0 none;\n cursor: pointer;\n user-select: none;\n border-radius: ").concat(dt("image.action.border.radius"), ";\n outline-color: transparent;\n transition: background ").concat(dt("image.transition.duration"), ", color ").concat(dt("image.transition.duration"), ", outline-color ").concat(dt("image.transition.duration"), ", box-shadow ").concat(dt("image.transition.duration"), ";\n}\n\n.p-image-action:hover {\n color: ").concat(dt("image.action.hover.color"), ";\n background: ").concat(dt("image.action.hover.background"), ";\n}\n\n.p-image-action:focus-visible {\n box-shadow: ").concat(dt("image.action.focus.ring.shadow"), ";\n outline: ").concat(dt("image.action.focus.ring.width"), " ").concat(dt("image.action.focus.ring.style"), " ").concat(dt("image.action.focus.ring.color"), ";\n outline-offset: ").concat(dt("image.action.focus.ring.offset"), ";\n}\n\n.p-image-action .p-icon {\n font-size: ").concat(dt("image.action.icon.size"), ";\n width: ").concat(dt("image.action.icon.size"), ";\n height: ").concat(dt("image.action.icon.size"), ";\n}\n\n.p-image-action.p-disabled {\n pointer-events: auto;\n}\n\n.p-image-original {\n transition: transform 0.15s;\n max-width: 100vw;\n max-height: 100vh;\n}\n\n.p-image-original-enter-active {\n transition: all 150ms cubic-bezier(0, 0, 0.2, 1);\n}\n\n.p-image-original-leave-active {\n transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.p-image-original-enter-from,\n.p-image-original-leave-to {\n opacity: 0;\n transform: scale(0.7);\n}\n"); +}, "theme"); +var classes$t = { + root: /* @__PURE__ */ __name(function root13(_ref2) { + var props = _ref2.props; + return ["p-image p-component", { + "p-image-preview": props.preview + }]; + }, "root"), + previewMask: "p-image-preview-mask", + previewIcon: "p-image-preview-icon", + mask: "p-image-mask p-overlay-mask p-overlay-mask-enter", + toolbar: "p-image-toolbar", + rotateRightButton: "p-image-action p-image-rotate-right-button", + rotateLeftButton: "p-image-action p-image-rotate-left-button", + zoomOutButton: /* @__PURE__ */ __name(function zoomOutButton(_ref3) { + var instance = _ref3.instance; + return ["p-image-action p-image-zoom-out-button", { + "p-disabled": instance.isZoomOutDisabled + }]; + }, "zoomOutButton"), + zoomInButton: /* @__PURE__ */ __name(function zoomInButton(_ref4) { + var instance = _ref4.instance; + return ["p-image-action p-image-zoom-in-button", { + "p-disabled": instance.isZoomInDisabled + }]; + }, "zoomInButton"), + closeButton: "p-image-action p-image-close-button", + original: "p-image-original" +}; +var ImageStyle = BaseStyle.extend({ + name: "image", + theme: theme$q, + classes: classes$t +}); +var script$1$t = { + name: "BaseImage", + "extends": script$1d, + props: { + preview: { + type: Boolean, + "default": false + }, + "class": { + type: null, + "default": null + }, + style: { + type: null, + "default": null + }, + imageStyle: { + type: null, + "default": null + }, + imageClass: { + type: null, + "default": null + }, + previewButtonProps: { + type: null, + "default": null + }, + indicatorIcon: { + type: String, + "default": void 0 + }, + previewIcon: { + type: String, + "default": void 0 + }, + zoomInDisabled: { + type: Boolean, + "default": false + }, + zoomOutDisabled: { + type: Boolean, + "default": false + } + }, + style: ImageStyle, + provide: /* @__PURE__ */ __name(function provide22() { + return { + $pcImage: this, + $parentInstance: this + }; + }, "provide") +}; +var script$I = { + name: "Image", + "extends": script$1$t, + inheritAttrs: false, + emits: ["show", "hide", "error"], + mask: null, + data: /* @__PURE__ */ __name(function data14() { + return { + maskVisible: false, + previewVisible: false, + rotate: 0, + scale: 1 + }; + }, "data"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount7() { + if (this.mask) { + ZIndex.clear(this.container); + } + }, "beforeUnmount"), + methods: { + maskRef: /* @__PURE__ */ __name(function maskRef2(el) { + this.mask = el; + }, "maskRef"), + toolbarRef: /* @__PURE__ */ __name(function toolbarRef(el) { + this.toolbarRef = el; + }, "toolbarRef"), + onImageClick: /* @__PURE__ */ __name(function onImageClick() { + var _this = this; + if (this.preview) { + blockBodyScroll(); + this.maskVisible = true; + setTimeout(function() { + _this.previewVisible = true; + }, 25); + } + }, "onImageClick"), + onPreviewImageClick: /* @__PURE__ */ __name(function onPreviewImageClick() { + this.previewClick = true; + }, "onPreviewImageClick"), + onMaskClick: /* @__PURE__ */ __name(function onMaskClick2(event2) { + var isBarActionsClicked = isAttributeEquals(event2.target, "data-pc-section-group", "action") || event2.target.closest('[data-pc-section-group="action"]'); + if (!this.previewClick && !isBarActionsClicked) { + this.previewVisible = false; + this.rotate = 0; + this.scale = 1; + } + this.previewClick = false; + }, "onMaskClick"), + onMaskKeydown: /* @__PURE__ */ __name(function onMaskKeydown(event2) { + var _this2 = this; + switch (event2.code) { + case "Escape": + this.hidePreview(); + setTimeout(function() { + focus(_this2.$refs.previewButton); + }, 200); + event2.preventDefault(); + break; + } + }, "onMaskKeydown"), + onError: /* @__PURE__ */ __name(function onError2() { + this.$emit("error"); + }, "onError"), + rotateRight: /* @__PURE__ */ __name(function rotateRight() { + this.rotate += 90; + this.previewClick = true; + }, "rotateRight"), + rotateLeft: /* @__PURE__ */ __name(function rotateLeft() { + this.rotate -= 90; + this.previewClick = true; + }, "rotateLeft"), + zoomIn: /* @__PURE__ */ __name(function zoomIn() { + this.scale = this.scale + 0.1; + this.previewClick = true; + }, "zoomIn"), + zoomOut: /* @__PURE__ */ __name(function zoomOut() { + this.scale = this.scale - 0.1; + this.previewClick = true; + }, "zoomOut"), + onBeforeEnter: /* @__PURE__ */ __name(function onBeforeEnter() { + ZIndex.set("modal", this.mask, this.$primevue.config.zIndex.modal); + }, "onBeforeEnter"), + onEnter: /* @__PURE__ */ __name(function onEnter2() { + this.focus(); + this.$emit("show"); + }, "onEnter"), + onBeforeLeave: /* @__PURE__ */ __name(function onBeforeLeave2() { + !this.isUnstyled && addClass(this.mask, "p-overlay-mask-leave"); + }, "onBeforeLeave"), + onLeave: /* @__PURE__ */ __name(function onLeave2() { + unblockBodyScroll(); + this.$emit("hide"); + }, "onLeave"), + onAfterLeave: /* @__PURE__ */ __name(function onAfterLeave2(el) { + ZIndex.clear(el); + this.maskVisible = false; + }, "onAfterLeave"), + focus: /* @__PURE__ */ __name(function focus2() { + var focusTarget = this.mask.querySelector("[autofocus]"); + if (focusTarget) { + focusTarget.focus(); + } + }, "focus"), + hidePreview: /* @__PURE__ */ __name(function hidePreview() { + this.previewVisible = false; + this.rotate = 0; + this.scale = 1; + unblockBodyScroll(); + }, "hidePreview") + }, + computed: { + containerClass: /* @__PURE__ */ __name(function containerClass2() { + return [this.cx("root"), this["class"]]; + }, "containerClass"), + rotateClass: /* @__PURE__ */ __name(function rotateClass() { + return "p-image-preview-rotate-" + this.rotate; + }, "rotateClass"), + imagePreviewStyle: /* @__PURE__ */ __name(function imagePreviewStyle() { + return { + transform: "rotate(" + this.rotate + "deg) scale(" + this.scale + ")" + }; + }, "imagePreviewStyle"), + isZoomInDisabled: /* @__PURE__ */ __name(function isZoomInDisabled() { + return this.zoomInDisabled || this.scale >= 1.5; + }, "isZoomInDisabled"), + isZoomOutDisabled: /* @__PURE__ */ __name(function isZoomOutDisabled() { + return this.zoomOutDisabled || this.scale <= 0.5; + }, "isZoomOutDisabled"), + rightAriaLabel: /* @__PURE__ */ __name(function rightAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.rotateRight : void 0; + }, "rightAriaLabel"), + leftAriaLabel: /* @__PURE__ */ __name(function leftAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.rotateLeft : void 0; + }, "leftAriaLabel"), + zoomInAriaLabel: /* @__PURE__ */ __name(function zoomInAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.zoomIn : void 0; + }, "zoomInAriaLabel"), + zoomOutAriaLabel: /* @__PURE__ */ __name(function zoomOutAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.zoomOut : void 0; + }, "zoomOutAriaLabel"), + zoomImageAriaLabel: /* @__PURE__ */ __name(function zoomImageAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.zoomImage : void 0; + }, "zoomImageAriaLabel"), + closeAriaLabel: /* @__PURE__ */ __name(function closeAriaLabel2() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.close : void 0; + }, "closeAriaLabel") + }, + components: { + Portal: script$1f, + EyeIcon: script$N, + RefreshIcon: script$M, + UndoIcon: script$J, + SearchMinusIcon: script$L, + SearchPlusIcon: script$K, + TimesIcon: script$1g + }, + directives: { + focustrap: FocusTrap + } +}; +function _typeof$h(o) { + "@babel/helpers - typeof"; + return _typeof$h = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$h(o); +} +__name(_typeof$h, "_typeof$h"); +function ownKeys$f(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$f, "ownKeys$f"); +function _objectSpread$f(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$f(Object(t2), true).forEach(function(r2) { + _defineProperty$g(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$f(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$f, "_objectSpread$f"); +function _defineProperty$g(e, r, t2) { + return (r = _toPropertyKey$g(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$g, "_defineProperty$g"); +function _toPropertyKey$g(t2) { + var i = _toPrimitive$g(t2, "string"); + return "symbol" == _typeof$h(i) ? i : i + ""; +} +__name(_toPropertyKey$g, "_toPropertyKey$g"); +function _toPrimitive$g(t2, r) { + if ("object" != _typeof$h(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$h(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$g, "_toPrimitive$g"); +var _hoisted_1$m = ["aria-label"]; +var _hoisted_2$f = ["aria-modal"]; +var _hoisted_3$c = ["aria-label"]; +var _hoisted_4$8 = ["aria-label"]; +var _hoisted_5$3 = ["disabled", "aria-label"]; +var _hoisted_6$1 = ["disabled", "aria-label"]; +var _hoisted_7$1 = ["aria-label"]; +var _hoisted_8 = ["src"]; +function render$D(_ctx, _cache, $props, $setup, $data, $options) { + var _component_RefreshIcon = resolveComponent("RefreshIcon"); + var _component_UndoIcon = resolveComponent("UndoIcon"); + var _component_SearchMinusIcon = resolveComponent("SearchMinusIcon"); + var _component_SearchPlusIcon = resolveComponent("SearchPlusIcon"); + var _component_TimesIcon = resolveComponent("TimesIcon"); + var _component_Portal = resolveComponent("Portal"); + var _directive_focustrap = resolveDirective("focustrap"); + return openBlock(), createElementBlock("span", mergeProps({ + "class": $options.containerClass, + style: _ctx.style + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "image", { + errorCallback: $options.onError + }, function() { + return [createBaseVNode("img", mergeProps({ + style: _ctx.imageStyle, + "class": _ctx.imageClass, + onError: _cache[0] || (_cache[0] = function() { + return $options.onError && $options.onError.apply($options, arguments); + }) + }, _objectSpread$f(_objectSpread$f({}, _ctx.$attrs), _ctx.ptm("image"))), null, 16)]; + }), _ctx.preview ? (openBlock(), createElementBlock("button", mergeProps({ + key: 0, + ref: "previewButton", + "aria-label": $options.zoomImageAriaLabel, + type: "button", + "class": _ctx.cx("previewMask"), + onClick: _cache[1] || (_cache[1] = function() { + return $options.onImageClick && $options.onImageClick.apply($options, arguments); + }) + }, _objectSpread$f(_objectSpread$f({}, _ctx.previewButtonProps), _ctx.ptm("previewMask"))), [renderSlot(_ctx.$slots, _ctx.$slots.previewicon ? "previewicon" : "indicatoricon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.previewIcon || _ctx.indicatorIcon ? "i" : "EyeIcon"), mergeProps({ + "class": _ctx.cx("previewIcon") + }, _ctx.ptm("previewIcon")), null, 16, ["class"]))]; + })], 16, _hoisted_1$m)) : createCommentVNode("", true), createVNode(_component_Portal, null, { + "default": withCtx(function() { + return [$data.maskVisible ? withDirectives((openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: $options.maskRef, + role: "dialog", + "class": _ctx.cx("mask"), + "aria-modal": $data.maskVisible, + onClick: _cache[8] || (_cache[8] = function() { + return $options.onMaskClick && $options.onMaskClick.apply($options, arguments); + }), + onKeydown: _cache[9] || (_cache[9] = function() { + return $options.onMaskKeydown && $options.onMaskKeydown.apply($options, arguments); + }) + }, _ctx.ptm("mask")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("toolbar") + }, _ctx.ptm("toolbar")), [createBaseVNode("button", mergeProps({ + "class": _ctx.cx("rotateRightButton"), + onClick: _cache[2] || (_cache[2] = function() { + return $options.rotateRight && $options.rotateRight.apply($options, arguments); + }), + type: "button", + "aria-label": $options.rightAriaLabel + }, _ctx.ptm("rotateRightButton"), { + "data-pc-group-section": "action" + }), [renderSlot(_ctx.$slots, "refresh", {}, function() { + return [createVNode(_component_RefreshIcon, normalizeProps(guardReactiveProps(_ctx.ptm("rotateRightIcon"))), null, 16)]; + })], 16, _hoisted_3$c), createBaseVNode("button", mergeProps({ + "class": _ctx.cx("rotateLeftButton"), + onClick: _cache[3] || (_cache[3] = function() { + return $options.rotateLeft && $options.rotateLeft.apply($options, arguments); + }), + type: "button", + "aria-label": $options.leftAriaLabel + }, _ctx.ptm("rotateLeftButton"), { + "data-pc-group-section": "action" + }), [renderSlot(_ctx.$slots, "undo", {}, function() { + return [createVNode(_component_UndoIcon, normalizeProps(guardReactiveProps(_ctx.ptm("rotateLeftIcon"))), null, 16)]; + })], 16, _hoisted_4$8), createBaseVNode("button", mergeProps({ + "class": _ctx.cx("zoomOutButton"), + onClick: _cache[4] || (_cache[4] = function() { + return $options.zoomOut && $options.zoomOut.apply($options, arguments); + }), + type: "button", + disabled: $options.isZoomOutDisabled, + "aria-label": $options.zoomOutAriaLabel + }, _ctx.ptm("zoomOutButton"), { + "data-pc-group-section": "action" + }), [renderSlot(_ctx.$slots, "zoomout", {}, function() { + return [createVNode(_component_SearchMinusIcon, normalizeProps(guardReactiveProps(_ctx.ptm("zoomOutIcon"))), null, 16)]; + })], 16, _hoisted_5$3), createBaseVNode("button", mergeProps({ + "class": _ctx.cx("zoomInButton"), + onClick: _cache[5] || (_cache[5] = function() { + return $options.zoomIn && $options.zoomIn.apply($options, arguments); + }), + type: "button", + disabled: $options.isZoomInDisabled, + "aria-label": $options.zoomInAriaLabel + }, _ctx.ptm("zoomInButton"), { + "data-pc-group-section": "action" + }), [renderSlot(_ctx.$slots, "zoomin", {}, function() { + return [createVNode(_component_SearchPlusIcon, normalizeProps(guardReactiveProps(_ctx.ptm("zoomInIcon"))), null, 16)]; + })], 16, _hoisted_6$1), createBaseVNode("button", mergeProps({ + "class": _ctx.cx("closeButton"), + type: "button", + onClick: _cache[6] || (_cache[6] = function() { + return $options.hidePreview && $options.hidePreview.apply($options, arguments); + }), + "aria-label": $options.closeAriaLabel, + autofocus: "" + }, _ctx.ptm("closeButton"), { + "data-pc-group-section": "action" + }), [renderSlot(_ctx.$slots, "close", {}, function() { + return [createVNode(_component_TimesIcon, normalizeProps(guardReactiveProps(_ctx.ptm("closeIcon"))), null, 16)]; + })], 16, _hoisted_7$1)], 16), createVNode(Transition, mergeProps({ + name: "p-image-original", + onBeforeEnter: $options.onBeforeEnter, + onEnter: $options.onEnter, + onLeave: $options.onLeave, + onBeforeLeave: $options.onBeforeLeave, + onAfterLeave: $options.onAfterLeave + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [$data.previewVisible ? (openBlock(), createElementBlock("div", normalizeProps(mergeProps({ + key: 0 + }, _ctx.ptm("originalContainer"))), [renderSlot(_ctx.$slots, _ctx.$slots.original ? "original" : "preview", { + "class": normalizeClass(_ctx.cx("original")), + style: normalizeStyle($options.imagePreviewStyle), + previewCallback: $options.onPreviewImageClick + }, function() { + return [createBaseVNode("img", mergeProps({ + src: _ctx.$attrs.src, + "class": _ctx.cx("original"), + style: $options.imagePreviewStyle, + onClick: _cache[7] || (_cache[7] = function() { + return $options.onPreviewImageClick && $options.onPreviewImageClick.apply($options, arguments); + }) + }, _ctx.ptm("original")), null, 16, _hoisted_8)]; + })], 16)) : createCommentVNode("", true)]; + }), + _: 3 + }, 16, ["onBeforeEnter", "onEnter", "onLeave", "onBeforeLeave", "onAfterLeave"])], 16, _hoisted_2$f)), [[_directive_focustrap]]) : createCommentVNode("", true)]; + }), + _: 3 + })], 16); +} +__name(render$D, "render$D"); +script$I.render = render$D; +var theme$p = /* @__PURE__ */ __name(function theme15(_ref) { + var dt = _ref.dt; + return "\n.p-imagecompare {\n position: relative;\n overflow: hidden;\n width: 100%;\n aspect-ratio: 16 / 9;\n}\n\n.p-imagecompare img {\n width: 100%;\n height: 100%;\n position: absolute;\n}\n\n.p-imagecompare img + img {\n clip-path: polygon(0 0, ".concat(dt("imagecompare.scope.x", "50%"), " 0, ").concat(dt("imagecompare.scope.x", "50%"), " 100%, 0 100%);\n}\n\n.p-imagecompare:dir(rtl) img + img {\n clip-path: polygon(calc(100% - ").concat(dt("imagecompare.scope.x", "50%"), ") 0, 100% 0, 100% 100%, calc(100% - ").concat(dt("imagecompare.scope.x", "50%"), ") 100%);\n}\n\n.p-imagecompare-slider {\n position: relative;\n -webkit-appearance: none;\n width: calc(100% + ").concat(dt("imagecompare.handle.size"), ");\n height: 100%;\n margin-inline-start: calc(-1 * calc(").concat(dt("imagecompare.handle.size"), " / 2));\n background-color: transparent;\n outline: none;\n transition: all ").concat(dt("imagecompare.handle.transition.duration"), ";\n}\n\n.p-imagecompare-slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n height: ").concat(dt("imagecompare.handle.size"), ";\n width: ").concat(dt("imagecompare.handle.size"), ";\n background: ").concat(dt("imagecompare.handle.background"), ";\n border: ").concat(dt("imagecompare.handle.border.width"), " solid ").concat(dt("imagecompare.handle.border.color"), ";\n border-radius: ").concat(dt("imagecompare.handle.border.radius"), ";\n background-size: contain;\n cursor: ew-resize;\n transition: all ").concat(dt("imagecompare.handle.transition.duration"), ";\n}\n\n.p-imagecompare-slider::-moz-range-thumb {\n height: ").concat(dt("imagecompare.handle.size"), ";\n width: ").concat(dt("imagecompare.handle.size"), ";\n background: ").concat(dt("imagecompare.handle.background"), ";\n border: ").concat(dt("imagecompare.handle.border.width"), " ").concat(dt("imagecompare.handle.border.style"), " ").concat(dt("imagecompare.handle.border.color"), ";\n border-radius: ").concat(dt("imagecompare.handle.border.radius"), ";\n background-size: contain;\n cursor: ew-resize;\n}\n\n.p-imagecompare-slider:focus-visible::-webkit-slider-thumb {\n box-shadow: ").concat(dt("imagecompare.handle.focus.ring.shadow"), ";\n outline: ").concat(dt("imagecompare.handle.focus.ring.width"), " ").concat(dt("imagecompare.handle.focus.ring.style"), " ").concat(dt("imagecompare.handle.focus.ring.color"), ";\n outline-offset: ").concat(dt("imagecompare.handle.focus.ring.offset"), ";\n}\n\n.p-imagecompare-slider:focus-visible::-moz-range-thumb {\n box-shadow: ").concat(dt("imagecompare.handle.focus.ring.shadow"), ";\n outline: ").concat(dt("imagecompare.handle.focus.ring.width"), " ").concat(dt("imagecompare.handle.focus.ring.style"), " ").concat(dt("imagecompare.handle.focus.ring.color"), ";\n outline-offset: ").concat(dt("imagecompare.handle.focus.ring.offset"), ";\n}\n\n.p-imagecompare-slider:hover {\n width: calc(100% + ").concat(dt("imagecompare.handle.hover.size"), ");\n margin-inline-start: calc(-1 * calc(").concat(dt("imagecompare.handle.hover.size"), " / 2));\n}\n\n.p-imagecompare-slider:hover::-webkit-slider-thumb {\n background: ").concat(dt("imagecompare.handle.hover.background"), ";\n border-color: ").concat(dt("imagecompare.handle.hover.border.color"), ";\n height: ").concat(dt("imagecompare.handle.hover.size"), ";\n width: ").concat(dt("imagecompare.handle.hover.size"), ";\n}\n\n.p-imagecompare-slider:hover::-moz-range-thumb {\n background: ").concat(dt("imagecompare.handle.hover.background"), ";\n border-color: ").concat(dt("imagecompare.handle.hover.border.color"), ";\n height: ").concat(dt("imagecompare.handle.hover.size"), ";\n width: ").concat(dt("imagecompare.handle.hover.size"), ";\n}\n"); +}, "theme"); +var classes$s = { + root: "p-imagecompare", + slider: "p-imagecompare-slider" +}; +var ImageCompareStyle = BaseStyle.extend({ + name: "imagecompare", + theme: theme$p, + classes: classes$s +}); +var script$1$s = { + name: "BaseImageCompare", + "extends": script$1d, + props: { + tabindex: { + type: Number, + "default": 0 + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + } + }, + style: ImageCompareStyle, + provide: /* @__PURE__ */ __name(function provide23() { + return { + $pcImageCompare: this, + $parentInstance: this + }; + }, "provide") +}; +var script$H = { + name: "ImageCompare", + "extends": script$1$s, + methods: { + onSlide: /* @__PURE__ */ __name(function onSlide(event2) { + var value2 = event2.target.value; + var image = event2.target.previousElementSibling; + setCSSProperty(image, $dt("imagecompare.scope.x").name, "".concat(value2, "%")); + }, "onSlide") + } +}; +var _hoisted_1$l = ["aria-labelledby", "aria-label"]; +function render$C(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root"), + "aria-labelledby": _ctx.ariaLabelledby, + "aria-label": _ctx.ariaLabel + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "left"), renderSlot(_ctx.$slots, "right"), createBaseVNode("input", mergeProps({ + type: "range", + min: "0", + max: "100", + value: "50", + onInput: _cache[0] || (_cache[0] = function() { + return $options.onSlide && $options.onSlide.apply($options, arguments); + }), + "class": _ctx.cx("slider") + }, _ctx.ptm("slider")), null, 16)], 16, _hoisted_1$l); +} +__name(render$C, "render$C"); +script$H.render = render$C; +var theme$o = /* @__PURE__ */ __name(function theme16(_ref) { + var dt = _ref.dt; + return "\n.p-inlinemessage {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: ".concat(dt("inlinemessage.padding"), ";\n border-radius: ").concat(dt("inlinemessage.border.radius"), ";\n gap: ").concat(dt("inlinemessage.gap"), ";\n}\n\n.p-inlinemessage-text {\n font-weight: ").concat(dt("inlinemessage.text.font.weight"), ";\n}\n\n.p-inlinemessage-icon {\n flex-shrink: 0;\n font-size: ").concat(dt("inlinemessage.icon.size"), ";\n width: ").concat(dt("inlinemessage.icon.size"), ";\n height: ").concat(dt("inlinemessage.icon.size"), ";\n}\n\n.p-inlinemessage-icon-only .p-inlinemessage-text {\n visibility: hidden;\n width: 0;\n}\n\n.p-inlinemessage-info {\n background: ").concat(dt("inlinemessage.info.background"), ";\n border: 1px solid ").concat(dt("inlinemessage.info.border.color"), ";\n color: ").concat(dt("inlinemessage.info.color"), ";\n box-shadow: ").concat(dt("inlinemessage.info.shadow"), ";\n}\n\n.p-inlinemessage-info .p-inlinemessage-icon {\n color: ").concat(dt("inlinemessage.info.color"), ";\n}\n\n.p-inlinemessage-success {\n background: ").concat(dt("inlinemessage.success.background"), ";\n border: 1px solid ").concat(dt("inlinemessage.success.border.color"), ";\n color: ").concat(dt("inlinemessage.success.color"), ";\n box-shadow: ").concat(dt("inlinemessage.success.shadow"), ";\n}\n\n.p-inlinemessage-success .p-inlinemessage-icon {\n color: ").concat(dt("inlinemessage.success.color"), ";\n}\n\n.p-inlinemessage-warn {\n background: ").concat(dt("inlinemessage.warn.background"), ";\n border: 1px solid ").concat(dt("inlinemessage.warn.border.color"), ";\n color: ").concat(dt("inlinemessage.warn.color"), ";\n box-shadow: ").concat(dt("inlinemessage.warn.shadow"), ";\n}\n\n.p-inlinemessage-warn .p-inlinemessage-icon {\n color: ").concat(dt("inlinemessage.warn.color"), ";\n}\n\n.p-inlinemessage-error {\n background: ").concat(dt("inlinemessage.error.background"), ";\n border: 1px solid ").concat(dt("inlinemessage.error.border.color"), ";\n color: ").concat(dt("inlinemessage.error.color"), ";\n box-shadow: ").concat(dt("inlinemessage.error.shadow"), ";\n}\n\n.p-inlinemessage-error .p-inlinemessage-icon {\n color: ").concat(dt("inlinemessage.error.color"), ";\n}\n\n.p-inlinemessage-secondary {\n background: ").concat(dt("inlinemessage.secondary.background"), ";\n border: 1px solid ").concat(dt("inlinemessage.secondary.border.color"), ";\n color: ").concat(dt("inlinemessage.secondary.color"), ";\n box-shadow: ").concat(dt("inlinemessage.secondary.shadow"), ";\n}\n\n.p-inlinemessage-secondary .p-inlinemessage-icon {\n color: ").concat(dt("inlinemessage.secondary.color"), ";\n}\n\n.p-inlinemessage-contrast {\n background: ").concat(dt("inlinemessage.contrast.background"), ";\n border: 1px solid ").concat(dt("inlinemessage.contrast.border.color"), ";\n color: ").concat(dt("inlinemessage.contrast.color"), ";\n box-shadow: ").concat(dt("inlinemessage.contrast.shadow"), ";\n}\n\n.p-inlinemessage-contrast .p-inlinemessage-icon {\n color: ").concat(dt("inlinemessage.contrast.color"), ";\n}\n"); +}, "theme"); +var classes$r = { + root: /* @__PURE__ */ __name(function root14(_ref2) { + var props = _ref2.props, instance = _ref2.instance; + return ["p-inlinemessage p-component p-inlinemessage-" + props.severity, { + "p-inlinemessage-icon-only": !instance.$slots["default"] + }]; + }, "root"), + icon: /* @__PURE__ */ __name(function icon(_ref3) { + var props = _ref3.props; + return ["p-inlinemessage-icon", props.icon]; + }, "icon"), + text: "p-inlinemessage-text" +}; +var InlineMessageStyle = BaseStyle.extend({ + name: "inlinemessage", + theme: theme$o, + classes: classes$r +}); +var script$1$r = { + name: "BaseInlineMessage", + "extends": script$1d, + props: { + severity: { + type: String, + "default": "error" + }, + icon: { + type: String, + "default": void 0 + } + }, + style: InlineMessageStyle, + provide: /* @__PURE__ */ __name(function provide24() { + return { + $pcInlineMessage: this, + $parentInstance: this + }; + }, "provide") +}; +var script$G = { + name: "InlineMessage", + "extends": script$1$r, + inheritAttrs: false, + timeout: null, + data: /* @__PURE__ */ __name(function data15() { + return { + visible: true + }; + }, "data"), + mounted: /* @__PURE__ */ __name(function mounted18() { + var _this = this; + if (!this.sticky) { + setTimeout(function() { + _this.visible = false; + }, this.life); + } + }, "mounted"), + computed: { + iconComponent: /* @__PURE__ */ __name(function iconComponent() { + return { + info: script$1C, + success: script$1D, + warn: script$1E, + error: script$1F + }[this.severity]; + }, "iconComponent") + } +}; +function render$B(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + role: "alert", + "aria-live": "assertive", + "aria-atomic": "true", + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "icon", {}, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.icon ? "span" : $options.iconComponent), mergeProps({ + "class": _ctx.cx("icon") + }, _ctx.ptm("icon")), null, 16, ["class"]))]; + }), _ctx.$slots["default"] ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("text") + }, _ctx.ptm("text")), [renderSlot(_ctx.$slots, "default")], 16)) : createCommentVNode("", true)], 16); +} +__name(render$B, "render$B"); +script$G.render = render$B; +var theme$n = /* @__PURE__ */ __name(function theme17(_ref) { + var dt = _ref.dt; + return "\n.p-inplace-display {\n display: inline-block;\n cursor: pointer;\n border: 1px solid transparent;\n padding: ".concat(dt("inplace.padding"), ";\n border-radius: ").concat(dt("inplace.border.radius"), ";\n transition: background ").concat(dt("inplace.transition.duration"), ", color ").concat(dt("inplace.transition.duration"), ", outline-color ").concat(dt("inplace.transition.duration"), ", box-shadow ").concat(dt("inplace.transition.duration"), ";\n outline-color: transparent;\n}\n\n.p-inplace-display:not(.p-disabled):hover {\n background: ").concat(dt("inplace.display.hover.background"), ";\n color: ").concat(dt("inplace.display.hover.color"), ";\n}\n\n.p-inplace-display:focus-visible {\n box-shadow: ").concat(dt("inplace.focus.ring.shadow"), ";\n outline: ").concat(dt("inplace.focus.ring.width"), " ").concat(dt("inplace.focus.ring.style"), " ").concat(dt("inplace.focus.ring.color"), ";\n outline-offset: ").concat(dt("inplace.focus.ring.offset"), ";\n}\n\n.p-inplace-content {\n display: block;\n}\n"); +}, "theme"); +var classes$q = { + root: "p-inplace p-component", + display: /* @__PURE__ */ __name(function display(_ref2) { + var props = _ref2.props; + return ["p-inplace-display", { + "p-disabled": props.disabled + }]; + }, "display"), + content: "p-inplace-content" +}; +var InplaceStyle = BaseStyle.extend({ + name: "inplace", + theme: theme$n, + classes: classes$q +}); +var script$1$q = { + name: "BaseInplace", + "extends": script$1d, + props: { + active: { + type: Boolean, + "default": false + }, + disabled: { + type: Boolean, + "default": false + }, + displayProps: { + type: null, + "default": null + } + }, + style: InplaceStyle, + provide: /* @__PURE__ */ __name(function provide25() { + return { + $pcInplace: this, + $parentInstance: this + }; + }, "provide") +}; +var script$F = { + name: "Inplace", + "extends": script$1$q, + inheritAttrs: false, + emits: ["open", "close", "update:active"], + data: /* @__PURE__ */ __name(function data16() { + return { + d_active: this.active + }; + }, "data"), + watch: { + active: /* @__PURE__ */ __name(function active2(newValue) { + this.d_active = newValue; + }, "active") + }, + methods: { + open: /* @__PURE__ */ __name(function open(event2) { + if (this.disabled) { + return; + } + this.d_active = true; + this.$emit("open", event2); + this.$emit("update:active", true); + }, "open"), + close: /* @__PURE__ */ __name(function close(event2) { + var _this = this; + this.d_active = false; + this.$emit("close", event2); + this.$emit("update:active", false); + setTimeout(function() { + _this.$refs.display.focus(); + }, 0); + }, "close") + } +}; +function _typeof$g(o) { + "@babel/helpers - typeof"; + return _typeof$g = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$g(o); +} +__name(_typeof$g, "_typeof$g"); +function ownKeys$e(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$e, "ownKeys$e"); +function _objectSpread$e(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$e(Object(t2), true).forEach(function(r2) { + _defineProperty$f(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$e(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$e, "_objectSpread$e"); +function _defineProperty$f(e, r, t2) { + return (r = _toPropertyKey$f(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$f, "_defineProperty$f"); +function _toPropertyKey$f(t2) { + var i = _toPrimitive$f(t2, "string"); + return "symbol" == _typeof$g(i) ? i : i + ""; +} +__name(_toPropertyKey$f, "_toPropertyKey$f"); +function _toPrimitive$f(t2, r) { + if ("object" != _typeof$g(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$g(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$f, "_toPrimitive$f"); +var _hoisted_1$k = ["tabindex"]; +function render$A(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root"), + "aria-live": "polite" + }, _ctx.ptmi("root")), [!$data.d_active ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: "display", + "class": _ctx.cx("display"), + tabindex: _ctx.$attrs.tabindex || "0", + role: "button", + onClick: _cache[0] || (_cache[0] = function() { + return $options.open && $options.open.apply($options, arguments); + }), + onKeydown: _cache[1] || (_cache[1] = withKeys(function() { + return $options.open && $options.open.apply($options, arguments); + }, ["enter"])) + }, _objectSpread$e(_objectSpread$e({}, _ctx.displayProps), _ctx.ptm("display"))), [renderSlot(_ctx.$slots, "display")], 16, _hoisted_1$k)) : (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": _ctx.cx("content") + }, _ctx.ptm("content")), [renderSlot(_ctx.$slots, "content", { + closeCallback: $options.close + })], 16))], 16); +} +__name(render$A, "render$A"); +script$F.render = render$A; +var theme$m = /* @__PURE__ */ __name(function theme18(_ref) { + var dt = _ref.dt; + return "\n.p-inputgroup,\n.p-inputgroup .p-iconfield,\n.p-inputgroup .p-floatlabel,\n.p-inputgroup .p-iftalabel {\n display: flex;\n align-items: stretch;\n width: 100%;\n}\n\n.p-inputgroup .p-inputtext,\n.p-inputgroup .p-inputwrapper {\n flex: 1 1 auto;\n width: 1%;\n}\n\n.p-inputgroupaddon {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ".concat(dt("inputgroup.addon.padding"), ";\n background: ").concat(dt("inputgroup.addon.background"), ";\n color: ").concat(dt("inputgroup.addon.color"), ";\n border-block-start: 1px solid ").concat(dt("inputgroup.addon.border.color"), ";\n border-block-end: 1px solid ").concat(dt("inputgroup.addon.border.color"), ";\n min-width: ").concat(dt("inputgroup.addon.min.width"), ";\n}\n\n.p-inputgroupaddon:first-child,\n.p-inputgroupaddon + .p-inputgroupaddon {\n border-inline-start: 1px solid ").concat(dt("inputgroup.addon.border.color"), ";\n}\n\n.p-inputgroupaddon:last-child {\n border-inline-end: 1px solid ").concat(dt("inputgroup.addon.border.color"), ";\n}\n\n.p-inputgroupaddon:has(.p-button) {\n padding: 0;\n overflow: hidden;\n}\n\n.p-inputgroupaddon .p-button {\n border-radius: 0;\n}\n\n.p-inputgroup > .p-component,\n.p-inputgroup > .p-inputwrapper > .p-component,\n.p-inputgroup > .p-iconfield > .p-component,\n.p-inputgroup > .p-floatlabel > .p-component,\n.p-inputgroup > .p-floatlabel > .p-inputwrapper > .p-component,\n.p-inputgroup > .p-iftalabel > .p-component,\n.p-inputgroup > .p-iftalabel > .p-inputwrapper > .p-component {\n border-radius: 0;\n margin: 0;\n}\n\n.p-inputgroupaddon:first-child,\n.p-inputgroup > .p-component:first-child,\n.p-inputgroup > .p-inputwrapper:first-child > .p-component,\n.p-inputgroup > .p-iconfield:first-child > .p-component,\n.p-inputgroup > .p-floatlabel:first-child > .p-component,\n.p-inputgroup > .p-floatlabel:first-child > .p-inputwrapper > .p-component,\n.p-inputgroup > .p-iftalabel:first-child > .p-component,\n.p-inputgroup > .p-iftalabel:first-child > .p-inputwrapper > .p-component {\n border-start-start-radius: ").concat(dt("inputgroup.addon.border.radius"), ";\n border-end-start-radius: ").concat(dt("inputgroup.addon.border.radius"), ";\n}\n\n.p-inputgroupaddon:last-child,\n.p-inputgroup > .p-component:last-child,\n.p-inputgroup > .p-inputwrapper:last-child > .p-component,\n.p-inputgroup > .p-iconfield:last-child > .p-component,\n.p-inputgroup > .p-floatlabel:last-child > .p-component,\n.p-inputgroup > .p-floatlabel:last-child > .p-inputwrapper > .p-component,\n.p-inputgroup > .p-iftalabel:last-child > .p-component,\n.p-inputgroup > .p-iftalabel:last-child > .p-inputwrapper > .p-component {\n border-start-end-radius: ").concat(dt("inputgroup.addon.border.radius"), ";\n border-end-end-radius: ").concat(dt("inputgroup.addon.border.radius"), ";\n}\n\n.p-inputgroup .p-component:focus,\n.p-inputgroup .p-component.p-focus,\n.p-inputgroup .p-inputwrapper-focus,\n.p-inputgroup .p-component:focus ~ label,\n.p-inputgroup .p-component.p-focus ~ label,\n.p-inputgroup .p-inputwrapper-focus ~ label {\n z-index: 1;\n}\n\n.p-inputgroup > .p-button:not(.p-button-icon-only) {\n width: auto;\n}\n\n.p-inputgroup .p-iconfield + .p-iconfield .p-inputtext {\n border-inline-start: 0;\n}\n"); +}, "theme"); +var classes$p = { + root: "p-inputgroup" +}; +var InputGroupStyle = BaseStyle.extend({ + name: "inputgroup", + theme: theme$m, + classes: classes$p +}); +var script$1$p = { + name: "BaseInputGroup", + "extends": script$1d, + style: InputGroupStyle, + provide: /* @__PURE__ */ __name(function provide26() { + return { + $pcInputGroup: this, + $parentInstance: this + }; + }, "provide") +}; +var script$E = { + name: "InputGroup", + "extends": script$1$p, + inheritAttrs: false +}; +function render$z(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default")], 16); +} +__name(render$z, "render$z"); +script$E.render = render$z; +var classes$o = { + root: "p-inputgroupaddon" +}; +var InputGroupAddonStyle = BaseStyle.extend({ + name: "inputgroupaddon", + classes: classes$o +}); +var script$1$o = { + name: "BaseInputGroupAddon", + "extends": script$1d, + style: InputGroupAddonStyle, + provide: /* @__PURE__ */ __name(function provide27() { + return { + $pcInputGroupAddon: this, + $parentInstance: this + }; + }, "provide") +}; +var script$D = { + name: "InputGroupAddon", + "extends": script$1$o, + inheritAttrs: false +}; +function render$y(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default")], 16); +} +__name(render$y, "render$y"); +script$D.render = render$y; +var classes$n = { + root: /* @__PURE__ */ __name(function root15(_ref) { + var instance = _ref.instance; + return ["p-inputmask", { + "p-filled": instance.$filled + }]; + }, "root") +}; +var InputMaskStyle = BaseStyle.extend({ + name: "inputmask", + classes: classes$n +}); +var script$1$n = { + name: "BaseInputMask", + "extends": script$1n, + props: { + slotChar: { + type: String, + "default": "_" + }, + id: { + type: String, + "default": null + }, + "class": { + type: [String, Object], + "default": null + }, + mask: { + type: String, + "default": null + }, + placeholder: { + type: String, + "default": null + }, + autoClear: { + type: Boolean, + "default": true + }, + unmask: { + type: Boolean, + "default": false + }, + readonly: { + type: Boolean, + "default": false + } + }, + style: InputMaskStyle, + provide: /* @__PURE__ */ __name(function provide28() { + return { + $pcInputMask: this, + $parentInstance: this + }; + }, "provide") +}; +var script$C = { + name: "InputMask", + "extends": script$1$n, + inheritAttrs: false, + emits: ["focus", "blur", "keydown", "complete", "keypress", "paste"], + inject: { + $pcFluid: { + "default": null + } + }, + data: /* @__PURE__ */ __name(function data17() { + return { + currentVal: "" + }; + }, "data"), + watch: { + mask: /* @__PURE__ */ __name(function mask3(newMask, oldMask) { + if (oldMask !== newMask) { + this.initMask(); + } + }, "mask") + }, + mounted: /* @__PURE__ */ __name(function mounted19() { + this.initMask(); + }, "mounted"), + updated: /* @__PURE__ */ __name(function updated4() { + if (this.isValueUpdated()) { + this.updateValue(); + } + }, "updated"), + methods: { + onInput: /* @__PURE__ */ __name(function onInput3(event2) { + if (!event2.isComposing) { + if (this.androidChrome) this.handleAndroidInput(event2); + else this.handleInputChange(event2); + this.updateModelValue(event2.target.value); + } + }, "onInput"), + onFocus: /* @__PURE__ */ __name(function onFocus6(event2) { + var _this = this; + if (this.readonly) { + return; + } + this.focus = true; + clearTimeout(this.caretTimeoutId); + var pos; + this.focusText = this.$el.value; + pos = this.checkVal(); + this.caretTimeoutId = setTimeout(function() { + if (_this.$el !== document.activeElement) { + return; + } + _this.writeBuffer(); + if (pos === _this.mask.replace("?", "").length) { + _this.caret(0, pos); + } else { + _this.caret(pos); + } + }, 10); + this.$emit("focus", event2); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur5(event2) { + var _this$formField$onBlu, _this$formField; + this.focus = false; + this.checkVal(); + this.updateModelValue(event2.target.value); + if (this.$el.value !== this.focusText) { + var e = document.createEvent("HTMLEvents"); + e.initEvent("change", true, false); + this.$el.dispatchEvent(e); + } + this.$emit("blur", event2); + (_this$formField$onBlu = (_this$formField = this.formField).onBlur) === null || _this$formField$onBlu === void 0 || _this$formField$onBlu.call(_this$formField, event2); + }, "onBlur"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown5(event2) { + if (this.readonly) { + return; + } + var k = event2.code, pos, begin, end; + var iPhone = /iphone/i.test(getUserAgent()); + this.oldVal = this.$el.value; + if (k === "Backspace" || k === "Delete" || iPhone && k === "Escape") { + pos = this.caret(); + begin = pos.begin; + end = pos.end; + if (end - begin === 0) { + begin = k !== "Delete" ? this.seekPrev(begin) : end = this.seekNext(begin - 1); + end = k === "Delete" ? this.seekNext(end) : end; + } + this.clearBuffer(begin, end); + this.shiftL(begin, end - 1); + this.updateModelValue(event2.target.value); + event2.preventDefault(); + } else if (k === "Enter") { + this.$el.blur(); + this.updateModelValue(event2.target.value); + } else if (k === "Escape") { + this.$el.value = this.focusText; + this.caret(0, this.checkVal()); + this.updateModelValue(event2.target.value); + event2.preventDefault(); + } + this.$emit("keydown", event2); + }, "onKeyDown"), + onKeyPress: /* @__PURE__ */ __name(function onKeyPress(event2) { + var _this2 = this; + if (this.readonly) { + return; + } + var k = event2.code, pos = this.caret(), p, c, next, completed; + if (event2.ctrlKey || event2.altKey || event2.metaKey || event2.shiftKey || event2.key === "CapsLock" || event2.key === "Escape" || event2.key === "Tab") { + return; + } else if (k && k !== "Enter") { + if (pos.end - pos.begin !== 0) { + this.clearBuffer(pos.begin, pos.end); + this.shiftL(pos.begin, pos.end - 1); + } + p = this.seekNext(pos.begin - 1); + if (p < this.len) { + c = event2.key; + if (this.tests[p].test(c)) { + this.shiftR(p); + this.buffer[p] = c; + this.writeBuffer(); + next = this.seekNext(p); + if (/android/i.test(getUserAgent())) { + var proxy = /* @__PURE__ */ __name(function proxy2() { + _this2.caret(next); + }, "proxy"); + setTimeout(proxy, 0); + } else { + this.caret(next); + } + if (pos.begin <= this.lastRequiredNonMaskPos) { + completed = this.isCompleted(); + } + } + } + event2.preventDefault(); + } + this.updateModelValue(event2.target.value); + if (completed) { + this.$emit("complete", event2); + } + this.$emit("keypress", event2); + }, "onKeyPress"), + onPaste: /* @__PURE__ */ __name(function onPaste2(event2) { + this.handleInputChange(event2); + this.$emit("paste", event2); + }, "onPaste"), + caret: /* @__PURE__ */ __name(function caret(first3, last) { + var range, begin, end; + if (!this.$el.offsetParent || this.$el !== document.activeElement) { + return; + } + if (typeof first3 === "number") { + begin = first3; + end = typeof last === "number" ? last : begin; + if (this.$el.setSelectionRange) { + this.$el.setSelectionRange(begin, end); + } else if (this.$el["createTextRange"]) { + range = this.$el["createTextRange"](); + range.collapse(true); + range.moveEnd("character", end); + range.moveStart("character", begin); + range.select(); + } + } else { + if (this.$el.setSelectionRange) { + begin = this.$el.selectionStart; + end = this.$el.selectionEnd; + } else if (document["selection"] && document["selection"].createRange) { + range = document["selection"].createRange(); + begin = 0 - range.duplicate().moveStart("character", -1e5); + end = begin + range.text.length; + } + return { + begin, + end + }; + } + }, "caret"), + isCompleted: /* @__PURE__ */ __name(function isCompleted() { + for (var i = this.firstNonMaskPos; i <= this.lastRequiredNonMaskPos; i++) { + if (this.tests[i] && this.buffer[i] === this.getPlaceholder(i)) { + return false; + } + } + return true; + }, "isCompleted"), + getPlaceholder: /* @__PURE__ */ __name(function getPlaceholder(i) { + if (i < this.slotChar.length) { + return this.slotChar.charAt(i); + } + return this.slotChar.charAt(0); + }, "getPlaceholder"), + seekNext: /* @__PURE__ */ __name(function seekNext(pos) { + while (++pos < this.len && !this.tests[pos]) ; + return pos; + }, "seekNext"), + seekPrev: /* @__PURE__ */ __name(function seekPrev(pos) { + while (--pos >= 0 && !this.tests[pos]) ; + return pos; + }, "seekPrev"), + shiftL: /* @__PURE__ */ __name(function shiftL(begin, end) { + var i, j; + if (begin < 0) { + return; + } + for (i = begin, j = this.seekNext(end); i < this.len; i++) { + if (this.tests[i]) { + if (j < this.len && this.tests[i].test(this.buffer[j])) { + this.buffer[i] = this.buffer[j]; + this.buffer[j] = this.getPlaceholder(j); + } else { + break; + } + j = this.seekNext(j); + } + } + this.writeBuffer(); + this.caret(Math.max(this.firstNonMaskPos, begin)); + }, "shiftL"), + shiftR: /* @__PURE__ */ __name(function shiftR(pos) { + var i, c, j, t2; + for (i = pos, c = this.getPlaceholder(pos); i < this.len; i++) { + if (this.tests[i]) { + j = this.seekNext(i); + t2 = this.buffer[i]; + this.buffer[i] = c; + if (j < this.len && this.tests[j].test(t2)) { + c = t2; + } else { + break; + } + } + } + }, "shiftR"), + handleAndroidInput: /* @__PURE__ */ __name(function handleAndroidInput(event2) { + var curVal = this.$el.value; + var pos = this.caret(); + if (this.oldVal && this.oldVal.length && this.oldVal.length > curVal.length) { + this.checkVal(true); + while (pos.begin > 0 && !this.tests[pos.begin - 1]) pos.begin--; + if (pos.begin === 0) { + while (pos.begin < this.firstNonMaskPos && !this.tests[pos.begin]) pos.begin++; + } + this.caret(pos.begin, pos.begin); + } else { + this.checkVal(true); + while (pos.begin < this.len && !this.tests[pos.begin]) pos.begin++; + this.caret(pos.begin, pos.begin); + } + if (this.isCompleted()) { + this.$emit("complete", event2); + } + }, "handleAndroidInput"), + clearBuffer: /* @__PURE__ */ __name(function clearBuffer(start, end) { + var i; + for (i = start; i < end && i < this.len; i++) { + if (this.tests[i]) { + this.buffer[i] = this.getPlaceholder(i); + } + } + }, "clearBuffer"), + writeBuffer: /* @__PURE__ */ __name(function writeBuffer() { + this.$el.value = this.buffer.join(""); + }, "writeBuffer"), + checkVal: /* @__PURE__ */ __name(function checkVal(allow) { + this.isValueChecked = true; + var test = this.$el.value, lastMatch = -1, i, c, pos; + for (i = 0, pos = 0; i < this.len; i++) { + if (this.tests[i]) { + this.buffer[i] = this.getPlaceholder(i); + while (pos++ < test.length) { + c = test.charAt(pos - 1); + if (this.tests[i].test(c)) { + this.buffer[i] = c; + lastMatch = i; + break; + } + } + if (pos > test.length) { + this.clearBuffer(i + 1, this.len); + break; + } + } else { + if (this.buffer[i] === test.charAt(pos)) { + pos++; + } + if (i < this.partialPosition) { + lastMatch = i; + } + } + } + if (allow) { + this.writeBuffer(); + } else if (lastMatch + 1 < this.partialPosition) { + if (this.autoClear || this.buffer.join("") === this.defaultBuffer) { + if (this.$el.value) this.$el.value = ""; + this.clearBuffer(0, this.len); + } else { + this.writeBuffer(); + } + } else { + this.writeBuffer(); + this.$el.value = this.$el.value.substring(0, lastMatch + 1); + } + return this.partialPosition ? i : this.firstNonMaskPos; + }, "checkVal"), + handleInputChange: /* @__PURE__ */ __name(function handleInputChange(event2) { + var isPasteEvent = event2.type === "paste"; + if (this.readonly || isPasteEvent) { + return; + } + var pos = this.checkVal(true); + this.caret(pos); + this.updateModelValue(event2.target.value); + if (this.isCompleted()) { + this.$emit("complete", event2); + } + }, "handleInputChange"), + getUnmaskedValue: /* @__PURE__ */ __name(function getUnmaskedValue() { + var unmaskedBuffer = []; + for (var i = 0; i < this.buffer.length; i++) { + var c = this.buffer[i]; + if (this.tests[i] && c !== this.getPlaceholder(i)) { + unmaskedBuffer.push(c); + } + } + return unmaskedBuffer.join(""); + }, "getUnmaskedValue"), + updateModelValue: /* @__PURE__ */ __name(function updateModelValue(value2) { + if (this.currentVal === value2) return; + var val = this.unmask ? this.getUnmaskedValue() : value2; + this.currentVal = value2; + this.writeValue(this.defaultBuffer !== val ? val : ""); + }, "updateModelValue"), + updateValue: /* @__PURE__ */ __name(function updateValue2() { + var _this3 = this; + var updateModel8 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; + if (this.$el) { + if (this.d_value == null) { + this.$el.value = ""; + updateModel8 && this.updateModelValue(""); + } else { + this.$el.value = this.d_value; + this.checkVal(); + setTimeout(function() { + if (_this3.$el) { + _this3.writeBuffer(); + _this3.checkVal(); + if (updateModel8) _this3.updateModelValue(_this3.$el.value); + } + }, 10); + } + this.focusText = this.$el.value; + } + }, "updateValue"), + initMask: /* @__PURE__ */ __name(function initMask() { + this.tests = []; + this.partialPosition = this.mask.length; + this.len = this.mask.length; + this.firstNonMaskPos = null; + this.defs = { + 9: "[0-9]", + a: "[A-Za-z]", + "*": "[A-Za-z0-9]" + }; + var ua = getUserAgent(); + this.androidChrome = /chrome/i.test(ua) && /android/i.test(ua); + var maskTokens = this.mask.split(""); + for (var i = 0; i < maskTokens.length; i++) { + var c = maskTokens[i]; + if (c === "?") { + this.len--; + this.partialPosition = i; + } else if (this.defs[c]) { + this.tests.push(new RegExp(this.defs[c])); + if (this.firstNonMaskPos === null) { + this.firstNonMaskPos = this.tests.length - 1; + } + if (i < this.partialPosition) { + this.lastRequiredNonMaskPos = this.tests.length - 1; + } + } else { + this.tests.push(null); + } + } + this.buffer = []; + for (var _i = 0; _i < maskTokens.length; _i++) { + var _c = maskTokens[_i]; + if (_c !== "?") { + if (this.defs[_c]) this.buffer.push(this.getPlaceholder(_i)); + else this.buffer.push(_c); + } + } + this.defaultBuffer = this.buffer.join(""); + this.updateValue(false); + }, "initMask"), + isValueUpdated: /* @__PURE__ */ __name(function isValueUpdated() { + return this.unmask ? this.d_value != this.getUnmaskedValue() : this.defaultBuffer !== this.$el.value && this.$el.value !== this.d_value; + }, "isValueUpdated") + }, + computed: { + inputClass: /* @__PURE__ */ __name(function inputClass() { + return [this.cx("root"), this["class"]]; + }, "inputClass"), + rootPTOptions: /* @__PURE__ */ __name(function rootPTOptions() { + return { + root: mergeProps(this.ptm("pcInputText", this.ptmParams), this.ptmi("root", this.ptmParams)) + }; + }, "rootPTOptions"), + ptmParams: /* @__PURE__ */ __name(function ptmParams() { + return { + context: { + filled: this.$filled + } + }; + }, "ptmParams") + }, + components: { + InputText: script$1o + } +}; +function render$x(_ctx, _cache, $props, $setup, $data, $options) { + var _component_InputText = resolveComponent("InputText"); + return openBlock(), createBlock(_component_InputText, { + id: _ctx.id, + value: $data.currentVal, + "class": normalizeClass($options.inputClass), + readonly: _ctx.readonly, + disabled: _ctx.disabled, + invalid: _ctx.invalid, + size: _ctx.size, + name: _ctx.name, + variant: _ctx.variant, + placeholder: _ctx.placeholder, + fluid: _ctx.$fluid, + unstyled: _ctx.unstyled, + onInput: $options.onInput, + onCompositionend: $options.onInput, + onFocus: $options.onFocus, + onBlur: $options.onBlur, + onKeydown: $options.onKeyDown, + onKeypress: $options.onKeyPress, + onPaste: $options.onPaste, + pt: $options.rootPTOptions + }, null, 8, ["id", "value", "class", "readonly", "disabled", "invalid", "size", "name", "variant", "placeholder", "fluid", "unstyled", "onInput", "onCompositionend", "onFocus", "onBlur", "onKeydown", "onKeypress", "onPaste", "pt"]); +} +__name(render$x, "render$x"); +script$C.render = render$x; +var theme$l = /* @__PURE__ */ __name(function theme19(_ref) { + var dt = _ref.dt; + return "\n.p-inputotp {\n display: flex;\n align-items: center;\n gap: ".concat(dt("inputotp.gap"), ";\n}\n\n.p-inputotp-input {\n text-align: center;\n width: ").concat(dt("inputotp.input.width"), ";\n}\n\n.p-inputotp-input.p-inputtext-sm {\n text-align: center;\n width: ").concat(dt("inputotp.input.sm.width"), ";\n}\n\n.p-inputotp-input.p-inputtext-lg {\n text-align: center;\n width: ").concat(dt("inputotp.input.lg.width"), ";\n}\n"); +}, "theme"); +var classes$m = { + root: "p-inputotp p-component", + pcInputText: "p-inputotp-input" +}; +var InputOtpStyle = BaseStyle.extend({ + name: "inputotp", + theme: theme$l, + classes: classes$m +}); +var script$1$m = { + name: "BaseInputOtp", + "extends": script$1n, + props: { + readonly: { + type: Boolean, + "default": false + }, + tabindex: { + type: Number, + "default": null + }, + length: { + type: Number, + "default": 4 + }, + mask: { + type: Boolean, + "default": false + }, + integerOnly: { + type: Boolean, + "default": false + } + }, + style: InputOtpStyle, + provide: /* @__PURE__ */ __name(function provide29() { + return { + $pcInputOtp: this, + $parentInstance: this + }; + }, "provide") +}; +var script$B = { + name: "InputOtp", + "extends": script$1$m, + inheritAttrs: false, + emits: ["change", "focus", "blur"], + data: /* @__PURE__ */ __name(function data18() { + return { + tokens: [] + }; + }, "data"), + watch: { + modelValue: { + immediate: true, + handler: /* @__PURE__ */ __name(function handler2(newValue) { + this.tokens = newValue ? newValue.split("") : new Array(this.length); + }, "handler") + } + }, + methods: { + getTemplateAttrs: /* @__PURE__ */ __name(function getTemplateAttrs(index) { + return { + value: this.tokens[index] + }; + }, "getTemplateAttrs"), + getTemplateEvents: /* @__PURE__ */ __name(function getTemplateEvents(index) { + var _this = this; + return { + input: /* @__PURE__ */ __name(function input2(event2) { + return _this.onInput(event2, index); + }, "input"), + keydown: /* @__PURE__ */ __name(function keydown(event2) { + return _this.onKeyDown(event2); + }, "keydown"), + focus: /* @__PURE__ */ __name(function focus4(event2) { + return _this.onFocus(event2); + }, "focus"), + blur: /* @__PURE__ */ __name(function blur(event2) { + return _this.onBlur(event2); + }, "blur"), + paste: /* @__PURE__ */ __name(function paste(event2) { + return _this.onPaste(event2); + }, "paste") + }; + }, "getTemplateEvents"), + onInput: /* @__PURE__ */ __name(function onInput4(event2, index) { + this.tokens[index] = event2.target.value; + this.updateModel(event2); + if (event2.inputType === "deleteContentBackward") { + this.moveToPrev(event2); + } else if (event2.inputType === "insertText" || event2.inputType === "deleteContentForward" || isTouchDevice() && event2 instanceof CustomEvent) { + this.moveToNext(event2); + } + }, "onInput"), + updateModel: /* @__PURE__ */ __name(function updateModel4(event2) { + var newValue = this.tokens.join(""); + this.writeValue(newValue, event2); + this.$emit("change", { + originalEvent: event2, + value: newValue + }); + }, "updateModel"), + moveToPrev: /* @__PURE__ */ __name(function moveToPrev(event2) { + var prevInput = this.findPrevInput(event2.target); + if (prevInput) { + prevInput.focus(); + prevInput.select(); + } + }, "moveToPrev"), + moveToNext: /* @__PURE__ */ __name(function moveToNext(event2) { + var nextInput = this.findNextInput(event2.target); + if (nextInput) { + nextInput.focus(); + nextInput.select(); + } + }, "moveToNext"), + findNextInput: /* @__PURE__ */ __name(function findNextInput(element) { + var nextElement = element.nextElementSibling; + if (!nextElement) return; + return nextElement.nodeName === "INPUT" ? nextElement : this.findNextInput(nextElement); + }, "findNextInput"), + findPrevInput: /* @__PURE__ */ __name(function findPrevInput(element) { + var prevElement = element.previousElementSibling; + if (!prevElement) return; + return prevElement.nodeName === "INPUT" ? prevElement : this.findPrevInput(prevElement); + }, "findPrevInput"), + onFocus: /* @__PURE__ */ __name(function onFocus7(event2) { + event2.target.select(); + this.$emit("focus", event2); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur6(event2) { + this.$emit("blur", event2); + }, "onBlur"), + onClick: /* @__PURE__ */ __name(function onClick3(event2) { + setTimeout(function() { + return event2.target.select(); + }, 1); + }, "onClick"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown6(event2) { + if (event2.ctrlKey || event2.metaKey) { + return; + } + switch (event2.code) { + case "ArrowLeft": + this.moveToPrev(event2); + event2.preventDefault(); + break; + case "ArrowUp": + case "ArrowDown": + event2.preventDefault(); + break; + case "Backspace": + if (event2.target.value.length === 0) { + this.moveToPrev(event2); + event2.preventDefault(); + } + break; + case "ArrowRight": + this.moveToNext(event2); + event2.preventDefault(); + break; + case "Enter": + case "NumpadEnter": + case "Tab": + break; + default: + if (this.integerOnly && !(event2.code !== "Space" && Number(event2.key) >= 0 && Number(event2.key) <= 9) || this.tokens.join("").length >= this.length && event2.code !== "Delete") { + event2.preventDefault(); + } + break; + } + }, "onKeyDown"), + onPaste: /* @__PURE__ */ __name(function onPaste3(event2) { + var paste = event2.clipboardData.getData("text"); + if (paste.length) { + var pastedCode = paste.substring(0, this.length); + if (!this.integerOnly || !isNaN(pastedCode)) { + this.tokens = pastedCode.split(""); + this.updateModel(event2); + } + } + event2.preventDefault(); + }, "onPaste") + }, + computed: { + inputMode: /* @__PURE__ */ __name(function inputMode() { + return this.integerOnly ? "numeric" : "text"; + }, "inputMode"), + inputType: /* @__PURE__ */ __name(function inputType() { + return this.mask ? "password" : "text"; + }, "inputType") + }, + components: { + OtpInputText: script$1o + } +}; +function render$w(_ctx, _cache, $props, $setup, $data, $options) { + var _component_OtpInputText = resolveComponent("OtpInputText"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.length, function(i) { + return renderSlot(_ctx.$slots, "default", { + key: i, + events: $options.getTemplateEvents(i - 1), + attrs: $options.getTemplateAttrs(i - 1), + index: i + }, function() { + return [createVNode(_component_OtpInputText, { + value: $data.tokens[i - 1], + type: $options.inputType, + "class": normalizeClass(_ctx.cx("pcInputText")), + name: _ctx.$formName, + inputmode: $options.inputMode, + variant: _ctx.variant, + readonly: _ctx.readonly, + disabled: _ctx.disabled, + size: _ctx.size, + invalid: _ctx.invalid, + tabindex: _ctx.tabindex, + unstyled: _ctx.unstyled, + onInput: /* @__PURE__ */ __name(function onInput6($event) { + return $options.onInput($event, i - 1); + }, "onInput"), + onFocus: _cache[0] || (_cache[0] = function($event) { + return $options.onFocus($event); + }), + onBlur: _cache[1] || (_cache[1] = function($event) { + return $options.onBlur($event); + }), + onPaste: _cache[2] || (_cache[2] = function($event) { + return $options.onPaste($event); + }), + onKeydown: _cache[3] || (_cache[3] = function($event) { + return $options.onKeyDown($event); + }), + onClick: _cache[4] || (_cache[4] = function($event) { + return $options.onClick($event); + }), + pt: _ctx.ptm("pcInputText") + }, null, 8, ["value", "type", "class", "name", "inputmode", "variant", "readonly", "disabled", "size", "invalid", "tabindex", "unstyled", "onInput", "pt"])]; + }); + }), 128))], 16); +} +__name(render$w, "render$w"); +script$B.render = render$w; +var script$A = { + name: "InputSwitch", + "extends": script$1G, + mounted: /* @__PURE__ */ __name(function mounted20() { + console.warn("Deprecated since v4. Use ToggleSwitch component instead."); + }, "mounted") +}; +var InputSwitchStyle = BaseStyle.extend({ + name: "inputswitch" +}); +var KeyFilterStyle = BaseStyle.extend({ + name: "keyfilter-directive" +}); +var BaseKeyFilter = BaseDirective.extend({ + style: KeyFilterStyle +}); +function _toConsumableArray$8(r) { + return _arrayWithoutHoles$8(r) || _iterableToArray$8(r) || _unsupportedIterableToArray$9(r) || _nonIterableSpread$8(); +} +__name(_toConsumableArray$8, "_toConsumableArray$8"); +function _nonIterableSpread$8() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$8, "_nonIterableSpread$8"); +function _unsupportedIterableToArray$9(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$9(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$9(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$9, "_unsupportedIterableToArray$9"); +function _iterableToArray$8(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$8, "_iterableToArray$8"); +function _arrayWithoutHoles$8(r) { + if (Array.isArray(r)) return _arrayLikeToArray$9(r); +} +__name(_arrayWithoutHoles$8, "_arrayWithoutHoles$8"); +function _arrayLikeToArray$9(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$9, "_arrayLikeToArray$9"); +function _typeof$f(o) { + "@babel/helpers - typeof"; + return _typeof$f = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$f(o); +} +__name(_typeof$f, "_typeof$f"); +var KeyFilter = BaseKeyFilter.extend("keyfilter", { + beforeMount: /* @__PURE__ */ __name(function beforeMount(el, options4) { + var target = this.getTarget(el); + if (!target) return; + target.$_pkeyfilterModifier = this.getModifiers(options4); + if (_typeof$f(options4.value)) { + var _options$value, _options$value2; + target.$_pkeyfilterPattern = ((_options$value = options4.value) === null || _options$value === void 0 ? void 0 : _options$value.pattern) || options4.value; + target.$_pkeyfilterValidateOnly = ((_options$value2 = options4.value) === null || _options$value2 === void 0 ? void 0 : _options$value2.validateOnly) || false; + } + this.bindEvents(target); + target.setAttribute("data-pd-keyfilter", true); + }, "beforeMount"), + updated: /* @__PURE__ */ __name(function updated5(el, options4) { + var target = this.getTarget(el); + if (!target) return; + target.$_pkeyfilterModifier = this.getModifiers(options4); + this.unbindEvents(el, options4); + if (_typeof$f(options4.value)) { + var _options$value3, _options$value4; + target.$_pkeyfilterPattern = ((_options$value3 = options4.value) === null || _options$value3 === void 0 ? void 0 : _options$value3.pattern) || options4.value; + target.$_pkeyfilterValidateOnly = ((_options$value4 = options4.value) === null || _options$value4 === void 0 ? void 0 : _options$value4.validateOnly) || false; + } + this.bindEvents(target); + }, "updated"), + unmounted: /* @__PURE__ */ __name(function unmounted3(el, options4) { + this.unbindEvents(el, options4); + }, "unmounted"), + DEFAULT_PATTERNS: { + pint: /[\d]/, + "int": /[\d\-]/, + pnum: /[\d\.]/, + money: /[\d\.\s,]/, + num: /[\d\-\.]/, + hex: /[0-9a-f]/i, + email: /[a-z0-9_\.\-@]/i, + alpha: /[a-z_]/i, + alphanum: /[a-z0-9_]/i + }, + methods: { + getTarget: /* @__PURE__ */ __name(function getTarget(el) { + return isAttributeEquals(el, "data-pc-name", "inputtext") || isAttributeEquals(el, "data-pc-name", "textarea") ? el : null; + }, "getTarget"), + getModifiers: /* @__PURE__ */ __name(function getModifiers(options4) { + if (options4.modifiers && Object.keys(options4.modifiers).length) { + return Object.keys(options4.modifiers)[Object.keys.length - 1]; + } + return ""; + }, "getModifiers"), + getRegex: /* @__PURE__ */ __name(function getRegex(target) { + return target.$_pkeyfilterPattern ? target.$_pkeyfilterPattern : target.$_pkeyfilterModifier ? this.DEFAULT_PATTERNS[target.$_pkeyfilterModifier] : /./; + }, "getRegex"), + bindEvents: /* @__PURE__ */ __name(function bindEvents(el) { + var _this = this; + el.$_keyfilterKeydownEvent = function(event2) { + return _this.onKeydown(event2, el); + }; + el.$_keyfilterPasteEvent = function(event2) { + return _this.onPaste(event2, el); + }; + el.addEventListener("keypress", el.$_keyfilterKeydownEvent); + el.addEventListener("paste", el.$_keyfilterPasteEvent); + }, "bindEvents"), + unbindEvents: /* @__PURE__ */ __name(function unbindEvents(el) { + el.removeEventListener("keypress", el.$_keyfilterKeydownEvent); + el.removeEventListener("paste", el.$_keyfilterPasteEvent); + el.$_keyfilterKeydownEvent = null; + el.$_keyfilterPasteEvent = null; + }, "unbindEvents"), + onKeydown: /* @__PURE__ */ __name(function onKeydown3(event2, target) { + if (event2.ctrlKey || event2.altKey || event2.metaKey || event2.key === "Tab") { + return; + } + var regex = this.getRegex(target); + if (regex === "") { + return; + } + var testKey = "".concat(event2.key); + if (target.$_pkeyfilterValidateOnly) { + testKey = "".concat(event2.target.value).concat(event2.key); + } + if (!regex.test(testKey)) { + event2.preventDefault(); + } + }, "onKeydown"), + onPaste: /* @__PURE__ */ __name(function onPaste4(event2, target) { + var regex = this.getRegex(target); + if (regex === "") { + return; + } + var clipboard = event2.clipboardData.getData("text"); + var testKey = ""; + _toConsumableArray$8(clipboard).forEach(function(c) { + if (target.$_pkeyfilterValidateOnly) { + testKey += c; + } else { + testKey = c; + } + if (!regex.test(testKey)) { + event2.preventDefault(); + return false; + } + }); + }, "onPaste") + } +}); +var theme$k = /* @__PURE__ */ __name(function theme20(_ref) { + var dt = _ref.dt; + return "\n.p-knob-range {\n fill: none;\n transition: stroke 0.1s ease-in;\n}\n\n.p-knob-value {\n animation-name: p-knob-dash-frame;\n animation-fill-mode: forwards;\n fill: none;\n}\n\n.p-knob-text {\n font-size: 1.3rem;\n text-align: center;\n}\n\n.p-knob svg {\n border-radius: 50%;\n outline-color: transparent;\n transition: background ".concat(dt("knob.transition.duration"), ", color ").concat(dt("knob.transition.duration"), ", outline-color ").concat(dt("knob.transition.duration"), ", box-shadow ").concat(dt("knob.transition.duration"), ";\n}\n\n.p-knob svg:focus-visible {\n box-shadow: ").concat(dt("knob.focus.ring.shadow"), ";\n outline: ").concat(dt("knob.focus.ring.width"), " ").concat(dt("knob.focus.ring.style"), " ").concat(dt("knob.focus.ring.color"), ";\n outline-offset: ").concat(dt("knob.focus.ring.offset"), ";\n}\n\n@keyframes p-knob-dash-frame {\n 100% {\n stroke-dashoffset: 0;\n }\n}\n"); +}, "theme"); +var classes$l = { + root: /* @__PURE__ */ __name(function root16(_ref2) { + var instance = _ref2.instance, props = _ref2.props; + return ["p-knob p-component", { + "p-disabled": props.disabled, + "p-invalid": instance.$invalid + }]; + }, "root"), + range: "p-knob-range", + value: "p-knob-value", + text: "p-knob-text" +}; +var KnobStyle = BaseStyle.extend({ + name: "knob", + theme: theme$k, + classes: classes$l +}); +var script$1$l = { + name: "BaseKnob", + "extends": script$1s, + props: { + size: { + type: Number, + "default": 100 + }, + readonly: { + type: Boolean, + "default": false + }, + step: { + type: Number, + "default": 1 + }, + min: { + type: Number, + "default": 0 + }, + max: { + type: Number, + "default": 100 + }, + valueColor: { + type: String, + "default": /* @__PURE__ */ __name(function _default10() { + return $dt("knob.value.background").variable; + }, "_default") + }, + rangeColor: { + type: String, + "default": /* @__PURE__ */ __name(function _default11() { + return $dt("knob.range.background").variable; + }, "_default") + }, + textColor: { + type: String, + "default": /* @__PURE__ */ __name(function _default12() { + return $dt("knob.text.color").variable; + }, "_default") + }, + strokeWidth: { + type: Number, + "default": 14 + }, + showValue: { + type: Boolean, + "default": true + }, + valueTemplate: { + type: [String, Function], + "default": "{value}" + }, + tabindex: { + type: Number, + "default": 0 + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + } + }, + style: KnobStyle, + provide: /* @__PURE__ */ __name(function provide30() { + return { + $pcKnob: this, + $parentInstance: this + }; + }, "provide") +}; +var Math_PI$1 = 3.14159265358979; +var script$z = { + name: "Knob", + "extends": script$1$l, + inheritAttrs: false, + emits: ["change"], + data: /* @__PURE__ */ __name(function data19() { + return { + radius: 40, + midX: 50, + midY: 50, + minRadians: 4 * Math_PI$1 / 3, + maxRadians: -Math_PI$1 / 3 + }; + }, "data"), + methods: { + updateValueByOffset: /* @__PURE__ */ __name(function updateValueByOffset(offsetX, offsetY) { + var dx = offsetX - this.size / 2; + var dy = this.size / 2 - offsetY; + var angle = Math.atan2(dy, dx); + var start = -Math_PI$1 / 2 - Math_PI$1 / 6; + this.updateModel(angle, start); + }, "updateValueByOffset"), + updateModel: /* @__PURE__ */ __name(function updateModel5(angle, start) { + var mappedValue; + if (angle > this.maxRadians) mappedValue = this.mapRange(angle, this.minRadians, this.maxRadians, this.min, this.max); + else if (angle < start) mappedValue = this.mapRange(angle + 2 * Math_PI$1, this.minRadians, this.maxRadians, this.min, this.max); + else return; + var newValue = Math.round((mappedValue - this.min) / this.step) * this.step + this.min; + this.writeValue(newValue); + this.$emit("change", newValue); + }, "updateModel"), + updateModelValue: /* @__PURE__ */ __name(function updateModelValue2(newValue) { + if (newValue > this.max) this.writeValue(this.max); + else if (newValue < this.min) this.writeValue(this.min); + else this.writeValue(newValue); + }, "updateModelValue"), + mapRange: /* @__PURE__ */ __name(function mapRange(x, inMin, inMax, outMin, outMax) { + return (x - inMin) * (outMax - outMin) / (inMax - inMin) + outMin; + }, "mapRange"), + onClick: /* @__PURE__ */ __name(function onClick4(event2) { + if (!this.disabled && !this.readonly) { + this.updateValueByOffset(event2.offsetX, event2.offsetY); + } + }, "onClick"), + onBlur: /* @__PURE__ */ __name(function onBlur7(event2) { + var _this$formField$onBlu, _this$formField; + (_this$formField$onBlu = (_this$formField = this.formField).onBlur) === null || _this$formField$onBlu === void 0 || _this$formField$onBlu.call(_this$formField, event2); + }, "onBlur"), + onMouseDown: /* @__PURE__ */ __name(function onMouseDown(event2) { + if (!this.disabled && !this.readonly) { + window.addEventListener("mousemove", this.onMouseMove); + window.addEventListener("mouseup", this.onMouseUp); + event2.preventDefault(); + } + }, "onMouseDown"), + onMouseUp: /* @__PURE__ */ __name(function onMouseUp(event2) { + if (!this.disabled && !this.readonly) { + window.removeEventListener("mousemove", this.onMouseMove); + window.removeEventListener("mouseup", this.onMouseUp); + event2.preventDefault(); + } + }, "onMouseUp"), + onTouchStart: /* @__PURE__ */ __name(function onTouchStart(event2) { + if (!this.disabled && !this.readonly) { + window.addEventListener("touchmove", this.onTouchMove); + window.addEventListener("touchend", this.onTouchEnd); + event2.preventDefault(); + } + }, "onTouchStart"), + onTouchEnd: /* @__PURE__ */ __name(function onTouchEnd(event2) { + if (!this.disabled && !this.readonly) { + window.removeEventListener("touchmove", this.onTouchMove); + window.removeEventListener("touchend", this.onTouchEnd); + event2.preventDefault(); + } + }, "onTouchEnd"), + onMouseMove: /* @__PURE__ */ __name(function onMouseMove(event2) { + if (!this.disabled && !this.readonly) { + this.updateValueByOffset(event2.offsetX, event2.offsetY); + event2.preventDefault(); + } + }, "onMouseMove"), + onTouchMove: /* @__PURE__ */ __name(function onTouchMove(event2) { + if (!this.disabled && !this.readonly && event2.touches.length == 1) { + var rect = this.$el.getBoundingClientRect(); + var touch = event2.targetTouches.item(0); + var offsetX = touch.clientX - rect.left; + var offsetY = touch.clientY - rect.top; + this.updateValueByOffset(offsetX, offsetY); + } + }, "onTouchMove"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown7(event2) { + if (!this.disabled && !this.readonly) { + switch (event2.code) { + case "ArrowRight": + case "ArrowUp": { + event2.preventDefault(); + this.updateModelValue(this.d_value + this.step); + break; + } + case "ArrowLeft": + case "ArrowDown": { + event2.preventDefault(); + this.updateModelValue(this.d_value - this.step); + break; + } + case "Home": { + event2.preventDefault(); + this.writeValue(this.min); + break; + } + case "End": { + event2.preventDefault(); + this.writeValue(this.max); + break; + } + case "PageUp": { + event2.preventDefault(); + this.updateModelValue(this.d_value + 10); + break; + } + case "PageDown": { + event2.preventDefault(); + this.updateModelValue(this.d_value - 10); + break; + } + } + } + }, "onKeyDown") + }, + computed: { + rangePath: /* @__PURE__ */ __name(function rangePath() { + return "M ".concat(this.minX, " ").concat(this.minY, " A ").concat(this.radius, " ").concat(this.radius, " 0 1 1 ").concat(this.maxX, " ").concat(this.maxY); + }, "rangePath"), + valuePath: /* @__PURE__ */ __name(function valuePath() { + return "M ".concat(this.zeroX, " ").concat(this.zeroY, " A ").concat(this.radius, " ").concat(this.radius, " 0 ").concat(this.largeArc, " ").concat(this.sweep, " ").concat(this.valueX, " ").concat(this.valueY); + }, "valuePath"), + zeroRadians: /* @__PURE__ */ __name(function zeroRadians() { + if (this.min > 0 && this.max > 0) return this.mapRange(this.min, this.min, this.max, this.minRadians, this.maxRadians); + else return this.mapRange(0, this.min, this.max, this.minRadians, this.maxRadians); + }, "zeroRadians"), + valueRadians: /* @__PURE__ */ __name(function valueRadians() { + return this.mapRange(this.d_value, this.min, this.max, this.minRadians, this.maxRadians); + }, "valueRadians"), + minX: /* @__PURE__ */ __name(function minX() { + return this.midX + Math.cos(this.minRadians) * this.radius; + }, "minX"), + minY: /* @__PURE__ */ __name(function minY() { + return this.midY - Math.sin(this.minRadians) * this.radius; + }, "minY"), + maxX: /* @__PURE__ */ __name(function maxX() { + return this.midX + Math.cos(this.maxRadians) * this.radius; + }, "maxX"), + maxY: /* @__PURE__ */ __name(function maxY() { + return this.midY - Math.sin(this.maxRadians) * this.radius; + }, "maxY"), + zeroX: /* @__PURE__ */ __name(function zeroX() { + return this.midX + Math.cos(this.zeroRadians) * this.radius; + }, "zeroX"), + zeroY: /* @__PURE__ */ __name(function zeroY() { + return this.midY - Math.sin(this.zeroRadians) * this.radius; + }, "zeroY"), + valueX: /* @__PURE__ */ __name(function valueX() { + return this.midX + Math.cos(this.valueRadians) * this.radius; + }, "valueX"), + valueY: /* @__PURE__ */ __name(function valueY() { + return this.midY - Math.sin(this.valueRadians) * this.radius; + }, "valueY"), + largeArc: /* @__PURE__ */ __name(function largeArc() { + return Math.abs(this.zeroRadians - this.valueRadians) < Math_PI$1 ? 0 : 1; + }, "largeArc"), + sweep: /* @__PURE__ */ __name(function sweep() { + return this.valueRadians > this.zeroRadians ? 0 : 1; + }, "sweep"), + valueToDisplay: /* @__PURE__ */ __name(function valueToDisplay() { + if (typeof this.valueTemplate === "string") { + return this.valueTemplate.replace(/{value}/g, this.d_value); + } else { + return this.valueTemplate(this.d_value); + } + }, "valueToDisplay") + } +}; +var _hoisted_1$j = ["width", "height", "tabindex", "aria-valuemin", "aria-valuemax", "aria-valuenow", "aria-labelledby", "aria-label"]; +var _hoisted_2$e = ["d", "stroke-width", "stroke"]; +var _hoisted_3$b = ["d", "stroke-width", "stroke"]; +var _hoisted_4$7 = ["fill"]; +function render$v(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [(openBlock(), createElementBlock("svg", mergeProps({ + viewBox: "0 0 100 100", + role: "slider", + width: _ctx.size, + height: _ctx.size, + tabindex: _ctx.readonly || _ctx.disabled ? -1 : _ctx.tabindex, + "aria-valuemin": _ctx.min, + "aria-valuemax": _ctx.max, + "aria-valuenow": _ctx.d_value, + "aria-labelledby": _ctx.ariaLabelledby, + "aria-label": _ctx.ariaLabel, + onClick: _cache[0] || (_cache[0] = function() { + return $options.onClick && $options.onClick.apply($options, arguments); + }), + onBlur: _cache[1] || (_cache[1] = function() { + return $options.onBlur && $options.onBlur.apply($options, arguments); + }), + onKeydown: _cache[2] || (_cache[2] = function() { + return $options.onKeyDown && $options.onKeyDown.apply($options, arguments); + }), + onMousedown: _cache[3] || (_cache[3] = function() { + return $options.onMouseDown && $options.onMouseDown.apply($options, arguments); + }), + onMouseup: _cache[4] || (_cache[4] = function() { + return $options.onMouseUp && $options.onMouseUp.apply($options, arguments); + }), + onTouchstartPassive: _cache[5] || (_cache[5] = function() { + return $options.onTouchStart && $options.onTouchStart.apply($options, arguments); + }), + onTouchend: _cache[6] || (_cache[6] = function() { + return $options.onTouchEnd && $options.onTouchEnd.apply($options, arguments); + }) + }, _ctx.ptm("svg")), [createBaseVNode("path", mergeProps({ + d: $options.rangePath, + "stroke-width": _ctx.strokeWidth, + stroke: _ctx.rangeColor, + "class": _ctx.cx("range") + }, _ctx.ptm("range")), null, 16, _hoisted_2$e), createBaseVNode("path", mergeProps({ + d: $options.valuePath, + "stroke-width": _ctx.strokeWidth, + stroke: _ctx.valueColor, + "class": _ctx.cx("value") + }, _ctx.ptm("value")), null, 16, _hoisted_3$b), _ctx.showValue ? (openBlock(), createElementBlock("text", mergeProps({ + key: 0, + x: 50, + y: 57, + "text-anchor": "middle", + fill: _ctx.textColor, + "class": _ctx.cx("text") + }, _ctx.ptm("text")), toDisplayString($options.valueToDisplay), 17, _hoisted_4$7)) : createCommentVNode("", true)], 16, _hoisted_1$j))], 16); +} +__name(render$v, "render$v"); +script$z.render = render$v; +var theme$j = /* @__PURE__ */ __name(function theme21(_ref) { + var dt = _ref.dt; + return "\n.p-megamenu {\n position: relative;\n display: flex;\n align-items: center;\n background: ".concat(dt("megamenu.background"), ";\n border: 1px solid ").concat(dt("megamenu.border.color"), ";\n border-radius: ").concat(dt("megamenu.border.radius"), ";\n color: ").concat(dt("megamenu.color"), ";\n gap: ").concat(dt("megamenu.gap"), ";\n}\n\n.p-megamenu-start,\n.p-megamenu-end {\n display: flex;\n align-items: center;\n}\n\n.p-megamenu-root-list {\n margin: 0;\n padding: 0;\n list-style: none;\n outline: 0 none;\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n gap: ").concat(dt("megamenu.gap"), ";\n}\n\n.p-megamenu-root-list > .p-megamenu-item > .p-megamenu-item-content {\n border-radius: ").concat(dt("megamenu.base.item.border.radius"), ";\n}\n\n.p-megamenu-root-list > .p-megamenu-item > .p-megamenu-item-content > .p-megamenu-item-link {\n padding: ").concat(dt("megamenu.base.item.padding"), ";\n}\n\n.p-megamenu-item-content {\n transition: background ").concat(dt("megamenu.transition.duration"), ", color ").concat(dt("megamenu.transition.duration"), ";\n border-radius: ").concat(dt("megamenu.item.border.radius"), ";\n color: ").concat(dt("megamenu.item.color"), ";\n}\n\n.p-megamenu-item-link {\n cursor: pointer;\n display: flex;\n align-items: center;\n text-decoration: none;\n overflow: hidden;\n position: relative;\n color: inherit;\n padding: ").concat(dt("megamenu.item.padding"), ";\n gap: ").concat(dt("megamenu.item.gap"), ";\n user-select: none;\n outline: 0 none;\n}\n\n.p-megamenu-item-label {\n line-height: 1;\n}\n\n.p-megamenu-item-icon {\n color: ").concat(dt("megamenu.item.icon.color"), ";\n}\n\n.p-megamenu-submenu-icon {\n color: ").concat(dt("megamenu.submenu.icon.color"), ";\n font-size: ").concat(dt("megamenu.submenu.icon.size"), ";\n width: ").concat(dt("megamenu.submenu.icon.size"), ";\n height: ").concat(dt("megamenu.submenu.icon.size"), ";\n}\n\n.p-megamenu-item.p-focus > .p-megamenu-item-content {\n color: ").concat(dt("megamenu.item.focus.color"), ";\n background: ").concat(dt("megamenu.item.focus.background"), ";\n}\n\n.p-megamenu-item.p-focus > .p-megamenu-item-content .p-megamenu-item-icon {\n color: ").concat(dt("megamenu.item.icon.focus.color"), ";\n}\n\n.p-megamenu-item.p-focus > .p-megamenu-item-content .p-megamenu-submenu-icon {\n color: ").concat(dt("megamenu.submenu.icon.focus.color"), ";\n}\n\n.p-megamenu-item:not(.p-disabled) > .p-megamenu-item-content:hover {\n color: ").concat(dt("megamenu.item.focus.color"), ";\n background: ").concat(dt("megamenu.item.focus.background"), ";\n}\n\n.p-megamenu-item:not(.p-disabled) > .p-megamenu-item-content:hover .p-megamenu-item-icon {\n color: ").concat(dt("megamenu.item.icon.focus.color"), ";\n}\n\n.p-megamenu-item:not(.p-disabled) > .p-megamenu-item-content:hover .p-megamenu-submenu-icon {\n color: ").concat(dt("megamenu.submenu.icon.focus.color"), ";\n}\n\n.p-megamenu-item-active > .p-megamenu-item-content {\n color: ").concat(dt("megamenu.item.active.color"), ";\n background: ").concat(dt("megamenu.item.active.background"), ";\n}\n\n.p-megamenu-item-active > .p-megamenu-item-content .p-megamenu-item-icon {\n color: ").concat(dt("megamenu.item.icon.active.color"), ";\n}\n\n.p-megamenu-item-active > .p-megamenu-item-content .p-megamenu-submenu-icon {\n color: ").concat(dt("megamenu.submenu.icon.active.color"), ";\n}\n\n.p-megamenu-overlay {\n display: none;\n position: absolute;\n width: auto;\n z-index: 1;\n left: 0;\n min-width: 100%;\n padding: ").concat(dt("megamenu.overlay.padding"), ";\n background: ").concat(dt("megamenu.overlay.background"), ";\n color: ").concat(dt("megamenu.overlay.color"), ";\n border: 1px solid ").concat(dt("megamenu.overlay.border.color"), ";\n border-radius: ").concat(dt("megamenu.overlay.border.radius"), ";\n box-shadow: ").concat(dt("megamenu.overlay.shadow"), ";\n}\n\n.p-megamenu-overlay:dir(rtl) {\n left: auto;\n right: 0;\n}\n\n.p-megamenu-root-list > .p-megamenu-item-active > .p-megamenu-overlay {\n display: block;\n}\n\n.p-megamenu-submenu {\n margin: 0;\n list-style: none;\n padding: ").concat(dt("megamenu.submenu.padding"), ";\n min-width: 12.5rem;\n display: flex;\n flex-direction: column;\n gap: ").concat(dt("megamenu.submenu.gap"), "\n}\n\n.p-megamenu-submenu-label {\n padding: ").concat(dt("megamenu.submenu.label.padding"), ";\n color: ").concat(dt("megamenu.submenu.label.color"), ";\n font-weight: ").concat(dt("megamenu.submenu.label.font.weight"), ";\n background: ").concat(dt("megamenu.submenu.label.background"), ";\n}\n\n.p-megamenu-separator {\n border-block-start: 1px solid ").concat(dt("megamenu.separator.border.color"), ";\n}\n\n.p-megamenu-horizontal {\n align-items: center;\n padding: ").concat(dt("megamenu.horizontal.orientation.padding"), ";\n}\n\n.p-megamenu-horizontal .p-megamenu-root-list {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: ").concat(dt("megamenu.horizontal.orientation.gap"), ";\n}\n\n.p-megamenu-horizontal .p-megamenu-end {\n margin-left: auto;\n align-self: center;\n}\n\n.p-megamenu-horizontal .p-megamenu-end:dir(rtl) {\n margin-left: 0;\n margin-right: auto;\n}\n\n.p-megamenu-vertical {\n display: inline-flex;\n min-width: 12.5rem;\n flex-direction: column;\n align-items: stretch;\n padding: ").concat(dt("megamenu.vertical.orientation.padding"), ";\n}\n\n.p-megamenu-vertical .p-megamenu-root-list {\n align-items: stretch;\n flex-direction: column;\n gap: ").concat(dt("megamenu.vertical.orientation.gap"), ";\n}\n\n.p-megamenu-vertical .p-megamenu-root-list > .p-megamenu-item-active > .p-megamenu-overlay {\n left: 100%;\n top: 0;\n}\n\n.p-megamenu-vertical .p-megamenu-root-list > .p-megamenu-item-active > .p-megamenu-overlay:dir(rtl) {\n left: auto;\n right: 100%;\n}\n\n.p-megamenu-vertical .p-megamenu-root-list > .p-megamenu-item > .p-megamenu-item-content .p-megamenu-submenu-icon {\n margin-left: auto;\n}\n\n.p-megamenu-vertical .p-megamenu-root-list > .p-megamenu-item > .p-megamenu-item-content .p-megamenu-submenu-icon:dir(rtl) {\n margin-left: 0;\n margin-right: auto;\n transform: rotate(180deg);\n}\n\n.p-megamenu-grid {\n display: flex;\n}\n\n.p-megamenu-col-2,\n.p-megamenu-col-3,\n.p-megamenu-col-4,\n.p-megamenu-col-6,\n.p-megamenu-col-12 {\n flex: 0 0 auto;\n padding: ").concat(dt("megamenu.overlay.gap"), ";\n}\n\n.p-megamenu-col-2 {\n width: 16.6667%;\n}\n\n.p-megamenu-col-3 {\n width: 25%;\n}\n\n.p-megamenu-col-4 {\n width: 33.3333%;\n}\n\n.p-megamenu-col-6 {\n width: 50%;\n}\n\n.p-megamenu-col-12 {\n width: 100%;\n}\n\n.p-megamenu-button {\n display: none;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n width: ").concat(dt("megamenu.mobile.button.size"), ";\n height: ").concat(dt("megamenu.mobile.button.size"), ";\n position: relative;\n color: ").concat(dt("megamenu.mobile.button.color"), ";\n border: 0 none;\n background: transparent;\n border-radius: ").concat(dt("megamenu.mobile.button.border.radius"), ";\n transition: background ").concat(dt("megamenu.transition.duration"), ", color ").concat(dt("megamenu.transition.duration"), ", outline-color ").concat(dt("megamenu.transition.duration"), ", box-shadow ").concat(dt("megamenu.transition.duration"), ";\n outline-color: transparent;\n}\n\n.p-megamenu-button:hover {\n color: ").concat(dt("megamenu.mobile.button.hover.color"), ";\n background: ").concat(dt("megamenu.mobile.button.hover.background"), ";\n}\n\n.p-megamenu-button:focus-visible {\n box-shadow: ").concat(dt("megamenu.mobile.button.focus.ring.shadow"), ";\n outline: ").concat(dt("megamenu.mobile.button.focus.ring.width"), " ").concat(dt("megamenu.mobile.button.focus.ring.style"), " ").concat(dt("megamenu.mobile.button.focus.ring.color"), ";\n outline-offset: ").concat(dt("megamenu.mobile.button.focus.ring.offset"), ";\n}\n\n.p-megamenu-mobile {\n display: flex;\n}\n\n.p-megamenu-mobile .p-megamenu-button {\n display: flex;\n}\n\n.p-megamenu-mobile .p-megamenu-root-list {\n position: absolute;\n display: none;\n flex-direction: column;\n top: 100%;\n left: 0;\n z-index: 1;\n width: 100%;\n padding: ").concat(dt("megamenu.submenu.padding"), ";\n gap: ").concat(dt("megamenu.submenu.gap"), ";\n background: ").concat(dt("megamenu.overlay.background"), ";\n border: 1px solid ").concat(dt("megamenu.overlay.border.color"), ";\n box-shadow: ").concat(dt("megamenu.overlay.shadow"), ";\n}\n\n.p-megamenu-mobile .p-megamenu-root-list:dir(rtl) {\n left: auto;\n right: 0;\n}\n\n.p-megamenu-mobile-active .p-megamenu-root-list {\n display: block;\n}\n\n.p-megamenu-mobile .p-megamenu-root-list .p-megamenu-item {\n width: 100%;\n position: static;\n}\n\n.p-megamenu-mobile .p-megamenu-overlay {\n position: static;\n border: 0 none;\n border-radius: 0;\n box-shadow: none;\n}\n\n.p-megamenu-mobile .p-megamenu-grid {\n flex-wrap: wrap;\n overflow: auto;\n max-height: 90%;\n}\n\n.p-megamenu-mobile .p-megamenu-root-list > .p-megamenu-item > .p-megamenu-item-content .p-megamenu-submenu-icon {\n margin-left: auto;\n transition: transform 0.2s;\n}\n\n.p-megamenu-mobile .p-megamenu-root-list > .p-megamenu-item > .p-megamenu-item-content .p-megamenu-submenu-icon:dir(rtl) {\n margin-left: 0;\n margin-right: auto;\n}\n\n.p-megamenu-mobile .p-megamenu-root-list > .p-megamenu-item-active > .p-megamenu-item-content .p-megamenu-submenu-icon {\n transform: rotate(-180deg);\n}\n"); +}, "theme"); +var inlineStyles$6 = { + rootList: /* @__PURE__ */ __name(function rootList(_ref2) { + var props = _ref2.props; + return { + "max-height": props.scrollHeight, + overflow: "auto" + }; + }, "rootList") +}; +var classes$k = { + root: /* @__PURE__ */ __name(function root17(_ref3) { + var instance = _ref3.instance; + return ["p-megamenu p-component", { + "p-megamenu-mobile": instance.queryMatches, + "p-megamenu-mobile-active": instance.mobileActive, + "p-megamenu-horizontal": instance.horizontal, + "p-megamenu-vertical": instance.vertical + }]; + }, "root"), + start: "p-megamenu-start", + button: "p-megamenu-button", + rootList: "p-megamenu-root-list", + submenuLabel: /* @__PURE__ */ __name(function submenuLabel(_ref4) { + var instance = _ref4.instance, processedItem = _ref4.processedItem; + return ["p-megamenu-submenu-label", { + "p-disabled": instance.isItemDisabled(processedItem) + }]; + }, "submenuLabel"), + item: /* @__PURE__ */ __name(function item3(_ref5) { + var instance = _ref5.instance, processedItem = _ref5.processedItem; + return ["p-megamenu-item", { + "p-megamenu-item-active": instance.isItemActive(processedItem), + "p-focus": instance.isItemFocused(processedItem), + "p-disabled": instance.isItemDisabled(processedItem) + }]; + }, "item"), + itemContent: "p-megamenu-item-content", + itemLink: "p-megamenu-item-link", + itemIcon: "p-megamenu-item-icon", + itemLabel: "p-megamenu-item-label", + submenuIcon: "p-megamenu-submenu-icon", + overlay: "p-megamenu-overlay", + grid: "p-megamenu-grid", + column: /* @__PURE__ */ __name(function column(_ref6) { + var instance = _ref6.instance, processedItem = _ref6.processedItem; + var length = instance.isItemGroup(processedItem) ? processedItem.items.length : 0; + var columnClass; + if (instance.$parentInstance.queryMatches) columnClass = "p-megamenu-col-12"; + else { + switch (length) { + case 2: + columnClass = "p-megamenu-col-6"; + break; + case 3: + columnClass = "p-megamenu-col-4"; + break; + case 4: + columnClass = "p-megamenu-col-3"; + break; + case 6: + columnClass = "p-megamenu-col-2"; + break; + default: + columnClass = "p-megamenu-col-12"; + break; + } + } + return columnClass; + }, "column"), + submenu: "p-megamenu-submenu", + separator: "p-megamenu-separator", + end: "p-megamenu-end" +}; +var MegaMenuStyle = BaseStyle.extend({ + name: "megamenu", + theme: theme$j, + classes: classes$k, + inlineStyles: inlineStyles$6 +}); +var script$2$5 = { + name: "BaseMegaMenu", + "extends": script$1d, + props: { + model: { + type: Array, + "default": null + }, + orientation: { + type: String, + "default": "horizontal" + }, + breakpoint: { + type: String, + "default": "960px" + }, + disabled: { + type: Boolean, + "default": false + }, + tabindex: { + type: Number, + "default": 0 + }, + scrollHeight: { + type: String, + "default": "20rem" + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + } + }, + style: MegaMenuStyle, + provide: /* @__PURE__ */ __name(function provide31() { + return { + $pcMegaMenu: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1$k = { + name: "MegaMenuSub", + hostName: "MegaMenu", + "extends": script$1d, + emits: ["item-click", "item-mouseenter"], + props: { + menuId: { + type: String, + "default": null + }, + focusedItemId: { + type: String, + "default": null + }, + horizontal: { + type: Boolean, + "default": false + }, + submenu: { + type: Object, + "default": null + }, + mobileActive: { + type: Boolean, + "default": false + }, + items: { + type: Array, + "default": null + }, + level: { + type: Number, + "default": 0 + }, + templates: { + type: Object, + "default": null + }, + activeItem: { + type: Object, + "default": null + }, + tabindex: { + type: Number, + "default": 0 + } + }, + methods: { + getSubListId: /* @__PURE__ */ __name(function getSubListId(processedItem) { + return "".concat(this.getItemId(processedItem), "_list"); + }, "getSubListId"), + getSubListKey: /* @__PURE__ */ __name(function getSubListKey(processedItem) { + return this.getSubListId(processedItem); + }, "getSubListKey"), + getItemId: /* @__PURE__ */ __name(function getItemId2(processedItem) { + return "".concat(this.menuId, "_").concat(processedItem.key); + }, "getItemId"), + getItemKey: /* @__PURE__ */ __name(function getItemKey(processedItem) { + return this.getItemId(processedItem); + }, "getItemKey"), + getItemProp: /* @__PURE__ */ __name(function getItemProp2(processedItem, name4, params) { + return processedItem && processedItem.item ? resolve(processedItem.item[name4], params) : void 0; + }, "getItemProp"), + getItemLabel: /* @__PURE__ */ __name(function getItemLabel(processedItem) { + return this.getItemProp(processedItem, "label"); + }, "getItemLabel"), + getPTOptions: /* @__PURE__ */ __name(function getPTOptions3(processedItem, index, key) { + return this.ptm(key, { + context: { + item: processedItem.item, + index, + active: this.isItemActive(processedItem), + focused: this.isItemFocused(processedItem), + disabled: this.isItemDisabled(processedItem) + } + }); + }, "getPTOptions"), + isItemActive: /* @__PURE__ */ __name(function isItemActive3(processedItem) { + return isNotEmpty(this.activeItem) ? this.activeItem.key === processedItem.key : false; + }, "isItemActive"), + isItemVisible: /* @__PURE__ */ __name(function isItemVisible(processedItem) { + return this.getItemProp(processedItem, "visible") !== false; + }, "isItemVisible"), + isItemDisabled: /* @__PURE__ */ __name(function isItemDisabled(processedItem) { + return this.getItemProp(processedItem, "disabled"); + }, "isItemDisabled"), + isItemFocused: /* @__PURE__ */ __name(function isItemFocused(processedItem) { + return this.focusedItemId === this.getItemId(processedItem); + }, "isItemFocused"), + isItemGroup: /* @__PURE__ */ __name(function isItemGroup(processedItem) { + return isNotEmpty(processedItem.items); + }, "isItemGroup"), + onItemClick: /* @__PURE__ */ __name(function onItemClick2(event2, processedItem) { + this.getItemProp(processedItem, "command", { + originalEvent: event2, + item: processedItem.item + }); + this.$emit("item-click", { + originalEvent: event2, + processedItem, + isFocus: true + }); + }, "onItemClick"), + onItemMouseEnter: /* @__PURE__ */ __name(function onItemMouseEnter2(event2, processedItem) { + this.$emit("item-mouseenter", { + originalEvent: event2, + processedItem + }); + }, "onItemMouseEnter"), + getAriaSetSize: /* @__PURE__ */ __name(function getAriaSetSize() { + var _this = this; + return this.items.filter(function(processedItem) { + return _this.isItemVisible(processedItem) && !_this.getItemProp(processedItem, "separator"); + }).length; + }, "getAriaSetSize"), + getAriaPosInset: /* @__PURE__ */ __name(function getAriaPosInset(index) { + var _this2 = this; + return index - this.items.slice(0, index).filter(function(processedItem) { + return _this2.isItemVisible(processedItem) && _this2.getItemProp(processedItem, "separator"); + }).length + 1; + }, "getAriaPosInset"), + getMenuItemProps: /* @__PURE__ */ __name(function getMenuItemProps3(processedItem, index) { + return { + action: mergeProps({ + "class": this.cx("itemLink"), + tabindex: -1 + }, this.getPTOptions(processedItem, index, "itemLink")), + icon: mergeProps({ + "class": [this.cx("itemIcon"), this.getItemProp(processedItem, "icon")] + }, this.getPTOptions(processedItem, index, "itemIcon")), + label: mergeProps({ + "class": this.cx("label") + }, this.getPTOptions(processedItem, index, "label")), + submenuicon: mergeProps({ + "class": this.cx("submenuIcon") + }, this.getPTOptions(processedItem, index, "submenuIcon")) + }; + }, "getMenuItemProps") + }, + components: { + AngleRightIcon: script$1q, + AngleDownIcon: script$1H + }, + directives: { + ripple: Ripple + } +}; +var _hoisted_1$1$4 = ["tabindex"]; +var _hoisted_2$1$3 = ["id", "aria-label", "aria-disabled", "aria-expanded", "aria-haspopup", "aria-level", "aria-setsize", "aria-posinset", "data-p-active", "data-p-focused", "data-p-disabled"]; +var _hoisted_3$a = ["onClick", "onMouseenter"]; +var _hoisted_4$6 = ["href", "target"]; +var _hoisted_5$2 = ["id"]; +function render$1$5(_ctx, _cache, $props, $setup, $data, $options) { + var _component_MegaMenuSub = resolveComponent("MegaMenuSub", true); + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createElementBlock("ul", mergeProps({ + "class": $props.level === 0 ? _ctx.cx("rootList") : _ctx.cx("submenu"), + tabindex: $props.tabindex + }, $props.level === 0 ? _ctx.ptm("rootList") : _ctx.ptm("submenu")), [$props.submenu ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + "class": [_ctx.cx("submenuLabel", { + submenu: $props.submenu + }), $options.getItemProp($props.submenu, "class")], + style: $options.getItemProp($props.submenu, "style"), + role: "presentation" + }, _ctx.ptm("submenuLabel")), toDisplayString($options.getItemLabel($props.submenu)), 17)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList($props.items, function(processedItem, index) { + return openBlock(), createElementBlock(Fragment, { + key: $options.getItemKey(processedItem) + }, [$options.isItemVisible(processedItem) && !$options.getItemProp(processedItem, "separator") ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + id: $options.getItemId(processedItem), + style: $options.getItemProp(processedItem, "style"), + "class": [_ctx.cx("item", { + processedItem + }), $options.getItemProp(processedItem, "class")], + role: "menuitem", + "aria-label": $options.getItemLabel(processedItem), + "aria-disabled": $options.isItemDisabled(processedItem) || void 0, + "aria-expanded": $options.isItemGroup(processedItem) ? $options.isItemActive(processedItem) : void 0, + "aria-haspopup": $options.isItemGroup(processedItem) && !$options.getItemProp(processedItem, "to") ? "menu" : void 0, + "aria-level": $props.level + 1, + "aria-setsize": $options.getAriaSetSize(), + "aria-posinset": $options.getAriaPosInset(index), + ref_for: true + }, $options.getPTOptions(processedItem, index, "item"), { + "data-p-active": $options.isItemActive(processedItem), + "data-p-focused": $options.isItemFocused(processedItem), + "data-p-disabled": $options.isItemDisabled(processedItem) + }), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("itemContent"), + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onItemClick($event, processedItem); + }, "onClick"), + onMouseenter: /* @__PURE__ */ __name(function onMouseenter($event) { + return $options.onItemMouseEnter($event, processedItem); + }, "onMouseenter"), + ref_for: true + }, $options.getPTOptions(processedItem, index, "itemContent")), [!$props.templates.item ? withDirectives((openBlock(), createElementBlock("a", mergeProps({ + key: 0, + href: $options.getItemProp(processedItem, "url"), + "class": _ctx.cx("itemLink"), + target: $options.getItemProp(processedItem, "target"), + tabindex: "-1", + ref_for: true + }, $options.getPTOptions(processedItem, index, "itemLink")), [$props.templates.itemicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.itemicon), { + key: 0, + item: processedItem.item, + "class": normalizeClass(_ctx.cx("itemIcon")) + }, null, 8, ["item", "class"])) : $options.getItemProp(processedItem, "icon") ? (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + "class": [_ctx.cx("itemIcon"), $options.getItemProp(processedItem, "icon")], + ref_for: true + }, $options.getPTOptions(processedItem, index, "itemIcon")), null, 16)) : createCommentVNode("", true), createBaseVNode("span", mergeProps({ + "class": _ctx.cx("itemLabel"), + ref_for: true + }, $options.getPTOptions(processedItem, index, "itemLabel")), toDisplayString($options.getItemLabel(processedItem)), 17), $options.isItemGroup(processedItem) ? (openBlock(), createElementBlock(Fragment, { + key: 2 + }, [$props.templates.submenuicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.submenuicon), mergeProps({ + key: 0, + active: $options.isItemActive(processedItem), + "class": _ctx.cx("submenuIcon"), + ref_for: true + }, $options.getPTOptions(processedItem, index, "submenuIcon")), null, 16, ["active", "class"])) : (openBlock(), createBlock(resolveDynamicComponent($props.horizontal || $props.mobileActive ? "AngleDownIcon" : "AngleRightIcon"), mergeProps({ + key: 1, + "class": _ctx.cx("submenuIcon"), + ref_for: true + }, $options.getPTOptions(processedItem, index, "submenuIcon")), null, 16, ["class"]))], 64)) : createCommentVNode("", true)], 16, _hoisted_4$6)), [[_directive_ripple]]) : (openBlock(), createBlock(resolveDynamicComponent($props.templates.item), { + key: 1, + item: processedItem.item, + hasSubmenu: $options.isItemGroup(processedItem), + label: $options.getItemLabel(processedItem), + props: $options.getMenuItemProps(processedItem, index) + }, null, 8, ["item", "hasSubmenu", "label", "props"]))], 16, _hoisted_3$a), $options.isItemVisible(processedItem) && $options.isItemGroup(processedItem) ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("overlay"), + ref_for: true + }, _ctx.ptm("overlay")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("grid"), + ref_for: true + }, _ctx.ptm("grid")), [(openBlock(true), createElementBlock(Fragment, null, renderList(processedItem.items, function(col) { + return openBlock(), createElementBlock("div", mergeProps({ + key: $options.getItemKey(col), + "class": _ctx.cx("column", { + processedItem + }), + ref_for: true + }, _ctx.ptm("column")), [(openBlock(true), createElementBlock(Fragment, null, renderList(col, function(submenu) { + return openBlock(), createBlock(_component_MegaMenuSub, { + key: $options.getSubListKey(submenu), + id: $options.getSubListId(submenu), + style: normalizeStyle(_ctx.sx("submenu", true, { + processedItem + })), + role: "menu", + menuId: $props.menuId, + focusedItemId: $props.focusedItemId, + submenu, + items: submenu.items, + templates: $props.templates, + level: $props.level + 1, + mobileActive: $props.mobileActive, + pt: _ctx.pt, + unstyled: _ctx.unstyled, + onItemClick: _cache[0] || (_cache[0] = function($event) { + return _ctx.$emit("item-click", $event); + }), + onItemMouseenter: _cache[1] || (_cache[1] = function($event) { + return _ctx.$emit("item-mouseenter", $event); + }) + }, null, 8, ["id", "style", "menuId", "focusedItemId", "submenu", "items", "templates", "level", "mobileActive", "pt", "unstyled"]); + }), 128))], 16); + }), 128))], 16)], 16)) : createCommentVNode("", true)], 16, _hoisted_2$1$3)) : createCommentVNode("", true), $options.isItemVisible(processedItem) && $options.getItemProp(processedItem, "separator") ? (openBlock(), createElementBlock("li", mergeProps({ + key: 1, + id: $options.getItemId(processedItem), + "class": [_ctx.cx("separator"), $options.getItemProp(processedItem, "class")], + style: $options.getItemProp(processedItem, "style"), + role: "separator", + ref_for: true + }, _ctx.ptm("separator")), null, 16, _hoisted_5$2)) : createCommentVNode("", true)], 64); + }), 128))], 16, _hoisted_1$1$4); +} +__name(render$1$5, "render$1$5"); +script$1$k.render = render$1$5; +var script$y = { + name: "MegaMenu", + "extends": script$2$5, + inheritAttrs: false, + emits: ["focus", "blur"], + outsideClickListener: null, + resizeListener: null, + matchMediaListener: null, + container: null, + menubar: null, + searchTimeout: null, + searchValue: null, + data: /* @__PURE__ */ __name(function data20() { + return { + id: this.$attrs.id, + mobileActive: false, + focused: false, + focusedItemInfo: { + index: -1, + key: "", + parentKey: "" + }, + activeItem: null, + dirty: false, + query: null, + queryMatches: false + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId5(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + activeItem: /* @__PURE__ */ __name(function activeItem(newItem) { + if (isNotEmpty(newItem)) { + this.bindOutsideClickListener(); + this.bindResizeListener(); + } else { + this.unbindOutsideClickListener(); + this.unbindResizeListener(); + } + }, "activeItem") + }, + mounted: /* @__PURE__ */ __name(function mounted21() { + this.id = this.id || UniqueComponentId(); + this.bindMatchMediaListener(); + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount8() { + this.mobileActive = false; + this.unbindOutsideClickListener(); + this.unbindResizeListener(); + this.unbindMatchMediaListener(); + }, "beforeUnmount"), + methods: { + getItemProp: /* @__PURE__ */ __name(function getItemProp3(item8, name4) { + return item8 ? resolve(item8[name4]) : void 0; + }, "getItemProp"), + getItemLabel: /* @__PURE__ */ __name(function getItemLabel2(item8) { + return this.getItemProp(item8, "label"); + }, "getItemLabel"), + isItemDisabled: /* @__PURE__ */ __name(function isItemDisabled2(item8) { + return this.getItemProp(item8, "disabled"); + }, "isItemDisabled"), + isItemVisible: /* @__PURE__ */ __name(function isItemVisible2(item8) { + return this.getItemProp(item8, "visible") !== false; + }, "isItemVisible"), + isItemGroup: /* @__PURE__ */ __name(function isItemGroup2(item8) { + return isNotEmpty(this.getItemProp(item8, "items")); + }, "isItemGroup"), + isItemSeparator: /* @__PURE__ */ __name(function isItemSeparator(item8) { + return this.getItemProp(item8, "separator"); + }, "isItemSeparator"), + getProccessedItemLabel: /* @__PURE__ */ __name(function getProccessedItemLabel(processedItem) { + return processedItem ? this.getItemLabel(processedItem.item) : void 0; + }, "getProccessedItemLabel"), + isProccessedItemGroup: /* @__PURE__ */ __name(function isProccessedItemGroup(processedItem) { + return processedItem && isNotEmpty(processedItem.items); + }, "isProccessedItemGroup"), + toggle: /* @__PURE__ */ __name(function toggle2(event2) { + var _this = this; + if (this.mobileActive) { + this.mobileActive = false; + ZIndex.clear(this.menubar); + this.hide(); + } else { + this.mobileActive = true; + ZIndex.set("menu", this.menubar, this.$primevue.config.zIndex.menu); + setTimeout(function() { + _this.show(); + }, 1); + } + this.bindOutsideClickListener(); + event2.preventDefault(); + }, "toggle"), + show: /* @__PURE__ */ __name(function show2() { + this.focusedItemInfo = { + index: this.findFirstFocusedItemIndex(), + level: 0, + parentKey: "" + }; + focus(this.menubar); + }, "show"), + hide: /* @__PURE__ */ __name(function hide3(event2, isFocus) { + var _this2 = this; + if (this.mobileActive) { + this.mobileActive = false; + setTimeout(function() { + focus(_this2.$refs.menubutton, { + preventScroll: true + }); + }, 1); + } + this.activeItem = null; + this.focusedItemInfo = { + index: -1, + key: "", + parentKey: "" + }; + isFocus && focus(this.menubar); + this.dirty = false; + }, "hide"), + onFocus: /* @__PURE__ */ __name(function onFocus8(event2) { + this.focused = true; + if (this.focusedItemInfo.index === -1) { + var index = this.findFirstFocusedItemIndex(); + var processedItem = this.findVisibleItem(index); + this.focusedItemInfo = { + index, + key: processedItem.key, + parentKey: processedItem.parentKey + }; + } + this.$emit("focus", event2); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur8(event2) { + this.focused = false; + this.focusedItemInfo = { + index: -1, + key: "", + parentKey: "" + }; + this.searchValue = ""; + this.dirty = false; + this.$emit("blur", event2); + }, "onBlur"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown8(event2) { + if (this.disabled) { + event2.preventDefault(); + return; + } + var metaKey = event2.metaKey || event2.ctrlKey; + switch (event2.code) { + case "ArrowDown": + this.onArrowDownKey(event2); + break; + case "ArrowUp": + this.onArrowUpKey(event2); + break; + case "ArrowLeft": + this.onArrowLeftKey(event2); + break; + case "ArrowRight": + this.onArrowRightKey(event2); + break; + case "Home": + this.onHomeKey(event2); + break; + case "End": + this.onEndKey(event2); + break; + case "Space": + this.onSpaceKey(event2); + break; + case "Enter": + case "NumpadEnter": + this.onEnterKey(event2); + break; + case "Escape": + this.onEscapeKey(event2); + break; + case "Tab": + this.onTabKey(event2); + break; + case "PageDown": + case "PageUp": + case "Backspace": + case "ShiftLeft": + case "ShiftRight": + break; + default: + if (!metaKey && isPrintableCharacter(event2.key)) { + this.searchItems(event2, event2.key); + } + break; + } + }, "onKeyDown"), + onItemChange: /* @__PURE__ */ __name(function onItemChange(event2) { + var processedItem = event2.processedItem, isFocus = event2.isFocus; + if (isEmpty(processedItem)) return; + var index = processedItem.index, key = processedItem.key, parentKey = processedItem.parentKey, items2 = processedItem.items; + var grouped = isNotEmpty(items2); + grouped && (this.activeItem = processedItem); + this.focusedItemInfo = { + index, + key, + parentKey + }; + grouped && (this.dirty = true); + isFocus && focus(this.menubar); + }, "onItemChange"), + onItemClick: /* @__PURE__ */ __name(function onItemClick3(event2) { + var originalEvent = event2.originalEvent, processedItem = event2.processedItem; + var grouped = this.isProccessedItemGroup(processedItem); + var root35 = isEmpty(processedItem.parent); + var selected3 = this.isSelected(processedItem); + if (selected3) { + var index = processedItem.index, key = processedItem.key, parentKey = processedItem.parentKey; + this.activeItem = null; + this.focusedItemInfo = { + index, + key, + parentKey + }; + this.dirty = !root35; + if (!this.mobileActive) { + focus(this.menubar, { + preventScroll: true + }); + } + } else { + if (grouped) { + this.onItemChange(event2); + } else { + this.hide(originalEvent); + } + } + }, "onItemClick"), + onItemMouseEnter: /* @__PURE__ */ __name(function onItemMouseEnter3(event2) { + if (!this.mobileActive && this.dirty) { + this.onItemChange(event2); + } + }, "onItemMouseEnter"), + menuButtonClick: /* @__PURE__ */ __name(function menuButtonClick(event2) { + this.toggle(event2); + }, "menuButtonClick"), + menuButtonKeydown: /* @__PURE__ */ __name(function menuButtonKeydown(event2) { + (event2.code === "Enter" || event2.code === "NumpadEnter" || event2.code === "Space") && this.menuButtonClick(event2); + }, "menuButtonKeydown"), + onArrowDownKey: /* @__PURE__ */ __name(function onArrowDownKey4(event2) { + if (this.horizontal) { + if (isNotEmpty(this.activeItem) && this.activeItem.key === this.focusedItemInfo.key) { + this.focusedItemInfo = { + index: -1, + key: "", + parentKey: this.activeItem.key + }; + } else { + var processedItem = this.findVisibleItem(this.focusedItemInfo.index); + var grouped = this.isProccessedItemGroup(processedItem); + if (grouped) { + this.onItemChange({ + originalEvent: event2, + processedItem + }); + this.focusedItemInfo = { + index: -1, + key: processedItem.key, + parentKey: processedItem.parentKey + }; + this.searchValue = ""; + } + } + } + var itemIndex = this.focusedItemInfo.index !== -1 ? this.findNextItemIndex(this.focusedItemInfo.index) : this.findFirstFocusedItemIndex(); + this.changeFocusedItemInfo(event2, itemIndex); + event2.preventDefault(); + }, "onArrowDownKey"), + onArrowUpKey: /* @__PURE__ */ __name(function onArrowUpKey4(event2) { + if (event2.altKey && this.horizontal) { + if (this.focusedItemInfo.index !== -1) { + var processedItem = this.findVisibleItem(this.focusedItemInfo.index); + var grouped = this.isProccessedItemGroup(processedItem); + if (!grouped && isNotEmpty(this.activeItem)) { + if (this.focusedItemInfo.index === 0) { + this.focusedItemInfo = { + index: this.activeItem.index, + key: this.activeItem.key, + parentKey: this.activeItem.parentKey + }; + this.activeItem = null; + } else { + this.changeFocusedItemInfo(event2, this.findFirstItemIndex()); + } + } + } + event2.preventDefault(); + } else { + var itemIndex = this.focusedItemInfo.index !== -1 ? this.findPrevItemIndex(this.focusedItemInfo.index) : this.findLastFocusedItemIndex(); + this.changeFocusedItemInfo(event2, itemIndex); + event2.preventDefault(); + } + }, "onArrowUpKey"), + onArrowLeftKey: /* @__PURE__ */ __name(function onArrowLeftKey2(event2) { + var processedItem = this.findVisibleItem(this.focusedItemInfo.index); + var grouped = this.isProccessedItemGroup(processedItem); + if (grouped) { + if (this.horizontal) { + var itemIndex = this.focusedItemInfo.index !== -1 ? this.findPrevItemIndex(this.focusedItemInfo.index) : this.findLastFocusedItemIndex(); + this.changeFocusedItemInfo(event2, itemIndex); + } + } else { + if (this.vertical && isNotEmpty(this.activeItem)) { + if (processedItem.columnIndex === 0) { + this.focusedItemInfo = { + index: this.activeItem.index, + key: this.activeItem.key, + parentKey: this.activeItem.parentKey + }; + this.activeItem = null; + } + } + var columnIndex = processedItem.columnIndex - 1; + var _itemIndex = this.visibleItems.findIndex(function(item8) { + return item8.columnIndex === columnIndex; + }); + _itemIndex !== -1 && this.changeFocusedItemInfo(event2, _itemIndex); + } + event2.preventDefault(); + }, "onArrowLeftKey"), + onArrowRightKey: /* @__PURE__ */ __name(function onArrowRightKey2(event2) { + var processedItem = this.findVisibleItem(this.focusedItemInfo.index); + var grouped = this.isProccessedItemGroup(processedItem); + if (grouped) { + if (this.vertical) { + if (isNotEmpty(this.activeItem) && this.activeItem.key === processedItem.key) { + this.focusedItemInfo = { + index: -1, + key: "", + parentKey: this.activeItem.key + }; + } else { + var _processedItem = this.findVisibleItem(this.focusedItemInfo.index); + var _grouped = this.isProccessedItemGroup(_processedItem); + if (_grouped) { + this.onItemChange({ + originalEvent: event2, + processedItem: _processedItem + }); + this.focusedItemInfo = { + index: -1, + key: _processedItem.key, + parentKey: _processedItem.parentKey + }; + this.searchValue = ""; + } + } + } + var itemIndex = this.focusedItemInfo.index !== -1 ? this.findNextItemIndex(this.focusedItemInfo.index) : this.findFirstFocusedItemIndex(); + this.changeFocusedItemInfo(event2, itemIndex); + } else { + var columnIndex = processedItem.columnIndex + 1; + var _itemIndex2 = this.visibleItems.findIndex(function(item8) { + return item8.columnIndex === columnIndex; + }); + _itemIndex2 !== -1 && this.changeFocusedItemInfo(event2, _itemIndex2); + } + event2.preventDefault(); + }, "onArrowRightKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey4(event2) { + this.changeFocusedItemInfo(event2, this.findFirstItemIndex()); + event2.preventDefault(); + }, "onHomeKey"), + onEndKey: /* @__PURE__ */ __name(function onEndKey4(event2) { + this.changeFocusedItemInfo(event2, this.findLastItemIndex()); + event2.preventDefault(); + }, "onEndKey"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey3(event2) { + if (this.focusedItemInfo.index !== -1) { + var element = findSingle(this.menubar, 'li[id="'.concat("".concat(this.focusedItemId), '"]')); + var anchorElement = element && findSingle(element, 'a[data-pc-section="itemlink"]'); + anchorElement ? anchorElement.click() : element && element.click(); + var processedItem = this.visibleItems[this.focusedItemInfo.index]; + var grouped = this.isProccessedItemGroup(processedItem); + !grouped && this.changeFocusedItemInfo(event2, this.findFirstFocusedItemIndex()); + } + event2.preventDefault(); + }, "onEnterKey"), + onSpaceKey: /* @__PURE__ */ __name(function onSpaceKey3(event2) { + this.onEnterKey(event2); + }, "onSpaceKey"), + onEscapeKey: /* @__PURE__ */ __name(function onEscapeKey2(event2) { + if (isNotEmpty(this.activeItem)) { + this.focusedItemInfo = { + index: this.activeItem.index, + key: this.activeItem.key + }; + this.activeItem = null; + } + event2.preventDefault(); + }, "onEscapeKey"), + onTabKey: /* @__PURE__ */ __name(function onTabKey2(event2) { + if (this.focusedItemInfo.index !== -1) { + var processedItem = this.findVisibleItem(this.focusedItemInfo.index); + var grouped = this.isProccessedItemGroup(processedItem); + !grouped && this.onItemChange({ + originalEvent: event2, + processedItem + }); + } + this.hide(); + }, "onTabKey"), + bindOutsideClickListener: /* @__PURE__ */ __name(function bindOutsideClickListener4() { + var _this3 = this; + if (!this.outsideClickListener) { + this.outsideClickListener = function(event2) { + var isOutsideContainer = _this3.container && !_this3.container.contains(event2.target); + var isOutsideTarget = !(_this3.target && (_this3.target === event2.target || _this3.target.contains(event2.target))); + if (isOutsideContainer && isOutsideTarget) { + _this3.hide(); + } + }; + document.addEventListener("click", this.outsideClickListener); + } + }, "bindOutsideClickListener"), + unbindOutsideClickListener: /* @__PURE__ */ __name(function unbindOutsideClickListener4() { + if (this.outsideClickListener) { + document.removeEventListener("click", this.outsideClickListener); + this.outsideClickListener = null; + } + }, "unbindOutsideClickListener"), + bindResizeListener: /* @__PURE__ */ __name(function bindResizeListener3() { + var _this4 = this; + if (!this.resizeListener) { + this.resizeListener = function(event2) { + if (!isTouchDevice()) { + _this4.hide(event2, true); + } + _this4.mobileActive = false; + }; + window.addEventListener("resize", this.resizeListener); + } + }, "bindResizeListener"), + unbindResizeListener: /* @__PURE__ */ __name(function unbindResizeListener3() { + if (this.resizeListener) { + window.removeEventListener("resize", this.resizeListener); + this.resizeListener = null; + } + }, "unbindResizeListener"), + bindMatchMediaListener: /* @__PURE__ */ __name(function bindMatchMediaListener4() { + var _this5 = this; + if (!this.matchMediaListener) { + var query = matchMedia("(max-width: ".concat(this.breakpoint, ")")); + this.query = query; + this.queryMatches = query.matches; + this.matchMediaListener = function() { + _this5.queryMatches = query.matches; + _this5.mobileActive = false; + }; + this.query.addEventListener("change", this.matchMediaListener); + } + }, "bindMatchMediaListener"), + unbindMatchMediaListener: /* @__PURE__ */ __name(function unbindMatchMediaListener4() { + if (this.matchMediaListener) { + this.query.removeEventListener("change", this.matchMediaListener); + this.matchMediaListener = null; + } + }, "unbindMatchMediaListener"), + isItemMatched: /* @__PURE__ */ __name(function isItemMatched(processedItem) { + var _this$getProccessedIt; + return this.isValidItem(processedItem) && ((_this$getProccessedIt = this.getProccessedItemLabel(processedItem)) === null || _this$getProccessedIt === void 0 ? void 0 : _this$getProccessedIt.toLocaleLowerCase().startsWith(this.searchValue.toLocaleLowerCase())); + }, "isItemMatched"), + isValidItem: /* @__PURE__ */ __name(function isValidItem(processedItem) { + return !!processedItem && !this.isItemDisabled(processedItem.item) && !this.isItemSeparator(processedItem.item) && this.isItemVisible(processedItem.item); + }, "isValidItem"), + isValidSelectedItem: /* @__PURE__ */ __name(function isValidSelectedItem(processedItem) { + return this.isValidItem(processedItem) && this.isSelected(processedItem); + }, "isValidSelectedItem"), + isSelected: /* @__PURE__ */ __name(function isSelected3(processedItem) { + return isNotEmpty(this.activeItem) ? this.activeItem.key === processedItem.key : false; + }, "isSelected"), + findFirstItemIndex: /* @__PURE__ */ __name(function findFirstItemIndex() { + var _this6 = this; + return this.visibleItems.findIndex(function(processedItem) { + return _this6.isValidItem(processedItem); + }); + }, "findFirstItemIndex"), + findLastItemIndex: /* @__PURE__ */ __name(function findLastItemIndex() { + var _this7 = this; + return findLastIndex(this.visibleItems, function(processedItem) { + return _this7.isValidItem(processedItem); + }); + }, "findLastItemIndex"), + findNextItemIndex: /* @__PURE__ */ __name(function findNextItemIndex(index) { + var _this8 = this; + var matchedItemIndex = index < this.visibleItems.length - 1 ? this.visibleItems.slice(index + 1).findIndex(function(processedItem) { + return _this8.isValidItem(processedItem); + }) : -1; + return matchedItemIndex > -1 ? matchedItemIndex + index + 1 : index; + }, "findNextItemIndex"), + findPrevItemIndex: /* @__PURE__ */ __name(function findPrevItemIndex(index) { + var _this9 = this; + var matchedItemIndex = index > 0 ? findLastIndex(this.visibleItems.slice(0, index), function(processedItem) { + return _this9.isValidItem(processedItem); + }) : -1; + return matchedItemIndex > -1 ? matchedItemIndex : index; + }, "findPrevItemIndex"), + findSelectedItemIndex: /* @__PURE__ */ __name(function findSelectedItemIndex() { + var _this10 = this; + return this.visibleItems.findIndex(function(processedItem) { + return _this10.isValidSelectedItem(processedItem); + }); + }, "findSelectedItemIndex"), + findFirstFocusedItemIndex: /* @__PURE__ */ __name(function findFirstFocusedItemIndex() { + var selectedIndex = this.findSelectedItemIndex(); + return selectedIndex < 0 ? this.findFirstItemIndex() : selectedIndex; + }, "findFirstFocusedItemIndex"), + findLastFocusedItemIndex: /* @__PURE__ */ __name(function findLastFocusedItemIndex() { + var selectedIndex = this.findSelectedItemIndex(); + return selectedIndex < 0 ? this.findLastItemIndex() : selectedIndex; + }, "findLastFocusedItemIndex"), + findVisibleItem: /* @__PURE__ */ __name(function findVisibleItem(index) { + return isNotEmpty(this.visibleItems) ? this.visibleItems[index] : null; + }, "findVisibleItem"), + searchItems: /* @__PURE__ */ __name(function searchItems(event2, _char) { + var _this11 = this; + this.searchValue = (this.searchValue || "") + _char; + var itemIndex = -1; + var matched = false; + if (this.focusedItemInfo.index !== -1) { + itemIndex = this.visibleItems.slice(this.focusedItemInfo.index).findIndex(function(processedItem) { + return _this11.isItemMatched(processedItem); + }); + itemIndex = itemIndex === -1 ? this.visibleItems.slice(0, this.focusedItemInfo.index).findIndex(function(processedItem) { + return _this11.isItemMatched(processedItem); + }) : itemIndex + this.focusedItemInfo.index; + } else { + itemIndex = this.visibleItems.findIndex(function(processedItem) { + return _this11.isItemMatched(processedItem); + }); + } + if (itemIndex !== -1) { + matched = true; + } + if (itemIndex === -1 && this.focusedItemInfo.index === -1) { + itemIndex = this.findFirstFocusedItemIndex(); + } + if (itemIndex !== -1) { + this.changeFocusedItemInfo(event2, itemIndex); + } + if (this.searchTimeout) { + clearTimeout(this.searchTimeout); + } + this.searchTimeout = setTimeout(function() { + _this11.searchValue = ""; + _this11.searchTimeout = null; + }, 500); + return matched; + }, "searchItems"), + changeFocusedItemInfo: /* @__PURE__ */ __name(function changeFocusedItemInfo(event2, index) { + var processedItem = this.findVisibleItem(index); + this.focusedItemInfo.index = index; + this.focusedItemInfo.key = isNotEmpty(processedItem) ? processedItem.key : ""; + this.scrollInView(); + }, "changeFocusedItemInfo"), + scrollInView: /* @__PURE__ */ __name(function scrollInView3() { + var index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : -1; + var id4 = index !== -1 ? "".concat(this.id, "_").concat(index) : this.focusedItemId; + var element; + if (id4 === null && this.queryMatches) { + element = this.$refs.menubutton; + } else { + element = findSingle(this.menubar, 'li[id="'.concat(id4, '"]')); + } + if (element) { + element.scrollIntoView && element.scrollIntoView({ + block: "nearest", + inline: "nearest", + behavior: "smooth" + }); + } + }, "scrollInView"), + createProcessedItems: /* @__PURE__ */ __name(function createProcessedItems(items2) { + var _this12 = this; + var level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; + var parent = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + var parentKey = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : ""; + var columnIndex = arguments.length > 4 ? arguments[4] : void 0; + var processedItems3 = []; + items2 && items2.forEach(function(item8, index) { + var key = (parentKey !== "" ? parentKey + "_" : "") + (columnIndex !== void 0 ? columnIndex + "_" : "") + index; + var newItem = { + item: item8, + index, + level, + key, + parent, + parentKey, + columnIndex: columnIndex !== void 0 ? columnIndex : parent.columnIndex !== void 0 ? parent.columnIndex : index + }; + newItem["items"] = level === 0 && item8.items && item8.items.length > 0 ? item8.items.map(function(_items, _index) { + return _this12.createProcessedItems(_items, level + 1, newItem, key, _index); + }) : _this12.createProcessedItems(item8.items, level + 1, newItem, key); + processedItems3.push(newItem); + }); + return processedItems3; + }, "createProcessedItems"), + containerRef: /* @__PURE__ */ __name(function containerRef3(el) { + this.container = el; + }, "containerRef"), + menubarRef: /* @__PURE__ */ __name(function menubarRef(el) { + this.menubar = el ? el.$el : void 0; + }, "menubarRef") + }, + computed: { + processedItems: /* @__PURE__ */ __name(function processedItems() { + return this.createProcessedItems(this.model || []); + }, "processedItems"), + visibleItems: /* @__PURE__ */ __name(function visibleItems() { + var processedItem = isNotEmpty(this.activeItem) ? this.activeItem : null; + return processedItem && processedItem.key === this.focusedItemInfo.parentKey ? processedItem.items.reduce(function(items2, col) { + col.forEach(function(submenu) { + submenu.items.forEach(function(a) { + items2.push(a); + }); + }); + return items2; + }, []) : this.processedItems; + }, "visibleItems"), + horizontal: /* @__PURE__ */ __name(function horizontal() { + return this.orientation === "horizontal"; + }, "horizontal"), + vertical: /* @__PURE__ */ __name(function vertical() { + return this.orientation === "vertical"; + }, "vertical"), + focusedItemId: /* @__PURE__ */ __name(function focusedItemId() { + return isNotEmpty(this.focusedItemInfo.key) ? "".concat(this.id, "_").concat(this.focusedItemInfo.key) : null; + }, "focusedItemId") + }, + components: { + MegaMenuSub: script$1$k, + BarsIcon: script$1I + } +}; +var _hoisted_1$i = ["id"]; +var _hoisted_2$d = ["aria-haspopup", "aria-expanded", "aria-controls", "aria-label"]; +function render$u(_ctx, _cache, $props, $setup, $data, $options) { + var _component_BarsIcon = resolveComponent("BarsIcon"); + var _component_MegaMenuSub = resolveComponent("MegaMenuSub"); + return openBlock(), createElementBlock("div", mergeProps({ + ref: $options.containerRef, + id: $data.id, + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [_ctx.$slots.start ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("start") + }, _ctx.ptm("start")), [renderSlot(_ctx.$slots, "start")], 16)) : createCommentVNode("", true), renderSlot(_ctx.$slots, _ctx.$slots.button ? "button" : "menubutton", { + id: $data.id, + "class": normalizeClass(_ctx.cx("button")), + toggleCallback: /* @__PURE__ */ __name(function toggleCallback(event2) { + return $options.menuButtonClick(event2); + }, "toggleCallback") + }, function() { + var _ctx$$primevue$config; + return [_ctx.model && _ctx.model.length > 0 ? (openBlock(), createElementBlock("a", mergeProps({ + key: 0, + ref: "menubutton", + role: "button", + tabindex: "0", + "class": _ctx.cx("button"), + "aria-haspopup": _ctx.model.length && _ctx.model.length > 0 ? true : false, + "aria-expanded": $data.mobileActive, + "aria-controls": $data.id, + "aria-label": (_ctx$$primevue$config = _ctx.$primevue.config.locale.aria) === null || _ctx$$primevue$config === void 0 ? void 0 : _ctx$$primevue$config.navigation, + onClick: _cache[0] || (_cache[0] = function($event) { + return $options.menuButtonClick($event); + }), + onKeydown: _cache[1] || (_cache[1] = function($event) { + return $options.menuButtonKeydown($event); + }) + }, _ctx.ptm("button")), [renderSlot(_ctx.$slots, _ctx.$slots.buttonicon ? "buttonicon" : "menubuttonicon", {}, function() { + return [createVNode(_component_BarsIcon, normalizeProps(guardReactiveProps(_ctx.ptm("buttonIcon"))), null, 16)]; + })], 16, _hoisted_2$d)) : createCommentVNode("", true)]; + }), createVNode(_component_MegaMenuSub, { + ref: $options.menubarRef, + id: $data.id + "_list", + tabindex: !_ctx.disabled ? _ctx.tabindex : -1, + role: "menubar", + "aria-label": _ctx.ariaLabel, + "aria-labelledby": _ctx.ariaLabelledby, + "aria-disabled": _ctx.disabled || void 0, + "aria-orientation": _ctx.orientation, + "aria-activedescendant": $data.focused ? $options.focusedItemId : void 0, + menuId: $data.id, + focusedItemId: $data.focused ? $options.focusedItemId : void 0, + items: $options.processedItems, + horizontal: $options.horizontal, + templates: _ctx.$slots, + activeItem: $data.activeItem, + mobileActive: $data.mobileActive, + level: 0, + style: normalizeStyle(_ctx.sx("rootList")), + pt: _ctx.pt, + unstyled: _ctx.unstyled, + onFocus: $options.onFocus, + onBlur: $options.onBlur, + onKeydown: $options.onKeyDown, + onItemClick: $options.onItemClick, + onItemMouseenter: $options.onItemMouseEnter + }, null, 8, ["id", "tabindex", "aria-label", "aria-labelledby", "aria-disabled", "aria-orientation", "aria-activedescendant", "menuId", "focusedItemId", "items", "horizontal", "templates", "activeItem", "mobileActive", "style", "pt", "unstyled", "onFocus", "onBlur", "onKeydown", "onItemClick", "onItemMouseenter"]), _ctx.$slots.end ? (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": _ctx.cx("end") + }, _ctx.ptm("end")), [renderSlot(_ctx.$slots, "end")], 16)) : createCommentVNode("", true)], 16, _hoisted_1$i); +} +__name(render$u, "render$u"); +script$y.render = render$u; +var theme$i = /* @__PURE__ */ __name(function theme22(_ref) { + var dt = _ref.dt; + return "\n.p-menu {\n background: ".concat(dt("menu.background"), ";\n color: ").concat(dt("menu.color"), ";\n border: 1px solid ").concat(dt("menu.border.color"), ";\n border-radius: ").concat(dt("menu.border.radius"), ";\n min-width: 12.5rem;\n}\n\n.p-menu-list {\n margin: 0;\n padding: ").concat(dt("menu.list.padding"), ";\n outline: 0 none;\n list-style: none;\n display: flex;\n flex-direction: column;\n gap: ").concat(dt("menu.list.gap"), ";\n}\n\n.p-menu-item-content {\n transition: background ").concat(dt("menu.transition.duration"), ", color ").concat(dt("menu.transition.duration"), ";\n border-radius: ").concat(dt("menu.item.border.radius"), ";\n color: ").concat(dt("menu.item.color"), ";\n}\n\n.p-menu-item-link {\n cursor: pointer;\n display: flex;\n align-items: center;\n text-decoration: none;\n overflow: hidden;\n position: relative;\n color: inherit;\n padding: ").concat(dt("menu.item.padding"), ";\n gap: ").concat(dt("menu.item.gap"), ";\n user-select: none;\n outline: 0 none;\n}\n\n.p-menu-item-label {\n line-height: 1;\n}\n\n.p-menu-item-icon {\n color: ").concat(dt("menu.item.icon.color"), ";\n}\n\n.p-menu-item.p-focus .p-menu-item-content {\n color: ").concat(dt("menu.item.focus.color"), ";\n background: ").concat(dt("menu.item.focus.background"), ";\n}\n\n.p-menu-item.p-focus .p-menu-item-icon {\n color: ").concat(dt("menu.item.icon.focus.color"), ";\n}\n\n.p-menu-item:not(.p-disabled) .p-menu-item-content:hover {\n color: ").concat(dt("menu.item.focus.color"), ";\n background: ").concat(dt("menu.item.focus.background"), ";\n}\n\n.p-menu-item:not(.p-disabled) .p-menu-item-content:hover .p-menu-item-icon {\n color: ").concat(dt("menu.item.icon.focus.color"), ";\n}\n\n.p-menu-overlay {\n box-shadow: ").concat(dt("menu.shadow"), ";\n}\n\n.p-menu-submenu-label {\n background: ").concat(dt("menu.submenu.label.background"), ";\n padding: ").concat(dt("menu.submenu.label.padding"), ";\n color: ").concat(dt("menu.submenu.label.color"), ";\n font-weight: ").concat(dt("menu.submenu.label.font.weight"), ";\n}\n\n.p-menu-separator {\n border-block-start: 1px solid ").concat(dt("menu.separator.border.color"), ";\n}\n"); +}, "theme"); +var classes$j = { + root: /* @__PURE__ */ __name(function root18(_ref2) { + var props = _ref2.props; + return ["p-menu p-component", { + "p-menu-overlay": props.popup + }]; + }, "root"), + start: "p-menu-start", + list: "p-menu-list", + submenuLabel: "p-menu-submenu-label", + separator: "p-menu-separator", + end: "p-menu-end", + item: /* @__PURE__ */ __name(function item4(_ref3) { + var instance = _ref3.instance; + return ["p-menu-item", { + "p-focus": instance.id === instance.focusedOptionId, + "p-disabled": instance.disabled() + }]; + }, "item"), + itemContent: "p-menu-item-content", + itemLink: "p-menu-item-link", + itemIcon: "p-menu-item-icon", + itemLabel: "p-menu-item-label" +}; +var MenuStyle = BaseStyle.extend({ + name: "menu", + theme: theme$i, + classes: classes$j +}); +var script$2$4 = { + name: "BaseMenu", + "extends": script$1d, + props: { + popup: { + type: Boolean, + "default": false + }, + model: { + type: Array, + "default": null + }, + appendTo: { + type: [String, Object], + "default": "body" + }, + autoZIndex: { + type: Boolean, + "default": true + }, + baseZIndex: { + type: Number, + "default": 0 + }, + tabindex: { + type: Number, + "default": 0 + }, + ariaLabel: { + type: String, + "default": null + }, + ariaLabelledby: { + type: String, + "default": null + } + }, + style: MenuStyle, + provide: /* @__PURE__ */ __name(function provide32() { + return { + $pcMenu: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1$j = { + name: "Menuitem", + hostName: "Menu", + "extends": script$1d, + inheritAttrs: false, + emits: ["item-click", "item-mousemove"], + props: { + item: null, + templates: null, + id: null, + focusedOptionId: null, + index: null + }, + methods: { + getItemProp: /* @__PURE__ */ __name(function getItemProp4(processedItem, name4) { + return processedItem && processedItem.item ? resolve(processedItem.item[name4]) : void 0; + }, "getItemProp"), + getPTOptions: /* @__PURE__ */ __name(function getPTOptions4(key) { + return this.ptm(key, { + context: { + item: this.item, + index: this.index, + focused: this.isItemFocused(), + disabled: this.disabled() + } + }); + }, "getPTOptions"), + isItemFocused: /* @__PURE__ */ __name(function isItemFocused2() { + return this.focusedOptionId === this.id; + }, "isItemFocused"), + onItemClick: /* @__PURE__ */ __name(function onItemClick4(event2) { + var command = this.getItemProp(this.item, "command"); + command && command({ + originalEvent: event2, + item: this.item.item + }); + this.$emit("item-click", { + originalEvent: event2, + item: this.item, + id: this.id + }); + }, "onItemClick"), + onItemMouseMove: /* @__PURE__ */ __name(function onItemMouseMove(event2) { + this.$emit("item-mousemove", { + originalEvent: event2, + item: this.item, + id: this.id + }); + }, "onItemMouseMove"), + visible: /* @__PURE__ */ __name(function visible2() { + return typeof this.item.visible === "function" ? this.item.visible() : this.item.visible !== false; + }, "visible"), + disabled: /* @__PURE__ */ __name(function disabled3() { + return typeof this.item.disabled === "function" ? this.item.disabled() : this.item.disabled; + }, "disabled"), + label: /* @__PURE__ */ __name(function label4() { + return typeof this.item.label === "function" ? this.item.label() : this.item.label; + }, "label"), + getMenuItemProps: /* @__PURE__ */ __name(function getMenuItemProps4(item8) { + return { + action: mergeProps({ + "class": this.cx("itemLink"), + tabindex: "-1" + }, this.getPTOptions("itemLink")), + icon: mergeProps({ + "class": [this.cx("itemIcon"), item8.icon] + }, this.getPTOptions("itemIcon")), + label: mergeProps({ + "class": this.cx("itemLabel") + }, this.getPTOptions("itemLabel")) + }; + }, "getMenuItemProps") + }, + directives: { + ripple: Ripple + } +}; +var _hoisted_1$1$3 = ["id", "aria-label", "aria-disabled", "data-p-focused", "data-p-disabled"]; +var _hoisted_2$1$2 = ["href", "target"]; +function render$1$4(_ctx, _cache, $props, $setup, $data, $options) { + var _directive_ripple = resolveDirective("ripple"); + return $options.visible() ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + id: $props.id, + "class": [_ctx.cx("item"), $props.item["class"]], + role: "menuitem", + style: $props.item.style, + "aria-label": $options.label(), + "aria-disabled": $options.disabled() + }, $options.getPTOptions("item"), { + "data-p-focused": $options.isItemFocused(), + "data-p-disabled": $options.disabled() || false + }), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("itemContent"), + onClick: _cache[0] || (_cache[0] = function($event) { + return $options.onItemClick($event); + }), + onMousemove: _cache[1] || (_cache[1] = function($event) { + return $options.onItemMouseMove($event); + }) + }, $options.getPTOptions("itemContent")), [!$props.templates.item ? withDirectives((openBlock(), createElementBlock("a", mergeProps({ + key: 0, + href: $props.item.url, + "class": _ctx.cx("itemLink"), + target: $props.item.target, + tabindex: "-1" + }, $options.getPTOptions("itemLink")), [$props.templates.itemicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.itemicon), { + key: 0, + item: $props.item, + "class": normalizeClass(_ctx.cx("itemIcon")) + }, null, 8, ["item", "class"])) : $props.item.icon ? (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + "class": [_ctx.cx("itemIcon"), $props.item.icon] + }, $options.getPTOptions("itemIcon")), null, 16)) : createCommentVNode("", true), createBaseVNode("span", mergeProps({ + "class": _ctx.cx("itemLabel") + }, $options.getPTOptions("itemLabel")), toDisplayString($options.label()), 17)], 16, _hoisted_2$1$2)), [[_directive_ripple]]) : $props.templates.item ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.item), { + key: 1, + item: $props.item, + label: $options.label(), + props: $options.getMenuItemProps($props.item) + }, null, 8, ["item", "label", "props"])) : createCommentVNode("", true)], 16)], 16, _hoisted_1$1$3)) : createCommentVNode("", true); +} +__name(render$1$4, "render$1$4"); +script$1$j.render = render$1$4; +function _toConsumableArray$7(r) { + return _arrayWithoutHoles$7(r) || _iterableToArray$7(r) || _unsupportedIterableToArray$8(r) || _nonIterableSpread$7(); +} +__name(_toConsumableArray$7, "_toConsumableArray$7"); +function _nonIterableSpread$7() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$7, "_nonIterableSpread$7"); +function _unsupportedIterableToArray$8(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$8(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$8(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$8, "_unsupportedIterableToArray$8"); +function _iterableToArray$7(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$7, "_iterableToArray$7"); +function _arrayWithoutHoles$7(r) { + if (Array.isArray(r)) return _arrayLikeToArray$8(r); +} +__name(_arrayWithoutHoles$7, "_arrayWithoutHoles$7"); +function _arrayLikeToArray$8(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$8, "_arrayLikeToArray$8"); +var script$x = { + name: "Menu", + "extends": script$2$4, + inheritAttrs: false, + emits: ["show", "hide", "focus", "blur"], + data: /* @__PURE__ */ __name(function data21() { + return { + id: this.$attrs.id, + overlayVisible: false, + focused: false, + focusedOptionIndex: -1, + selectedOptionIndex: -1 + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId6(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId") + }, + target: null, + outsideClickListener: null, + scrollHandler: null, + resizeListener: null, + container: null, + list: null, + mounted: /* @__PURE__ */ __name(function mounted22() { + this.id = this.id || UniqueComponentId(); + if (!this.popup) { + this.bindResizeListener(); + this.bindOutsideClickListener(); + } + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount9() { + this.unbindResizeListener(); + this.unbindOutsideClickListener(); + if (this.scrollHandler) { + this.scrollHandler.destroy(); + this.scrollHandler = null; + } + this.target = null; + if (this.container && this.autoZIndex) { + ZIndex.clear(this.container); + } + this.container = null; + }, "beforeUnmount"), + methods: { + itemClick: /* @__PURE__ */ __name(function itemClick(event2) { + var item8 = event2.item; + if (this.disabled(item8)) { + return; + } + if (item8.command) { + item8.command(event2); + } + if (this.overlayVisible) this.hide(); + if (!this.popup && this.focusedOptionIndex !== event2.id) { + this.focusedOptionIndex = event2.id; + } + }, "itemClick"), + itemMouseMove: /* @__PURE__ */ __name(function itemMouseMove(event2) { + if (this.focused) { + this.focusedOptionIndex = event2.id; + } + }, "itemMouseMove"), + onListFocus: /* @__PURE__ */ __name(function onListFocus2(event2) { + this.focused = true; + !this.popup && this.changeFocusedOptionIndex(0); + this.$emit("focus", event2); + }, "onListFocus"), + onListBlur: /* @__PURE__ */ __name(function onListBlur2(event2) { + this.focused = false; + this.focusedOptionIndex = -1; + this.$emit("blur", event2); + }, "onListBlur"), + onListKeyDown: /* @__PURE__ */ __name(function onListKeyDown2(event2) { + switch (event2.code) { + case "ArrowDown": + this.onArrowDownKey(event2); + break; + case "ArrowUp": + this.onArrowUpKey(event2); + break; + case "Home": + this.onHomeKey(event2); + break; + case "End": + this.onEndKey(event2); + break; + case "Enter": + case "NumpadEnter": + this.onEnterKey(event2); + break; + case "Space": + this.onSpaceKey(event2); + break; + case "Escape": + if (this.popup) { + focus(this.target); + this.hide(); + } + case "Tab": + this.overlayVisible && this.hide(); + break; + } + }, "onListKeyDown"), + onArrowDownKey: /* @__PURE__ */ __name(function onArrowDownKey5(event2) { + var optionIndex = this.findNextOptionIndex(this.focusedOptionIndex); + this.changeFocusedOptionIndex(optionIndex); + event2.preventDefault(); + }, "onArrowDownKey"), + onArrowUpKey: /* @__PURE__ */ __name(function onArrowUpKey5(event2) { + if (event2.altKey && this.popup) { + focus(this.target); + this.hide(); + event2.preventDefault(); + } else { + var optionIndex = this.findPrevOptionIndex(this.focusedOptionIndex); + this.changeFocusedOptionIndex(optionIndex); + event2.preventDefault(); + } + }, "onArrowUpKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey5(event2) { + this.changeFocusedOptionIndex(0); + event2.preventDefault(); + }, "onHomeKey"), + onEndKey: /* @__PURE__ */ __name(function onEndKey5(event2) { + this.changeFocusedOptionIndex(find(this.container, 'li[data-pc-section="item"][data-p-disabled="false"]').length - 1); + event2.preventDefault(); + }, "onEndKey"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey4(event2) { + var element = findSingle(this.list, 'li[id="'.concat("".concat(this.focusedOptionIndex), '"]')); + var anchorElement = element && findSingle(element, 'a[data-pc-section="itemlink"]'); + this.popup && focus(this.target); + anchorElement ? anchorElement.click() : element && element.click(); + event2.preventDefault(); + }, "onEnterKey"), + onSpaceKey: /* @__PURE__ */ __name(function onSpaceKey4(event2) { + this.onEnterKey(event2); + }, "onSpaceKey"), + findNextOptionIndex: /* @__PURE__ */ __name(function findNextOptionIndex3(index) { + var links = find(this.container, 'li[data-pc-section="item"][data-p-disabled="false"]'); + var matchedOptionIndex = _toConsumableArray$7(links).findIndex(function(link) { + return link.id === index; + }); + return matchedOptionIndex > -1 ? matchedOptionIndex + 1 : 0; + }, "findNextOptionIndex"), + findPrevOptionIndex: /* @__PURE__ */ __name(function findPrevOptionIndex3(index) { + var links = find(this.container, 'li[data-pc-section="item"][data-p-disabled="false"]'); + var matchedOptionIndex = _toConsumableArray$7(links).findIndex(function(link) { + return link.id === index; + }); + return matchedOptionIndex > -1 ? matchedOptionIndex - 1 : 0; + }, "findPrevOptionIndex"), + changeFocusedOptionIndex: /* @__PURE__ */ __name(function changeFocusedOptionIndex3(index) { + var links = find(this.container, 'li[data-pc-section="item"][data-p-disabled="false"]'); + var order = index >= links.length ? links.length - 1 : index < 0 ? 0 : index; + order > -1 && (this.focusedOptionIndex = links[order].getAttribute("id")); + }, "changeFocusedOptionIndex"), + toggle: /* @__PURE__ */ __name(function toggle3(event2) { + if (this.overlayVisible) this.hide(); + else this.show(event2); + }, "toggle"), + show: /* @__PURE__ */ __name(function show3(event2) { + this.overlayVisible = true; + this.target = event2.currentTarget; + }, "show"), + hide: /* @__PURE__ */ __name(function hide4() { + this.overlayVisible = false; + this.target = null; + }, "hide"), + onEnter: /* @__PURE__ */ __name(function onEnter3(el) { + addStyle(el, { + position: "absolute", + top: "0", + left: "0" + }); + this.alignOverlay(); + this.bindOutsideClickListener(); + this.bindResizeListener(); + this.bindScrollListener(); + if (this.autoZIndex) { + ZIndex.set("menu", el, this.baseZIndex + this.$primevue.config.zIndex.menu); + } + if (this.popup) { + focus(this.list); + } + this.$emit("show"); + }, "onEnter"), + onLeave: /* @__PURE__ */ __name(function onLeave3() { + this.unbindOutsideClickListener(); + this.unbindResizeListener(); + this.unbindScrollListener(); + this.$emit("hide"); + }, "onLeave"), + onAfterLeave: /* @__PURE__ */ __name(function onAfterLeave3(el) { + if (this.autoZIndex) { + ZIndex.clear(el); + } + }, "onAfterLeave"), + alignOverlay: /* @__PURE__ */ __name(function alignOverlay3() { + absolutePosition(this.container, this.target); + var targetWidth = getOuterWidth(this.target); + if (targetWidth > getOuterWidth(this.container)) { + this.container.style.minWidth = getOuterWidth(this.target) + "px"; + } + }, "alignOverlay"), + bindOutsideClickListener: /* @__PURE__ */ __name(function bindOutsideClickListener5() { + var _this = this; + if (!this.outsideClickListener) { + this.outsideClickListener = function(event2) { + var isOutsideContainer = _this.container && !_this.container.contains(event2.target); + var isOutsideTarget = !(_this.target && (_this.target === event2.target || _this.target.contains(event2.target))); + if (_this.overlayVisible && isOutsideContainer && isOutsideTarget) { + _this.hide(); + } else if (!_this.popup && isOutsideContainer && isOutsideTarget) { + _this.focusedOptionIndex = -1; + } + }; + document.addEventListener("click", this.outsideClickListener); + } + }, "bindOutsideClickListener"), + unbindOutsideClickListener: /* @__PURE__ */ __name(function unbindOutsideClickListener5() { + if (this.outsideClickListener) { + document.removeEventListener("click", this.outsideClickListener); + this.outsideClickListener = null; + } + }, "unbindOutsideClickListener"), + bindScrollListener: /* @__PURE__ */ __name(function bindScrollListener4() { + var _this2 = this; + if (!this.scrollHandler) { + this.scrollHandler = new ConnectedOverlayScrollHandler(this.target, function() { + if (_this2.overlayVisible) { + _this2.hide(); + } + }); + } + this.scrollHandler.bindScrollListener(); + }, "bindScrollListener"), + unbindScrollListener: /* @__PURE__ */ __name(function unbindScrollListener4() { + if (this.scrollHandler) { + this.scrollHandler.unbindScrollListener(); + } + }, "unbindScrollListener"), + bindResizeListener: /* @__PURE__ */ __name(function bindResizeListener4() { + var _this3 = this; + if (!this.resizeListener) { + this.resizeListener = function() { + if (_this3.overlayVisible && !isTouchDevice()) { + _this3.hide(); + } + }; + window.addEventListener("resize", this.resizeListener); + } + }, "bindResizeListener"), + unbindResizeListener: /* @__PURE__ */ __name(function unbindResizeListener4() { + if (this.resizeListener) { + window.removeEventListener("resize", this.resizeListener); + this.resizeListener = null; + } + }, "unbindResizeListener"), + visible: /* @__PURE__ */ __name(function visible3(item8) { + return typeof item8.visible === "function" ? item8.visible() : item8.visible !== false; + }, "visible"), + disabled: /* @__PURE__ */ __name(function disabled4(item8) { + return typeof item8.disabled === "function" ? item8.disabled() : item8.disabled; + }, "disabled"), + label: /* @__PURE__ */ __name(function label5(item8) { + return typeof item8.label === "function" ? item8.label() : item8.label; + }, "label"), + onOverlayClick: /* @__PURE__ */ __name(function onOverlayClick3(event2) { + OverlayEventBus.emit("overlay-click", { + originalEvent: event2, + target: this.target + }); + }, "onOverlayClick"), + containerRef: /* @__PURE__ */ __name(function containerRef4(el) { + this.container = el; + }, "containerRef"), + listRef: /* @__PURE__ */ __name(function listRef(el) { + this.list = el; + }, "listRef") + }, + computed: { + focusedOptionId: /* @__PURE__ */ __name(function focusedOptionId4() { + return this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : null; + }, "focusedOptionId") + }, + components: { + PVMenuitem: script$1$j, + Portal: script$1f + } +}; +var _hoisted_1$h = ["id"]; +var _hoisted_2$c = ["id", "tabindex", "aria-activedescendant", "aria-label", "aria-labelledby"]; +var _hoisted_3$9 = ["id"]; +function render$t(_ctx, _cache, $props, $setup, $data, $options) { + var _component_PVMenuitem = resolveComponent("PVMenuitem"); + var _component_Portal = resolveComponent("Portal"); + return openBlock(), createBlock(_component_Portal, { + appendTo: _ctx.appendTo, + disabled: !_ctx.popup + }, { + "default": withCtx(function() { + return [createVNode(Transition, mergeProps({ + name: "p-connected-overlay", + onEnter: $options.onEnter, + onLeave: $options.onLeave, + onAfterLeave: $options.onAfterLeave + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [(_ctx.popup ? $data.overlayVisible : true) ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: $options.containerRef, + id: $data.id, + "class": _ctx.cx("root"), + onClick: _cache[3] || (_cache[3] = function() { + return $options.onOverlayClick && $options.onOverlayClick.apply($options, arguments); + }) + }, _ctx.ptmi("root")), [_ctx.$slots.start ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("start") + }, _ctx.ptm("start")), [renderSlot(_ctx.$slots, "start")], 16)) : createCommentVNode("", true), createBaseVNode("ul", mergeProps({ + ref: $options.listRef, + id: $data.id + "_list", + "class": _ctx.cx("list"), + role: "menu", + tabindex: _ctx.tabindex, + "aria-activedescendant": $data.focused ? $options.focusedOptionId : void 0, + "aria-label": _ctx.ariaLabel, + "aria-labelledby": _ctx.ariaLabelledby, + onFocus: _cache[0] || (_cache[0] = function() { + return $options.onListFocus && $options.onListFocus.apply($options, arguments); + }), + onBlur: _cache[1] || (_cache[1] = function() { + return $options.onListBlur && $options.onListBlur.apply($options, arguments); + }), + onKeydown: _cache[2] || (_cache[2] = function() { + return $options.onListKeyDown && $options.onListKeyDown.apply($options, arguments); + }) + }, _ctx.ptm("list")), [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.model, function(item8, i) { + return openBlock(), createElementBlock(Fragment, { + key: $options.label(item8) + i.toString() + }, [item8.items && $options.visible(item8) && !item8.separator ? (openBlock(), createElementBlock(Fragment, { + key: 0 + }, [item8.items ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + id: $data.id + "_" + i, + "class": [_ctx.cx("submenuLabel"), item8["class"]], + role: "none", + ref_for: true + }, _ctx.ptm("submenuLabel")), [renderSlot(_ctx.$slots, _ctx.$slots.submenulabel ? "submenulabel" : "submenuheader", { + item: item8 + }, function() { + return [createTextVNode(toDisplayString($options.label(item8)), 1)]; + })], 16, _hoisted_3$9)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(item8.items, function(child, j) { + return openBlock(), createElementBlock(Fragment, { + key: child.label + i + "_" + j + }, [$options.visible(child) && !child.separator ? (openBlock(), createBlock(_component_PVMenuitem, { + key: 0, + id: $data.id + "_" + i + "_" + j, + item: child, + templates: _ctx.$slots, + focusedOptionId: $options.focusedOptionId, + unstyled: _ctx.unstyled, + onItemClick: $options.itemClick, + onItemMousemove: $options.itemMouseMove, + pt: _ctx.pt + }, null, 8, ["id", "item", "templates", "focusedOptionId", "unstyled", "onItemClick", "onItemMousemove", "pt"])) : $options.visible(child) && child.separator ? (openBlock(), createElementBlock("li", mergeProps({ + key: "separator" + i + j, + "class": [_ctx.cx("separator"), item8["class"]], + style: child.style, + role: "separator", + ref_for: true + }, _ctx.ptm("separator")), null, 16)) : createCommentVNode("", true)], 64); + }), 128))], 64)) : $options.visible(item8) && item8.separator ? (openBlock(), createElementBlock("li", mergeProps({ + key: "separator" + i.toString(), + "class": [_ctx.cx("separator"), item8["class"]], + style: item8.style, + role: "separator", + ref_for: true + }, _ctx.ptm("separator")), null, 16)) : (openBlock(), createBlock(_component_PVMenuitem, { + key: $options.label(item8) + i.toString(), + id: $data.id + "_" + i, + item: item8, + index: i, + templates: _ctx.$slots, + focusedOptionId: $options.focusedOptionId, + unstyled: _ctx.unstyled, + onItemClick: $options.itemClick, + onItemMousemove: $options.itemMouseMove, + pt: _ctx.pt + }, null, 8, ["id", "item", "index", "templates", "focusedOptionId", "unstyled", "onItemClick", "onItemMousemove", "pt"]))], 64); + }), 128))], 16, _hoisted_2$c), _ctx.$slots.end ? (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": _ctx.cx("end") + }, _ctx.ptm("end")), [renderSlot(_ctx.$slots, "end")], 16)) : createCommentVNode("", true)], 16, _hoisted_1$h)) : createCommentVNode("", true)]; + }), + _: 3 + }, 16, ["onEnter", "onLeave", "onAfterLeave"])]; + }), + _: 3 + }, 8, ["appendTo", "disabled"]); +} +__name(render$t, "render$t"); +script$x.render = render$t; +var theme$h = /* @__PURE__ */ __name(function theme23(_ref) { + var dt = _ref.dt; + return "\n.p-metergroup {\n display: flex;\n gap: ".concat(dt("metergroup.gap"), ";\n}\n\n.p-metergroup-meters {\n display: flex;\n background: ").concat(dt("metergroup.meters.background"), ";\n border-radius: ").concat(dt("metergroup.border.radius"), ";\n}\n\n.p-metergroup-label-list {\n display: flex;\n flex-wrap: wrap;\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n\n.p-metergroup-label {\n display: inline-flex;\n align-items: center;\n gap: ").concat(dt("metergroup.label.gap"), ";\n}\n\n.p-metergroup-label-marker {\n display: inline-flex;\n width: ").concat(dt("metergroup.label.marker.size"), ";\n height: ").concat(dt("metergroup.label.marker.size"), ";\n border-radius: 100%;\n}\n\n.p-metergroup-label-icon {\n font-size: ").concat(dt("metergroup.label.icon.size"), ";\n width: ").concat(dt("metergroup.label.icon.size"), ";\n height: ").concat(dt("metergroup.label.icon.size"), ";\n}\n\n.p-metergroup-horizontal {\n flex-direction: column;\n}\n\n.p-metergroup-label-list-horizontal {\n gap: ").concat(dt("metergroup.label.list.horizontal.gap"), ";\n}\n\n.p-metergroup-horizontal .p-metergroup-meters {\n height: ").concat(dt("metergroup.meters.size"), ";\n}\n\n.p-metergroup-horizontal .p-metergroup-meter:first-of-type {\n border-start-start-radius: ").concat(dt("metergroup.border.radius"), ";\n border-end-start-radius: ").concat(dt("metergroup.border.radius"), ";\n}\n\n.p-metergroup-horizontal .p-metergroup-meter:last-of-type {\n border-start-end-radius: ").concat(dt("metergroup.border.radius"), ";\n border-end-end-radius: ").concat(dt("metergroup.border.radius"), ";\n}\n\n.p-metergroup-vertical {\n flex-direction: row;\n}\n\n.p-metergroup-label-list-vertical {\n flex-direction: column;\n gap: ").concat(dt("metergroup.label.list.vertical.gap"), ";\n}\n\n.p-metergroup-vertical .p-metergroup-meters {\n flex-direction: column;\n width: ").concat(dt("metergroup.meters.size"), ";\n height: 100%;\n}\n\n.p-metergroup-vertical .p-metergroup-label-list {\n align-items: flex-start;\n}\n\n.p-metergroup-vertical .p-metergroup-meter:first-of-type {\n border-start-start-radius: ").concat(dt("metergroup.border.radius"), ";\n border-start-end-radius: ").concat(dt("metergroup.border.radius"), ";\n}\n\n.p-metergroup-vertical .p-metergroup-meter:last-of-type {\n border-end-start-radius: ").concat(dt("metergroup.border.radius"), ";\n border-end-end-radius: ").concat(dt("metergroup.border.radius"), ";\n}\n"); +}, "theme"); +var classes$i = { + root: /* @__PURE__ */ __name(function root19(_ref2) { + var props = _ref2.props; + return ["p-metergroup p-component", { + "p-metergroup-horizontal": props.orientation === "horizontal", + "p-metergroup-vertical": props.orientation === "vertical" + }]; + }, "root"), + meters: "p-metergroup-meters", + meter: "p-metergroup-meter", + labelList: /* @__PURE__ */ __name(function labelList(_ref3) { + var props = _ref3.props; + return ["p-metergroup-label-list", { + "p-metergroup-label-list-vertical": props.labelOrientation === "vertical", + "p-metergroup-label-list-horizontal": props.labelOrientation === "horizontal" + }]; + }, "labelList"), + label: "p-metergroup-label", + labelIcon: "p-metergroup-label-icon", + labelMarker: "p-metergroup-label-marker", + labelText: "p-metergroup-label-text" +}; +var MeterGroupStyle = BaseStyle.extend({ + name: "metergroup", + theme: theme$h, + classes: classes$i +}); +var script$2$3 = { + name: "MeterGroup", + "extends": script$1d, + props: { + value: { + type: Array, + "default": null + }, + min: { + type: Number, + "default": 0 + }, + max: { + type: Number, + "default": 100 + }, + orientation: { + type: String, + "default": "horizontal" + }, + labelPosition: { + type: String, + "default": "end" + }, + labelOrientation: { + type: String, + "default": "horizontal" + } + }, + style: MeterGroupStyle, + provide: /* @__PURE__ */ __name(function provide33() { + return { + $pcMeterGroup: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1$i = { + name: "MeterGroupLabel", + hostName: "MeterGroup", + "extends": script$1d, + inheritAttrs: false, + props: { + value: { + type: Array, + "default": null + }, + labelPosition: { + type: String, + "default": "end" + }, + labelOrientation: { + type: String, + "default": "horizontal" + } + } +}; +function render$1$3(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("ol", mergeProps({ + "class": _ctx.cx("labelList") + }, _ctx.ptm("labelList")), [(openBlock(true), createElementBlock(Fragment, null, renderList($props.value, function(val, index) { + return openBlock(), createElementBlock("li", mergeProps({ + key: index + "_label", + "class": _ctx.cx("label"), + ref_for: true + }, _ctx.ptm("label")), [renderSlot(_ctx.$slots, "icon", { + value: val, + "class": normalizeClass(_ctx.cx("labelIcon")) + }, function() { + return [val.icon ? (openBlock(), createElementBlock("i", mergeProps({ + key: 0, + "class": [val.icon, _ctx.cx("labelIcon")], + style: { + color: val.color + }, + ref_for: true + }, _ctx.ptm("labelIcon")), null, 16)) : (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + "class": _ctx.cx("labelMarker"), + style: { + backgroundColor: val.color + }, + ref_for: true + }, _ctx.ptm("labelMarker")), null, 16))]; + }), createBaseVNode("span", mergeProps({ + "class": _ctx.cx("labelText"), + ref_for: true + }, _ctx.ptm("labelText")), toDisplayString(val.label) + " (" + toDisplayString(_ctx.$parentInstance.percentValue(val.value)) + ")", 17)], 16); + }), 128))], 16); +} +__name(render$1$3, "render$1$3"); +script$1$i.render = render$1$3; +var script$w = { + name: "MeterGroup", + "extends": script$2$3, + inheritAttrs: false, + methods: { + getPTOptions: /* @__PURE__ */ __name(function getPTOptions5(key, value2, index) { + return this.ptm(key, { + context: { + value: value2, + index + } + }); + }, "getPTOptions"), + percent: /* @__PURE__ */ __name(function percent() { + var meter = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0; + var percentOfItem = (meter - this.min) / (this.max - this.min) * 100; + return Math.round(Math.max(0, Math.min(100, percentOfItem))); + }, "percent"), + percentValue: /* @__PURE__ */ __name(function percentValue(meter) { + return this.percent(meter) + "%"; + }, "percentValue"), + meterCalculatedStyles: /* @__PURE__ */ __name(function meterCalculatedStyles(val) { + return { + backgroundColor: val.color, + width: this.orientation === "horizontal" && this.percentValue(val.value), + height: this.orientation === "vertical" && this.percentValue(val.value) + }; + }, "meterCalculatedStyles") + }, + computed: { + totalPercent: /* @__PURE__ */ __name(function totalPercent() { + return this.percent(this.value.reduce(function(total, val) { + return total + val.value; + }, 0)); + }, "totalPercent"), + percentages: /* @__PURE__ */ __name(function percentages() { + var sum = 0; + var sumsArray = []; + this.value.forEach(function(item8) { + sum += item8.value; + sumsArray.push(sum); + }); + return sumsArray; + }, "percentages") + }, + components: { + MeterGroupLabel: script$1$i + } +}; +var _hoisted_1$g = ["aria-valuemin", "aria-valuemax", "aria-valuenow"]; +function render$s(_ctx, _cache, $props, $setup, $data, $options) { + var _component_MeterGroupLabel = resolveComponent("MeterGroupLabel"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root"), + role: "meter", + "aria-valuemin": _ctx.min, + "aria-valuemax": _ctx.max, + "aria-valuenow": $options.totalPercent + }, _ctx.ptmi("root")), [_ctx.labelPosition === "start" ? renderSlot(_ctx.$slots, "label", { + key: 0, + value: _ctx.value, + totalPercent: $options.totalPercent, + percentages: $options.percentages + }, function() { + return [createVNode(_component_MeterGroupLabel, { + value: _ctx.value, + labelPosition: _ctx.labelPosition, + labelOrientation: _ctx.labelOrientation, + unstyled: _ctx.unstyled, + pt: _ctx.pt + }, null, 8, ["value", "labelPosition", "labelOrientation", "unstyled", "pt"])]; + }) : createCommentVNode("", true), renderSlot(_ctx.$slots, "start", { + value: _ctx.value, + totalPercent: $options.totalPercent, + percentages: $options.percentages + }), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("meters") + }, _ctx.ptm("meters")), [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.value, function(val, index) { + return renderSlot(_ctx.$slots, "meter", { + key: index, + value: val, + index, + "class": normalizeClass(_ctx.cx("meter")), + orientation: _ctx.orientation, + size: $options.percentValue(val.value), + totalPercent: $options.totalPercent + }, function() { + return [$options.percent(val.value) ? (openBlock(), createElementBlock("span", mergeProps({ + key: 0, + "class": _ctx.cx("meter"), + style: $options.meterCalculatedStyles(val), + ref_for: true + }, $options.getPTOptions("meter", val, index)), null, 16)) : createCommentVNode("", true)]; + }); + }), 128))], 16), renderSlot(_ctx.$slots, "end", { + value: _ctx.value, + totalPercent: $options.totalPercent, + percentages: $options.percentages + }), _ctx.labelPosition === "end" ? renderSlot(_ctx.$slots, "label", { + key: 1, + value: _ctx.value, + totalPercent: $options.totalPercent, + percentages: $options.percentages + }, function() { + return [createVNode(_component_MeterGroupLabel, { + value: _ctx.value, + labelPosition: _ctx.labelPosition, + labelOrientation: _ctx.labelOrientation, + unstyled: _ctx.unstyled, + pt: _ctx.pt + }, null, 8, ["value", "labelPosition", "labelOrientation", "unstyled", "pt"])]; + }) : createCommentVNode("", true)], 16, _hoisted_1$g); +} +__name(render$s, "render$s"); +script$w.render = render$s; +var theme$g = /* @__PURE__ */ __name(function theme24(_ref) { + var dt = _ref.dt; + return "\n.p-multiselect {\n display: inline-flex;\n cursor: pointer;\n position: relative;\n user-select: none;\n background: ".concat(dt("multiselect.background"), ";\n border: 1px solid ").concat(dt("multiselect.border.color"), ";\n transition: background ").concat(dt("multiselect.transition.duration"), ", color ").concat(dt("multiselect.transition.duration"), ", border-color ").concat(dt("multiselect.transition.duration"), ", outline-color ").concat(dt("multiselect.transition.duration"), ", box-shadow ").concat(dt("multiselect.transition.duration"), ";\n border-radius: ").concat(dt("multiselect.border.radius"), ";\n outline-color: transparent;\n box-shadow: ").concat(dt("multiselect.shadow"), ";\n}\n\n.p-multiselect:not(.p-disabled):hover {\n border-color: ").concat(dt("multiselect.hover.border.color"), ";\n}\n\n.p-multiselect:not(.p-disabled).p-focus {\n border-color: ").concat(dt("multiselect.focus.border.color"), ";\n box-shadow: ").concat(dt("multiselect.focus.ring.shadow"), ";\n outline: ").concat(dt("multiselect.focus.ring.width"), " ").concat(dt("multiselect.focus.ring.style"), " ").concat(dt("multiselect.focus.ring.color"), ";\n outline-offset: ").concat(dt("multiselect.focus.ring.offset"), ";\n}\n\n.p-multiselect.p-variant-filled {\n background: ").concat(dt("multiselect.filled.background"), ";\n}\n\n.p-multiselect.p-variant-filled:not(.p-disabled):hover {\n background: ").concat(dt("multiselect.filled.hover.background"), ";\n}\n\n.p-multiselect.p-variant-filled.p-focus {\n background: ").concat(dt("multiselect.filled.focus.background"), ";\n}\n\n.p-multiselect.p-invalid {\n border-color: ").concat(dt("multiselect.invalid.border.color"), ";\n}\n\n.p-multiselect.p-disabled {\n opacity: 1;\n background: ").concat(dt("multiselect.disabled.background"), ";\n}\n\n.p-multiselect-dropdown {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: transparent;\n color: ").concat(dt("multiselect.dropdown.color"), ";\n width: ").concat(dt("multiselect.dropdown.width"), ";\n border-start-end-radius: ").concat(dt("multiselect.border.radius"), ";\n border-end-end-radius: ").concat(dt("multiselect.border.radius"), ";\n}\n\n.p-multiselect-clear-icon {\n position: absolute;\n top: 50%;\n margin-top: -0.5rem;\n color: ").concat(dt("multiselect.clear.icon.color"), ";\n inset-inline-end: ").concat(dt("multiselect.dropdown.width"), ";\n}\n\n.p-multiselect-label-container {\n overflow: hidden;\n flex: 1 1 auto;\n cursor: pointer;\n}\n\n.p-multiselect-label {\n display: flex;\n align-items: center;\n gap: calc(").concat(dt("multiselect.padding.y"), " / 2);\n white-space: nowrap;\n cursor: pointer;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: ").concat(dt("multiselect.padding.y"), " ").concat(dt("multiselect.padding.x"), ";\n color: ").concat(dt("multiselect.color"), ";\n}\n\n.p-multiselect-label.p-placeholder {\n color: ").concat(dt("multiselect.placeholder.color"), ";\n}\n\n.p-multiselect.p-invalid .p-multiselect-label.p-placeholder {\n color: ").concat(dt("multiselect.invalid.placeholder.color"), ";\n}\n\n.p-multiselect.p-disabled .p-multiselect-label {\n color: ").concat(dt("multiselect.disabled.color"), ";\n}\n\n.p-multiselect-label-empty {\n overflow: hidden;\n visibility: hidden;\n}\n\n.p-multiselect .p-multiselect-overlay {\n min-width: 100%;\n}\n\n.p-multiselect-overlay {\n position: absolute;\n top: 0;\n left: 0;\n background: ").concat(dt("multiselect.overlay.background"), ";\n color: ").concat(dt("multiselect.overlay.color"), ";\n border: 1px solid ").concat(dt("multiselect.overlay.border.color"), ";\n border-radius: ").concat(dt("multiselect.overlay.border.radius"), ";\n box-shadow: ").concat(dt("multiselect.overlay.shadow"), ";\n}\n\n.p-multiselect-header {\n display: flex;\n align-items: center;\n padding: ").concat(dt("multiselect.list.header.padding"), ";\n}\n\n.p-multiselect-header .p-checkbox {\n margin-inline-end: ").concat(dt("multiselect.option.gap"), ";\n}\n\n.p-multiselect-filter-container {\n flex: 1 1 auto;\n}\n\n.p-multiselect-filter {\n width: 100%;\n}\n\n.p-multiselect-list-container {\n overflow: auto;\n}\n\n.p-multiselect-list {\n margin: 0;\n padding: 0;\n list-style-type: none;\n padding: ").concat(dt("multiselect.list.padding"), ";\n display: flex;\n flex-direction: column;\n gap: ").concat(dt("multiselect.list.gap"), ";\n}\n\n.p-multiselect-option {\n cursor: pointer;\n font-weight: normal;\n white-space: nowrap;\n position: relative;\n overflow: hidden;\n display: flex;\n align-items: center;\n gap: ").concat(dt("multiselect.option.gap"), ";\n padding: ").concat(dt("multiselect.option.padding"), ";\n border: 0 none;\n color: ").concat(dt("multiselect.option.color"), ";\n background: transparent;\n transition: background ").concat(dt("multiselect.transition.duration"), ", color ").concat(dt("multiselect.transition.duration"), ", border-color ").concat(dt("multiselect.transition.duration"), ", box-shadow ").concat(dt("multiselect.transition.duration"), ", outline-color ").concat(dt("multiselect.transition.duration"), ";\n border-radius: ").concat(dt("multiselect.option.border.radius"), ";\n}\n\n.p-multiselect-option:not(.p-multiselect-option-selected):not(.p-disabled).p-focus {\n background: ").concat(dt("multiselect.option.focus.background"), ";\n color: ").concat(dt("multiselect.option.focus.color"), ";\n}\n\n.p-multiselect-option.p-multiselect-option-selected {\n background: ").concat(dt("multiselect.option.selected.background"), ";\n color: ").concat(dt("multiselect.option.selected.color"), ";\n}\n\n.p-multiselect-option.p-multiselect-option-selected.p-focus {\n background: ").concat(dt("multiselect.option.selected.focus.background"), ";\n color: ").concat(dt("multiselect.option.selected.focus.color"), ";\n}\n\n.p-multiselect-option-group {\n cursor: auto;\n margin: 0;\n padding: ").concat(dt("multiselect.option.group.padding"), ";\n background: ").concat(dt("multiselect.option.group.background"), ";\n color: ").concat(dt("multiselect.option.group.color"), ";\n font-weight: ").concat(dt("multiselect.option.group.font.weight"), ";\n}\n\n.p-multiselect-empty-message {\n padding: ").concat(dt("multiselect.empty.message.padding"), ";\n}\n\n.p-multiselect-label .p-chip {\n padding-block-start: calc(").concat(dt("multiselect.padding.y"), " / 2);\n padding-block-end: calc(").concat(dt("multiselect.padding.y"), " / 2);\n border-radius: ").concat(dt("multiselect.chip.border.radius"), ";\n}\n\n.p-multiselect-label:has(.p-chip) {\n padding: calc(").concat(dt("multiselect.padding.y"), " / 2) calc(").concat(dt("multiselect.padding.x"), " / 2);\n}\n\n.p-multiselect-fluid {\n display: flex;\n width: 100%;\n}\n\n.p-multiselect-sm .p-multiselect-label {\n font-size: ").concat(dt("multiselect.sm.font.size"), ";\n padding-block: ").concat(dt("multiselect.sm.padding.y"), ";\n padding-inline: ").concat(dt("multiselect.sm.padding.x"), ";\n}\n\n.p-multiselect-sm .p-multiselect-dropdown .p-icon {\n font-size: ").concat(dt("multiselect.sm.font.size"), ";\n width: ").concat(dt("multiselect.sm.font.size"), ";\n height: ").concat(dt("multiselect.sm.font.size"), ";\n}\n\n.p-multiselect-lg .p-multiselect-label {\n font-size: ").concat(dt("multiselect.lg.font.size"), ";\n padding-block: ").concat(dt("multiselect.lg.padding.y"), ";\n padding-inline: ").concat(dt("multiselect.lg.padding.x"), ";\n}\n\n.p-multiselect-lg .p-multiselect-dropdown .p-icon {\n font-size: ").concat(dt("multiselect.lg.font.size"), ";\n width: ").concat(dt("multiselect.lg.font.size"), ";\n height: ").concat(dt("multiselect.lg.font.size"), ";\n}\n"); +}, "theme"); +var inlineStyles$5 = { + root: /* @__PURE__ */ __name(function root20(_ref2) { + var props = _ref2.props; + return { + position: props.appendTo === "self" ? "relative" : void 0 + }; + }, "root") +}; +var classes$h = { + root: /* @__PURE__ */ __name(function root21(_ref3) { + var instance = _ref3.instance, props = _ref3.props; + return ["p-multiselect p-component p-inputwrapper", { + "p-multiselect-display-chip": props.display === "chip", + "p-disabled": props.disabled, + "p-invalid": instance.$invalid, + "p-variant-filled": instance.$variant === "filled", + "p-focus": instance.focused, + "p-inputwrapper-filled": instance.$filled, + "p-inputwrapper-focus": instance.focused || instance.overlayVisible, + "p-multiselect-open": instance.overlayVisible, + "p-multiselect-fluid": instance.$fluid, + "p-multiselect-sm p-inputfield-sm": props.size === "small", + "p-multiselect-lg p-inputfield-lg": props.size === "large" + }]; + }, "root"), + labelContainer: "p-multiselect-label-container", + label: /* @__PURE__ */ __name(function label6(_ref4) { + var instance = _ref4.instance, props = _ref4.props; + return ["p-multiselect-label", { + "p-placeholder": instance.label === props.placeholder, + "p-multiselect-label-empty": !props.placeholder && (!props.modelValue || props.modelValue.length === 0) + }]; + }, "label"), + clearIcon: "p-multiselect-clear-icon", + chipItem: "p-multiselect-chip-item", + pcChip: "p-multiselect-chip", + chipIcon: "p-multiselect-chip-icon", + dropdown: "p-multiselect-dropdown", + loadingIcon: "p-multiselect-loading-icon", + dropdownIcon: "p-multiselect-dropdown-icon", + overlay: "p-multiselect-overlay p-component", + header: "p-multiselect-header", + pcFilterContainer: "p-multiselect-filter-container", + pcFilter: "p-multiselect-filter", + listContainer: "p-multiselect-list-container", + list: "p-multiselect-list", + optionGroup: "p-multiselect-option-group", + option: /* @__PURE__ */ __name(function option2(_ref5) { + var instance = _ref5.instance, _option = _ref5.option, index = _ref5.index, getItemOptions = _ref5.getItemOptions, props = _ref5.props; + return ["p-multiselect-option", { + "p-multiselect-option-selected": instance.isSelected(_option) && props.highlightOnSelect, + "p-focus": instance.focusedOptionIndex === instance.getOptionIndex(index, getItemOptions), + "p-disabled": instance.isOptionDisabled(_option) + }]; + }, "option"), + emptyMessage: "p-multiselect-empty-message" +}; +var MultiSelectStyle = BaseStyle.extend({ + name: "multiselect", + theme: theme$g, + classes: classes$h, + inlineStyles: inlineStyles$5 +}); +var script$1$h = { + name: "BaseMultiSelect", + "extends": script$1n, + props: { + options: Array, + optionLabel: null, + optionValue: null, + optionDisabled: null, + optionGroupLabel: null, + optionGroupChildren: null, + scrollHeight: { + type: String, + "default": "14rem" + }, + placeholder: String, + inputId: { + type: String, + "default": null + }, + panelClass: { + type: String, + "default": null + }, + panelStyle: { + type: null, + "default": null + }, + overlayClass: { + type: String, + "default": null + }, + overlayStyle: { + type: null, + "default": null + }, + dataKey: null, + showClear: { + type: Boolean, + "default": false + }, + clearIcon: { + type: String, + "default": void 0 + }, + resetFilterOnClear: { + type: Boolean, + "default": false + }, + filter: Boolean, + filterPlaceholder: String, + filterLocale: String, + filterMatchMode: { + type: String, + "default": "contains" + }, + filterFields: { + type: Array, + "default": null + }, + appendTo: { + type: [String, Object], + "default": "body" + }, + display: { + type: String, + "default": "comma" + }, + selectedItemsLabel: { + type: String, + "default": null + }, + maxSelectedLabels: { + type: Number, + "default": null + }, + selectionLimit: { + type: Number, + "default": null + }, + showToggleAll: { + type: Boolean, + "default": true + }, + loading: { + type: Boolean, + "default": false + }, + checkboxIcon: { + type: String, + "default": void 0 + }, + dropdownIcon: { + type: String, + "default": void 0 + }, + filterIcon: { + type: String, + "default": void 0 + }, + loadingIcon: { + type: String, + "default": void 0 + }, + removeTokenIcon: { + type: String, + "default": void 0 + }, + chipIcon: { + type: String, + "default": void 0 + }, + selectAll: { + type: Boolean, + "default": null + }, + resetFilterOnHide: { + type: Boolean, + "default": false + }, + virtualScrollerOptions: { + type: Object, + "default": null + }, + autoOptionFocus: { + type: Boolean, + "default": false + }, + autoFilterFocus: { + type: Boolean, + "default": false + }, + focusOnHover: { + type: Boolean, + "default": true + }, + highlightOnSelect: { + type: Boolean, + "default": false + }, + filterMessage: { + type: String, + "default": null + }, + selectionMessage: { + type: String, + "default": null + }, + emptySelectionMessage: { + type: String, + "default": null + }, + emptyFilterMessage: { + type: String, + "default": null + }, + emptyMessage: { + type: String, + "default": null + }, + tabindex: { + type: Number, + "default": 0 + }, + ariaLabel: { + type: String, + "default": null + }, + ariaLabelledby: { + type: String, + "default": null + } + }, + style: MultiSelectStyle, + provide: /* @__PURE__ */ __name(function provide34() { + return { + $pcMultiSelect: this, + $parentInstance: this + }; + }, "provide") +}; +function _typeof$1$2(o) { + "@babel/helpers - typeof"; + return _typeof$1$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$1$2(o); +} +__name(_typeof$1$2, "_typeof$1$2"); +function ownKeys$d(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$d, "ownKeys$d"); +function _objectSpread$d(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$d(Object(t2), true).forEach(function(r2) { + _defineProperty$1$2(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$d(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$d, "_objectSpread$d"); +function _defineProperty$1$2(e, r, t2) { + return (r = _toPropertyKey$1$2(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$1$2, "_defineProperty$1$2"); +function _toPropertyKey$1$2(t2) { + var i = _toPrimitive$1$2(t2, "string"); + return "symbol" == _typeof$1$2(i) ? i : i + ""; +} +__name(_toPropertyKey$1$2, "_toPropertyKey$1$2"); +function _toPrimitive$1$2(t2, r) { + if ("object" != _typeof$1$2(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$1$2(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$1$2, "_toPrimitive$1$2"); +function _toConsumableArray$6(r) { + return _arrayWithoutHoles$6(r) || _iterableToArray$6(r) || _unsupportedIterableToArray$7(r) || _nonIterableSpread$6(); +} +__name(_toConsumableArray$6, "_toConsumableArray$6"); +function _nonIterableSpread$6() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$6, "_nonIterableSpread$6"); +function _unsupportedIterableToArray$7(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$7(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$7(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$7, "_unsupportedIterableToArray$7"); +function _iterableToArray$6(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$6, "_iterableToArray$6"); +function _arrayWithoutHoles$6(r) { + if (Array.isArray(r)) return _arrayLikeToArray$7(r); +} +__name(_arrayWithoutHoles$6, "_arrayWithoutHoles$6"); +function _arrayLikeToArray$7(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$7, "_arrayLikeToArray$7"); +var script$v = { + name: "MultiSelect", + "extends": script$1$h, + inheritAttrs: false, + emits: ["change", "focus", "blur", "before-show", "before-hide", "show", "hide", "filter", "selectall-change"], + inject: { + $pcFluid: { + "default": null + } + }, + outsideClickListener: null, + scrollHandler: null, + resizeListener: null, + overlay: null, + list: null, + virtualScroller: null, + startRangeIndex: -1, + searchTimeout: null, + searchValue: "", + selectOnFocus: false, + data: /* @__PURE__ */ __name(function data22() { + return { + id: this.$attrs.id, + clicked: false, + focused: false, + focusedOptionIndex: -1, + filterValue: null, + overlayVisible: false + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId7(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + options: /* @__PURE__ */ __name(function options2() { + this.autoUpdateModel(); + }, "options") + }, + mounted: /* @__PURE__ */ __name(function mounted23() { + this.id = this.id || UniqueComponentId(); + this.autoUpdateModel(); + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount10() { + this.unbindOutsideClickListener(); + this.unbindResizeListener(); + if (this.scrollHandler) { + this.scrollHandler.destroy(); + this.scrollHandler = null; + } + if (this.overlay) { + ZIndex.clear(this.overlay); + this.overlay = null; + } + }, "beforeUnmount"), + methods: { + getOptionIndex: /* @__PURE__ */ __name(function getOptionIndex(index, fn) { + return this.virtualScrollerDisabled ? index : fn && fn(index)["index"]; + }, "getOptionIndex"), + getOptionLabel: /* @__PURE__ */ __name(function getOptionLabel3(option4) { + return this.optionLabel ? resolveFieldData(option4, this.optionLabel) : option4; + }, "getOptionLabel"), + getOptionValue: /* @__PURE__ */ __name(function getOptionValue3(option4) { + return this.optionValue ? resolveFieldData(option4, this.optionValue) : option4; + }, "getOptionValue"), + getOptionRenderKey: /* @__PURE__ */ __name(function getOptionRenderKey(option4, index) { + return this.dataKey ? resolveFieldData(option4, this.dataKey) : this.getOptionLabel(option4) + "_".concat(index); + }, "getOptionRenderKey"), + getHeaderCheckboxPTOptions: /* @__PURE__ */ __name(function getHeaderCheckboxPTOptions(key) { + return this.ptm(key, { + context: { + selected: this.allSelected + } + }); + }, "getHeaderCheckboxPTOptions"), + getCheckboxPTOptions: /* @__PURE__ */ __name(function getCheckboxPTOptions(option4, itemOptions, index, key) { + return this.ptm(key, { + context: { + selected: this.isSelected(option4), + focused: this.focusedOptionIndex === this.getOptionIndex(index, itemOptions), + disabled: this.isOptionDisabled(option4) + } + }); + }, "getCheckboxPTOptions"), + isOptionDisabled: /* @__PURE__ */ __name(function isOptionDisabled3(option4) { + if (this.maxSelectionLimitReached && !this.isSelected(option4)) { + return true; + } + return this.optionDisabled ? resolveFieldData(option4, this.optionDisabled) : false; + }, "isOptionDisabled"), + isOptionGroup: /* @__PURE__ */ __name(function isOptionGroup3(option4) { + return this.optionGroupLabel && option4.optionGroup && option4.group; + }, "isOptionGroup"), + getOptionGroupLabel: /* @__PURE__ */ __name(function getOptionGroupLabel3(optionGroup) { + return resolveFieldData(optionGroup, this.optionGroupLabel); + }, "getOptionGroupLabel"), + getOptionGroupChildren: /* @__PURE__ */ __name(function getOptionGroupChildren3(optionGroup) { + return resolveFieldData(optionGroup, this.optionGroupChildren); + }, "getOptionGroupChildren"), + getAriaPosInset: /* @__PURE__ */ __name(function getAriaPosInset2(index) { + var _this = this; + return (this.optionGroupLabel ? index - this.visibleOptions.slice(0, index).filter(function(option4) { + return _this.isOptionGroup(option4); + }).length : index) + 1; + }, "getAriaPosInset"), + show: /* @__PURE__ */ __name(function show4(isFocus) { + this.$emit("before-show"); + this.overlayVisible = true; + this.focusedOptionIndex = this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : this.findSelectedOptionIndex(); + isFocus && focus(this.$refs.focusInput); + }, "show"), + hide: /* @__PURE__ */ __name(function hide5(isFocus) { + var _this2 = this; + var _hide = /* @__PURE__ */ __name(function _hide2() { + _this2.$emit("before-hide"); + _this2.overlayVisible = false; + _this2.clicked = false; + _this2.focusedOptionIndex = -1; + _this2.searchValue = ""; + _this2.resetFilterOnHide && (_this2.filterValue = null); + isFocus && focus(_this2.$refs.focusInput); + }, "_hide"); + setTimeout(function() { + _hide(); + }, 0); + }, "hide"), + onFocus: /* @__PURE__ */ __name(function onFocus9(event2) { + if (this.disabled) { + return; + } + this.focused = true; + if (this.overlayVisible) { + this.focusedOptionIndex = this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : this.findSelectedOptionIndex(); + this.scrollInView(this.focusedOptionIndex); + } + this.$emit("focus", event2); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur9(event2) { + var _this$formField$onBlu, _this$formField; + this.clicked = false; + this.focused = false; + this.focusedOptionIndex = -1; + this.searchValue = ""; + this.$emit("blur", event2); + (_this$formField$onBlu = (_this$formField = this.formField).onBlur) === null || _this$formField$onBlu === void 0 || _this$formField$onBlu.call(_this$formField); + }, "onBlur"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown9(event2) { + var _this3 = this; + if (this.disabled) { + event2.preventDefault(); + return; + } + var metaKey = event2.metaKey || event2.ctrlKey; + switch (event2.code) { + case "ArrowDown": + this.onArrowDownKey(event2); + break; + case "ArrowUp": + this.onArrowUpKey(event2); + break; + case "Home": + this.onHomeKey(event2); + break; + case "End": + this.onEndKey(event2); + break; + case "PageDown": + this.onPageDownKey(event2); + break; + case "PageUp": + this.onPageUpKey(event2); + break; + case "Enter": + case "NumpadEnter": + case "Space": + this.onEnterKey(event2); + break; + case "Escape": + this.onEscapeKey(event2); + break; + case "Tab": + this.onTabKey(event2); + break; + case "ShiftLeft": + case "ShiftRight": + this.onShiftKey(event2); + break; + default: + if (event2.code === "KeyA" && metaKey) { + var value2 = this.visibleOptions.filter(function(option4) { + return _this3.isValidOption(option4); + }).map(function(option4) { + return _this3.getOptionValue(option4); + }); + this.updateModel(event2, value2); + event2.preventDefault(); + break; + } + if (!metaKey && isPrintableCharacter(event2.key)) { + !this.overlayVisible && this.show(); + this.searchOptions(event2); + event2.preventDefault(); + } + break; + } + this.clicked = false; + }, "onKeyDown"), + onContainerClick: /* @__PURE__ */ __name(function onContainerClick2(event2) { + if (this.disabled || this.loading) { + return; + } + if (event2.target.tagName === "INPUT" || event2.target.getAttribute("data-pc-section") === "clearicon" || event2.target.closest('[data-pc-section="clearicon"]')) { + return; + } else if (!this.overlay || !this.overlay.contains(event2.target)) { + this.overlayVisible ? this.hide(true) : this.show(true); + } + this.clicked = true; + }, "onContainerClick"), + onClearClick: /* @__PURE__ */ __name(function onClearClick2(event2) { + this.updateModel(event2, null); + this.resetFilterOnClear && (this.filterValue = null); + }, "onClearClick"), + onFirstHiddenFocus: /* @__PURE__ */ __name(function onFirstHiddenFocus(event2) { + var focusableEl = event2.relatedTarget === this.$refs.focusInput ? getFirstFocusableElement(this.overlay, ':not([data-p-hidden-focusable="true"])') : this.$refs.focusInput; + focus(focusableEl); + }, "onFirstHiddenFocus"), + onLastHiddenFocus: /* @__PURE__ */ __name(function onLastHiddenFocus(event2) { + var focusableEl = event2.relatedTarget === this.$refs.focusInput ? getLastFocusableElement(this.overlay, ':not([data-p-hidden-focusable="true"])') : this.$refs.focusInput; + focus(focusableEl); + }, "onLastHiddenFocus"), + onOptionSelect: /* @__PURE__ */ __name(function onOptionSelect2(event2, option4) { + var _this4 = this; + var index = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : -1; + var isFocus = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false; + if (this.disabled || this.isOptionDisabled(option4)) { + return; + } + var selected3 = this.isSelected(option4); + var value2 = null; + if (selected3) value2 = this.d_value.filter(function(val) { + return !equals(val, _this4.getOptionValue(option4), _this4.equalityKey); + }); + else value2 = [].concat(_toConsumableArray$6(this.d_value || []), [this.getOptionValue(option4)]); + this.updateModel(event2, value2); + index !== -1 && (this.focusedOptionIndex = index); + isFocus && focus(this.$refs.focusInput); + }, "onOptionSelect"), + onOptionMouseMove: /* @__PURE__ */ __name(function onOptionMouseMove3(event2, index) { + if (this.focusOnHover) { + this.changeFocusedOptionIndex(event2, index); + } + }, "onOptionMouseMove"), + onOptionSelectRange: /* @__PURE__ */ __name(function onOptionSelectRange(event2) { + var _this5 = this; + var start = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : -1; + var end = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : -1; + start === -1 && (start = this.findNearestSelectedOptionIndex(end, true)); + end === -1 && (end = this.findNearestSelectedOptionIndex(start)); + if (start !== -1 && end !== -1) { + var rangeStart = Math.min(start, end); + var rangeEnd = Math.max(start, end); + var value2 = this.visibleOptions.slice(rangeStart, rangeEnd + 1).filter(function(option4) { + return _this5.isValidOption(option4); + }).map(function(option4) { + return _this5.getOptionValue(option4); + }); + this.updateModel(event2, value2); + } + }, "onOptionSelectRange"), + onFilterChange: /* @__PURE__ */ __name(function onFilterChange(event2) { + var value2 = event2.target.value; + this.filterValue = value2; + this.focusedOptionIndex = -1; + this.$emit("filter", { + originalEvent: event2, + value: value2 + }); + !this.virtualScrollerDisabled && this.virtualScroller.scrollToIndex(0); + }, "onFilterChange"), + onFilterKeyDown: /* @__PURE__ */ __name(function onFilterKeyDown(event2) { + switch (event2.code) { + case "ArrowDown": + this.onArrowDownKey(event2); + break; + case "ArrowUp": + this.onArrowUpKey(event2, true); + break; + case "ArrowLeft": + case "ArrowRight": + this.onArrowLeftKey(event2, true); + break; + case "Home": + this.onHomeKey(event2, true); + break; + case "End": + this.onEndKey(event2, true); + break; + case "Enter": + case "NumpadEnter": + this.onEnterKey(event2); + break; + case "Escape": + this.onEscapeKey(event2); + break; + case "Tab": + this.onTabKey(event2, true); + break; + } + }, "onFilterKeyDown"), + onFilterBlur: /* @__PURE__ */ __name(function onFilterBlur() { + this.focusedOptionIndex = -1; + }, "onFilterBlur"), + onFilterUpdated: /* @__PURE__ */ __name(function onFilterUpdated() { + if (this.overlayVisible) { + this.alignOverlay(); + } + }, "onFilterUpdated"), + onOverlayClick: /* @__PURE__ */ __name(function onOverlayClick4(event2) { + OverlayEventBus.emit("overlay-click", { + originalEvent: event2, + target: this.$el + }); + }, "onOverlayClick"), + onOverlayKeyDown: /* @__PURE__ */ __name(function onOverlayKeyDown3(event2) { + switch (event2.code) { + case "Escape": + this.onEscapeKey(event2); + break; + } + }, "onOverlayKeyDown"), + onArrowDownKey: /* @__PURE__ */ __name(function onArrowDownKey6(event2) { + if (!this.overlayVisible) { + this.show(); + } else { + var optionIndex = this.focusedOptionIndex !== -1 ? this.findNextOptionIndex(this.focusedOptionIndex) : this.clicked ? this.findFirstOptionIndex() : this.findFirstFocusedOptionIndex(); + if (event2.shiftKey) { + this.onOptionSelectRange(event2, this.startRangeIndex, optionIndex); + } + this.changeFocusedOptionIndex(event2, optionIndex); + } + event2.preventDefault(); + }, "onArrowDownKey"), + onArrowUpKey: /* @__PURE__ */ __name(function onArrowUpKey6(event2) { + var pressedInInputText = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + if (event2.altKey && !pressedInInputText) { + if (this.focusedOptionIndex !== -1) { + this.onOptionSelect(event2, this.visibleOptions[this.focusedOptionIndex]); + } + this.overlayVisible && this.hide(); + event2.preventDefault(); + } else { + var optionIndex = this.focusedOptionIndex !== -1 ? this.findPrevOptionIndex(this.focusedOptionIndex) : this.clicked ? this.findLastOptionIndex() : this.findLastFocusedOptionIndex(); + if (event2.shiftKey) { + this.onOptionSelectRange(event2, optionIndex, this.startRangeIndex); + } + this.changeFocusedOptionIndex(event2, optionIndex); + !this.overlayVisible && this.show(); + event2.preventDefault(); + } + }, "onArrowUpKey"), + onArrowLeftKey: /* @__PURE__ */ __name(function onArrowLeftKey3(event2) { + var pressedInInputText = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + pressedInInputText && (this.focusedOptionIndex = -1); + }, "onArrowLeftKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey6(event2) { + var pressedInInputText = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + if (pressedInInputText) { + var target = event2.currentTarget; + if (event2.shiftKey) { + target.setSelectionRange(0, event2.target.selectionStart); + } else { + target.setSelectionRange(0, 0); + this.focusedOptionIndex = -1; + } + } else { + var metaKey = event2.metaKey || event2.ctrlKey; + var optionIndex = this.findFirstOptionIndex(); + if (event2.shiftKey && metaKey) { + this.onOptionSelectRange(event2, optionIndex, this.startRangeIndex); + } + this.changeFocusedOptionIndex(event2, optionIndex); + !this.overlayVisible && this.show(); + } + event2.preventDefault(); + }, "onHomeKey"), + onEndKey: /* @__PURE__ */ __name(function onEndKey6(event2) { + var pressedInInputText = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + if (pressedInInputText) { + var target = event2.currentTarget; + if (event2.shiftKey) { + target.setSelectionRange(event2.target.selectionStart, target.value.length); + } else { + var len = target.value.length; + target.setSelectionRange(len, len); + this.focusedOptionIndex = -1; + } + } else { + var metaKey = event2.metaKey || event2.ctrlKey; + var optionIndex = this.findLastOptionIndex(); + if (event2.shiftKey && metaKey) { + this.onOptionSelectRange(event2, this.startRangeIndex, optionIndex); + } + this.changeFocusedOptionIndex(event2, optionIndex); + !this.overlayVisible && this.show(); + } + event2.preventDefault(); + }, "onEndKey"), + onPageUpKey: /* @__PURE__ */ __name(function onPageUpKey(event2) { + this.scrollInView(0); + event2.preventDefault(); + }, "onPageUpKey"), + onPageDownKey: /* @__PURE__ */ __name(function onPageDownKey(event2) { + this.scrollInView(this.visibleOptions.length - 1); + event2.preventDefault(); + }, "onPageDownKey"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey5(event2) { + if (!this.overlayVisible) { + this.focusedOptionIndex = -1; + this.onArrowDownKey(event2); + } else { + if (this.focusedOptionIndex !== -1) { + if (event2.shiftKey) this.onOptionSelectRange(event2, this.focusedOptionIndex); + else this.onOptionSelect(event2, this.visibleOptions[this.focusedOptionIndex]); + } + } + event2.preventDefault(); + }, "onEnterKey"), + onEscapeKey: /* @__PURE__ */ __name(function onEscapeKey3(event2) { + this.overlayVisible && this.hide(true); + event2.preventDefault(); + }, "onEscapeKey"), + onTabKey: /* @__PURE__ */ __name(function onTabKey3(event2) { + var pressedInInputText = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + if (!pressedInInputText) { + if (this.overlayVisible && this.hasFocusableElements()) { + focus(event2.shiftKey ? this.$refs.lastHiddenFocusableElementOnOverlay : this.$refs.firstHiddenFocusableElementOnOverlay); + event2.preventDefault(); + } else { + if (this.focusedOptionIndex !== -1) { + this.onOptionSelect(event2, this.visibleOptions[this.focusedOptionIndex]); + } + this.overlayVisible && this.hide(this.filter); + } + } + }, "onTabKey"), + onShiftKey: /* @__PURE__ */ __name(function onShiftKey() { + this.startRangeIndex = this.focusedOptionIndex; + }, "onShiftKey"), + onOverlayEnter: /* @__PURE__ */ __name(function onOverlayEnter3(el) { + ZIndex.set("overlay", el, this.$primevue.config.zIndex.overlay); + addStyle(el, { + position: "absolute", + top: "0", + left: "0" + }); + this.alignOverlay(); + this.scrollInView(); + this.autoFilterFocus && focus(this.$refs.filterInput.$el); + }, "onOverlayEnter"), + onOverlayAfterEnter: /* @__PURE__ */ __name(function onOverlayAfterEnter2() { + this.bindOutsideClickListener(); + this.bindScrollListener(); + this.bindResizeListener(); + this.$emit("show"); + }, "onOverlayAfterEnter"), + onOverlayLeave: /* @__PURE__ */ __name(function onOverlayLeave3() { + this.unbindOutsideClickListener(); + this.unbindScrollListener(); + this.unbindResizeListener(); + this.$emit("hide"); + this.overlay = null; + }, "onOverlayLeave"), + onOverlayAfterLeave: /* @__PURE__ */ __name(function onOverlayAfterLeave3(el) { + ZIndex.clear(el); + }, "onOverlayAfterLeave"), + alignOverlay: /* @__PURE__ */ __name(function alignOverlay4() { + if (this.appendTo === "self") { + relativePosition(this.overlay, this.$el); + } else { + this.overlay.style.minWidth = getOuterWidth(this.$el) + "px"; + absolutePosition(this.overlay, this.$el); + } + }, "alignOverlay"), + bindOutsideClickListener: /* @__PURE__ */ __name(function bindOutsideClickListener6() { + var _this6 = this; + if (!this.outsideClickListener) { + this.outsideClickListener = function(event2) { + if (_this6.overlayVisible && _this6.isOutsideClicked(event2)) { + _this6.hide(); + } + }; + document.addEventListener("click", this.outsideClickListener); + } + }, "bindOutsideClickListener"), + unbindOutsideClickListener: /* @__PURE__ */ __name(function unbindOutsideClickListener6() { + if (this.outsideClickListener) { + document.removeEventListener("click", this.outsideClickListener); + this.outsideClickListener = null; + } + }, "unbindOutsideClickListener"), + bindScrollListener: /* @__PURE__ */ __name(function bindScrollListener5() { + var _this7 = this; + if (!this.scrollHandler) { + this.scrollHandler = new ConnectedOverlayScrollHandler(this.$refs.container, function() { + if (_this7.overlayVisible) { + _this7.hide(); + } + }); + } + this.scrollHandler.bindScrollListener(); + }, "bindScrollListener"), + unbindScrollListener: /* @__PURE__ */ __name(function unbindScrollListener5() { + if (this.scrollHandler) { + this.scrollHandler.unbindScrollListener(); + } + }, "unbindScrollListener"), + bindResizeListener: /* @__PURE__ */ __name(function bindResizeListener5() { + var _this8 = this; + if (!this.resizeListener) { + this.resizeListener = function() { + if (_this8.overlayVisible && !isTouchDevice()) { + _this8.hide(); + } + }; + window.addEventListener("resize", this.resizeListener); + } + }, "bindResizeListener"), + unbindResizeListener: /* @__PURE__ */ __name(function unbindResizeListener5() { + if (this.resizeListener) { + window.removeEventListener("resize", this.resizeListener); + this.resizeListener = null; + } + }, "unbindResizeListener"), + isOutsideClicked: /* @__PURE__ */ __name(function isOutsideClicked3(event2) { + return !(this.$el.isSameNode(event2.target) || this.$el.contains(event2.target) || this.overlay && this.overlay.contains(event2.target)); + }, "isOutsideClicked"), + getLabelByValue: /* @__PURE__ */ __name(function getLabelByValue(value2) { + var _this9 = this; + var options4 = this.optionGroupLabel ? this.flatOptions(this.options) : this.options || []; + var matchedOption = options4.find(function(option4) { + return !_this9.isOptionGroup(option4) && equals(_this9.getOptionValue(option4), value2, _this9.equalityKey); + }); + return matchedOption ? this.getOptionLabel(matchedOption) : null; + }, "getLabelByValue"), + getSelectedItemsLabel: /* @__PURE__ */ __name(function getSelectedItemsLabel() { + var pattern = /{(.*?)}/; + var selectedItemsLabel = this.selectedItemsLabel || this.$primevue.config.locale.selectionMessage; + if (pattern.test(selectedItemsLabel)) { + return selectedItemsLabel.replace(selectedItemsLabel.match(pattern)[0], this.d_value.length + ""); + } + return selectedItemsLabel; + }, "getSelectedItemsLabel"), + onToggleAll: /* @__PURE__ */ __name(function onToggleAll(event2) { + var _this10 = this; + if (this.selectAll !== null) { + this.$emit("selectall-change", { + originalEvent: event2, + checked: !this.allSelected + }); + } else { + var value2 = this.allSelected ? [] : this.visibleOptions.filter(function(option4) { + return _this10.isValidOption(option4); + }).map(function(option4) { + return _this10.getOptionValue(option4); + }); + this.updateModel(event2, value2); + } + }, "onToggleAll"), + removeOption: /* @__PURE__ */ __name(function removeOption(event2, optionValue) { + var _this11 = this; + event2.stopPropagation(); + var value2 = this.d_value.filter(function(val) { + return !equals(val, optionValue, _this11.equalityKey); + }); + this.updateModel(event2, value2); + }, "removeOption"), + clearFilter: /* @__PURE__ */ __name(function clearFilter() { + this.filterValue = null; + }, "clearFilter"), + hasFocusableElements: /* @__PURE__ */ __name(function hasFocusableElements() { + return getFocusableElements(this.overlay, ':not([data-p-hidden-focusable="true"])').length > 0; + }, "hasFocusableElements"), + isOptionMatched: /* @__PURE__ */ __name(function isOptionMatched2(option4) { + var _this$getOptionLabel; + return this.isValidOption(option4) && typeof this.getOptionLabel(option4) === "string" && ((_this$getOptionLabel = this.getOptionLabel(option4)) === null || _this$getOptionLabel === void 0 ? void 0 : _this$getOptionLabel.toLocaleLowerCase(this.filterLocale).startsWith(this.searchValue.toLocaleLowerCase(this.filterLocale))); + }, "isOptionMatched"), + isValidOption: /* @__PURE__ */ __name(function isValidOption2(option4) { + return isNotEmpty(option4) && !(this.isOptionDisabled(option4) || this.isOptionGroup(option4)); + }, "isValidOption"), + isValidSelectedOption: /* @__PURE__ */ __name(function isValidSelectedOption2(option4) { + return this.isValidOption(option4) && this.isSelected(option4); + }, "isValidSelectedOption"), + isEquals: /* @__PURE__ */ __name(function isEquals(value1, value2) { + return equals(value1, value2, this.equalityKey); + }, "isEquals"), + isSelected: /* @__PURE__ */ __name(function isSelected4(option4) { + var _this12 = this; + var optionValue = this.getOptionValue(option4); + return (this.d_value || []).some(function(value2) { + return _this12.isEquals(value2, optionValue); + }); + }, "isSelected"), + findFirstOptionIndex: /* @__PURE__ */ __name(function findFirstOptionIndex2() { + var _this13 = this; + return this.visibleOptions.findIndex(function(option4) { + return _this13.isValidOption(option4); + }); + }, "findFirstOptionIndex"), + findLastOptionIndex: /* @__PURE__ */ __name(function findLastOptionIndex2() { + var _this14 = this; + return findLastIndex(this.visibleOptions, function(option4) { + return _this14.isValidOption(option4); + }); + }, "findLastOptionIndex"), + findNextOptionIndex: /* @__PURE__ */ __name(function findNextOptionIndex4(index) { + var _this15 = this; + var matchedOptionIndex = index < this.visibleOptions.length - 1 ? this.visibleOptions.slice(index + 1).findIndex(function(option4) { + return _this15.isValidOption(option4); + }) : -1; + return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index; + }, "findNextOptionIndex"), + findPrevOptionIndex: /* @__PURE__ */ __name(function findPrevOptionIndex4(index) { + var _this16 = this; + var matchedOptionIndex = index > 0 ? findLastIndex(this.visibleOptions.slice(0, index), function(option4) { + return _this16.isValidOption(option4); + }) : -1; + return matchedOptionIndex > -1 ? matchedOptionIndex : index; + }, "findPrevOptionIndex"), + findSelectedOptionIndex: /* @__PURE__ */ __name(function findSelectedOptionIndex2() { + var _this17 = this; + if (this.$filled) { + var _loop = /* @__PURE__ */ __name(function _loop2() { + var value2 = _this17.d_value[index]; + var matchedOptionIndex = _this17.visibleOptions.findIndex(function(option4) { + return _this17.isValidSelectedOption(option4) && _this17.isEquals(value2, _this17.getOptionValue(option4)); + }); + if (matchedOptionIndex > -1) return { + v: matchedOptionIndex + }; + }, "_loop"), _ret; + for (var index = this.d_value.length - 1; index >= 0; index--) { + _ret = _loop(); + if (_ret) return _ret.v; + } + } + return -1; + }, "findSelectedOptionIndex"), + findFirstSelectedOptionIndex: /* @__PURE__ */ __name(function findFirstSelectedOptionIndex() { + var _this18 = this; + return this.$filled ? this.visibleOptions.findIndex(function(option4) { + return _this18.isValidSelectedOption(option4); + }) : -1; + }, "findFirstSelectedOptionIndex"), + findLastSelectedOptionIndex: /* @__PURE__ */ __name(function findLastSelectedOptionIndex() { + var _this19 = this; + return this.$filled ? findLastIndex(this.visibleOptions, function(option4) { + return _this19.isValidSelectedOption(option4); + }) : -1; + }, "findLastSelectedOptionIndex"), + findNextSelectedOptionIndex: /* @__PURE__ */ __name(function findNextSelectedOptionIndex(index) { + var _this20 = this; + var matchedOptionIndex = this.$filled && index < this.visibleOptions.length - 1 ? this.visibleOptions.slice(index + 1).findIndex(function(option4) { + return _this20.isValidSelectedOption(option4); + }) : -1; + return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : -1; + }, "findNextSelectedOptionIndex"), + findPrevSelectedOptionIndex: /* @__PURE__ */ __name(function findPrevSelectedOptionIndex(index) { + var _this21 = this; + var matchedOptionIndex = this.$filled && index > 0 ? findLastIndex(this.visibleOptions.slice(0, index), function(option4) { + return _this21.isValidSelectedOption(option4); + }) : -1; + return matchedOptionIndex > -1 ? matchedOptionIndex : -1; + }, "findPrevSelectedOptionIndex"), + findNearestSelectedOptionIndex: /* @__PURE__ */ __name(function findNearestSelectedOptionIndex(index) { + var firstCheckUp = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + var matchedOptionIndex = -1; + if (this.$filled) { + if (firstCheckUp) { + matchedOptionIndex = this.findPrevSelectedOptionIndex(index); + matchedOptionIndex = matchedOptionIndex === -1 ? this.findNextSelectedOptionIndex(index) : matchedOptionIndex; + } else { + matchedOptionIndex = this.findNextSelectedOptionIndex(index); + matchedOptionIndex = matchedOptionIndex === -1 ? this.findPrevSelectedOptionIndex(index) : matchedOptionIndex; + } + } + return matchedOptionIndex > -1 ? matchedOptionIndex : index; + }, "findNearestSelectedOptionIndex"), + findFirstFocusedOptionIndex: /* @__PURE__ */ __name(function findFirstFocusedOptionIndex2() { + var selectedIndex = this.findSelectedOptionIndex(); + return selectedIndex < 0 ? this.findFirstOptionIndex() : selectedIndex; + }, "findFirstFocusedOptionIndex"), + findLastFocusedOptionIndex: /* @__PURE__ */ __name(function findLastFocusedOptionIndex2() { + var selectedIndex = this.findSelectedOptionIndex(); + return selectedIndex < 0 ? this.findLastOptionIndex() : selectedIndex; + }, "findLastFocusedOptionIndex"), + searchOptions: /* @__PURE__ */ __name(function searchOptions2(event2) { + var _this22 = this; + this.searchValue = (this.searchValue || "") + event2.key; + var optionIndex = -1; + if (isNotEmpty(this.searchValue)) { + if (this.focusedOptionIndex !== -1) { + optionIndex = this.visibleOptions.slice(this.focusedOptionIndex).findIndex(function(option4) { + return _this22.isOptionMatched(option4); + }); + optionIndex = optionIndex === -1 ? this.visibleOptions.slice(0, this.focusedOptionIndex).findIndex(function(option4) { + return _this22.isOptionMatched(option4); + }) : optionIndex + this.focusedOptionIndex; + } else { + optionIndex = this.visibleOptions.findIndex(function(option4) { + return _this22.isOptionMatched(option4); + }); + } + if (optionIndex === -1 && this.focusedOptionIndex === -1) { + optionIndex = this.findFirstFocusedOptionIndex(); + } + if (optionIndex !== -1) { + this.changeFocusedOptionIndex(event2, optionIndex); + } + } + if (this.searchTimeout) { + clearTimeout(this.searchTimeout); + } + this.searchTimeout = setTimeout(function() { + _this22.searchValue = ""; + _this22.searchTimeout = null; + }, 500); + }, "searchOptions"), + changeFocusedOptionIndex: /* @__PURE__ */ __name(function changeFocusedOptionIndex4(event2, index) { + if (this.focusedOptionIndex !== index) { + this.focusedOptionIndex = index; + this.scrollInView(); + if (this.selectOnFocus) { + this.onOptionSelect(event2, this.visibleOptions[index]); + } + } + }, "changeFocusedOptionIndex"), + scrollInView: /* @__PURE__ */ __name(function scrollInView4() { + var _this23 = this; + var index = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : -1; + this.$nextTick(function() { + var id4 = index !== -1 ? "".concat(_this23.id, "_").concat(index) : _this23.focusedOptionId; + var element = findSingle(_this23.list, 'li[id="'.concat(id4, '"]')); + if (element) { + element.scrollIntoView && element.scrollIntoView({ + block: "nearest", + inline: "nearest" + }); + } else if (!_this23.virtualScrollerDisabled) { + _this23.virtualScroller && _this23.virtualScroller.scrollToIndex(index !== -1 ? index : _this23.focusedOptionIndex); + } + }); + }, "scrollInView"), + autoUpdateModel: /* @__PURE__ */ __name(function autoUpdateModel2() { + if (this.selectOnFocus && this.autoOptionFocus && !this.$filled) { + this.focusedOptionIndex = this.findFirstFocusedOptionIndex(); + var value2 = this.getOptionValue(this.visibleOptions[this.focusedOptionIndex]); + this.updateModel(null, [value2]); + } + }, "autoUpdateModel"), + updateModel: /* @__PURE__ */ __name(function updateModel6(event2, value2) { + this.writeValue(value2, event2); + this.$emit("change", { + originalEvent: event2, + value: value2 + }); + }, "updateModel"), + flatOptions: /* @__PURE__ */ __name(function flatOptions(options4) { + var _this24 = this; + return (options4 || []).reduce(function(result, option4, index) { + result.push({ + optionGroup: option4, + group: true, + index + }); + var optionGroupChildren = _this24.getOptionGroupChildren(option4); + optionGroupChildren && optionGroupChildren.forEach(function(o) { + return result.push(o); + }); + return result; + }, []); + }, "flatOptions"), + overlayRef: /* @__PURE__ */ __name(function overlayRef3(el) { + this.overlay = el; + }, "overlayRef"), + listRef: /* @__PURE__ */ __name(function listRef2(el, contentRef2) { + this.list = el; + contentRef2 && contentRef2(el); + }, "listRef"), + virtualScrollerRef: /* @__PURE__ */ __name(function virtualScrollerRef(el) { + this.virtualScroller = el; + }, "virtualScrollerRef") + }, + computed: { + visibleOptions: /* @__PURE__ */ __name(function visibleOptions2() { + var _this25 = this; + var options4 = this.optionGroupLabel ? this.flatOptions(this.options) : this.options || []; + if (this.filterValue) { + var filteredOptions = FilterService.filter(options4, this.searchFields, this.filterValue, this.filterMatchMode, this.filterLocale); + if (this.optionGroupLabel) { + var optionGroups = this.options || []; + var filtered = []; + optionGroups.forEach(function(group) { + var groupChildren = _this25.getOptionGroupChildren(group); + var filteredItems = groupChildren.filter(function(item8) { + return filteredOptions.includes(item8); + }); + if (filteredItems.length > 0) filtered.push(_objectSpread$d(_objectSpread$d({}, group), {}, _defineProperty$1$2({}, typeof _this25.optionGroupChildren === "string" ? _this25.optionGroupChildren : "items", _toConsumableArray$6(filteredItems)))); + }); + return this.flatOptions(filtered); + } + return filteredOptions; + } + return options4; + }, "visibleOptions"), + label: /* @__PURE__ */ __name(function label7() { + var label12; + if (this.d_value && this.d_value.length) { + if (isNotEmpty(this.maxSelectedLabels) && this.d_value.length > this.maxSelectedLabels) { + return this.getSelectedItemsLabel(); + } else { + label12 = ""; + for (var i = 0; i < this.d_value.length; i++) { + if (i !== 0) { + label12 += ", "; + } + label12 += this.getLabelByValue(this.d_value[i]); + } + } + } else { + label12 = this.placeholder; + } + return label12; + }, "label"), + chipSelectedItems: /* @__PURE__ */ __name(function chipSelectedItems() { + return isNotEmpty(this.maxSelectedLabels) && this.d_value && this.d_value.length > this.maxSelectedLabels; + }, "chipSelectedItems"), + allSelected: /* @__PURE__ */ __name(function allSelected() { + var _this26 = this; + return this.selectAll !== null ? this.selectAll : isNotEmpty(this.visibleOptions) && this.visibleOptions.every(function(option4) { + return _this26.isOptionGroup(option4) || _this26.isOptionDisabled(option4) || _this26.isSelected(option4); + }); + }, "allSelected"), + // @deprecated use $filled instead. + hasSelectedOption: /* @__PURE__ */ __name(function hasSelectedOption2() { + return this.$filled; + }, "hasSelectedOption"), + equalityKey: /* @__PURE__ */ __name(function equalityKey2() { + return this.optionValue ? null : this.dataKey; + }, "equalityKey"), + searchFields: /* @__PURE__ */ __name(function searchFields() { + return this.filterFields || [this.optionLabel]; + }, "searchFields"), + maxSelectionLimitReached: /* @__PURE__ */ __name(function maxSelectionLimitReached() { + return this.selectionLimit && this.d_value && this.d_value.length === this.selectionLimit; + }, "maxSelectionLimitReached"), + filterResultMessageText: /* @__PURE__ */ __name(function filterResultMessageText() { + return isNotEmpty(this.visibleOptions) ? this.filterMessageText.replaceAll("{0}", this.visibleOptions.length) : this.emptyFilterMessageText; + }, "filterResultMessageText"), + filterMessageText: /* @__PURE__ */ __name(function filterMessageText() { + return this.filterMessage || this.$primevue.config.locale.searchMessage || ""; + }, "filterMessageText"), + emptyFilterMessageText: /* @__PURE__ */ __name(function emptyFilterMessageText() { + return this.emptyFilterMessage || this.$primevue.config.locale.emptySearchMessage || this.$primevue.config.locale.emptyFilterMessage || ""; + }, "emptyFilterMessageText"), + emptyMessageText: /* @__PURE__ */ __name(function emptyMessageText3() { + return this.emptyMessage || this.$primevue.config.locale.emptyMessage || ""; + }, "emptyMessageText"), + selectionMessageText: /* @__PURE__ */ __name(function selectionMessageText2() { + return this.selectionMessage || this.$primevue.config.locale.selectionMessage || ""; + }, "selectionMessageText"), + emptySelectionMessageText: /* @__PURE__ */ __name(function emptySelectionMessageText2() { + return this.emptySelectionMessage || this.$primevue.config.locale.emptySelectionMessage || ""; + }, "emptySelectionMessageText"), + selectedMessageText: /* @__PURE__ */ __name(function selectedMessageText2() { + return this.$filled ? this.selectionMessageText.replaceAll("{0}", this.d_value.length) : this.emptySelectionMessageText; + }, "selectedMessageText"), + focusedOptionId: /* @__PURE__ */ __name(function focusedOptionId5() { + return this.focusedOptionIndex !== -1 ? "".concat(this.id, "_").concat(this.focusedOptionIndex) : null; + }, "focusedOptionId"), + ariaSetSize: /* @__PURE__ */ __name(function ariaSetSize() { + var _this27 = this; + return this.visibleOptions.filter(function(option4) { + return !_this27.isOptionGroup(option4); + }).length; + }, "ariaSetSize"), + toggleAllAriaLabel: /* @__PURE__ */ __name(function toggleAllAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria[this.allSelected ? "selectAll" : "unselectAll"] : void 0; + }, "toggleAllAriaLabel"), + listAriaLabel: /* @__PURE__ */ __name(function listAriaLabel2() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.listLabel : void 0; + }, "listAriaLabel"), + virtualScrollerDisabled: /* @__PURE__ */ __name(function virtualScrollerDisabled() { + return !this.virtualScrollerOptions; + }, "virtualScrollerDisabled"), + hasFluid: /* @__PURE__ */ __name(function hasFluid() { + return isEmpty(this.fluid) ? !!this.$pcFluid : this.fluid; + }, "hasFluid"), + isClearIconVisible: /* @__PURE__ */ __name(function isClearIconVisible2() { + return this.showClear && this.d_value != null && isNotEmpty(this.options); + }, "isClearIconVisible") + }, + directives: { + ripple: Ripple + }, + components: { + InputText: script$1o, + Checkbox: script$1J, + VirtualScroller: script$1K, + Portal: script$1f, + Chip: script$1t, + IconField: script$1L, + InputIcon: script$1M, + TimesIcon: script$1g, + SearchIcon: script$1N, + ChevronDownIcon: script$1k, + SpinnerIcon: script$1r, + CheckIcon: script$1D + } +}; +function _typeof$e(o) { + "@babel/helpers - typeof"; + return _typeof$e = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$e(o); +} +__name(_typeof$e, "_typeof$e"); +function _defineProperty$e(e, r, t2) { + return (r = _toPropertyKey$e(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$e, "_defineProperty$e"); +function _toPropertyKey$e(t2) { + var i = _toPrimitive$e(t2, "string"); + return "symbol" == _typeof$e(i) ? i : i + ""; +} +__name(_toPropertyKey$e, "_toPropertyKey$e"); +function _toPrimitive$e(t2, r) { + if ("object" != _typeof$e(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$e(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$e, "_toPrimitive$e"); +var _hoisted_1$f = ["id", "disabled", "placeholder", "tabindex", "aria-label", "aria-labelledby", "aria-expanded", "aria-controls", "aria-activedescendant", "aria-invalid"]; +var _hoisted_2$b = { + key: 0 +}; +var _hoisted_3$8 = ["id", "aria-label"]; +var _hoisted_4$5 = ["id"]; +var _hoisted_5$1 = ["id", "aria-label", "aria-selected", "aria-disabled", "aria-setsize", "aria-posinset", "onClick", "onMousemove", "data-p-selected", "data-p-focused", "data-p-disabled"]; +function render$r(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Chip = resolveComponent("Chip"); + var _component_SpinnerIcon = resolveComponent("SpinnerIcon"); + var _component_Checkbox = resolveComponent("Checkbox"); + var _component_InputText = resolveComponent("InputText"); + var _component_SearchIcon = resolveComponent("SearchIcon"); + var _component_InputIcon = resolveComponent("InputIcon"); + var _component_IconField = resolveComponent("IconField"); + var _component_VirtualScroller = resolveComponent("VirtualScroller"); + var _component_Portal = resolveComponent("Portal"); + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createElementBlock("div", mergeProps({ + ref: "container", + "class": _ctx.cx("root"), + style: _ctx.sx("root"), + onClick: _cache[7] || (_cache[7] = function() { + return $options.onContainerClick && $options.onContainerClick.apply($options, arguments); + }) + }, _ctx.ptmi("root")), [createBaseVNode("div", mergeProps({ + "class": "p-hidden-accessible" + }, _ctx.ptm("hiddenInputContainer"), { + "data-p-hidden-accessible": true + }), [createBaseVNode("input", mergeProps({ + ref: "focusInput", + id: _ctx.inputId, + type: "text", + readonly: "", + disabled: _ctx.disabled, + placeholder: _ctx.placeholder, + tabindex: !_ctx.disabled ? _ctx.tabindex : -1, + role: "combobox", + "aria-label": _ctx.ariaLabel, + "aria-labelledby": _ctx.ariaLabelledby, + "aria-haspopup": "listbox", + "aria-expanded": $data.overlayVisible, + "aria-controls": $data.id + "_list", + "aria-activedescendant": $data.focused ? $options.focusedOptionId : void 0, + "aria-invalid": _ctx.invalid || void 0, + onFocus: _cache[0] || (_cache[0] = function() { + return $options.onFocus && $options.onFocus.apply($options, arguments); + }), + onBlur: _cache[1] || (_cache[1] = function() { + return $options.onBlur && $options.onBlur.apply($options, arguments); + }), + onKeydown: _cache[2] || (_cache[2] = function() { + return $options.onKeyDown && $options.onKeyDown.apply($options, arguments); + }) + }, _ctx.ptm("hiddenInput")), null, 16, _hoisted_1$f)], 16), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("labelContainer") + }, _ctx.ptm("labelContainer")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("label") + }, _ctx.ptm("label")), [renderSlot(_ctx.$slots, "value", { + value: _ctx.d_value, + placeholder: _ctx.placeholder + }, function() { + return [_ctx.display === "comma" ? (openBlock(), createElementBlock(Fragment, { + key: 0 + }, [createTextVNode(toDisplayString($options.label || "empty"), 1)], 64)) : _ctx.display === "chip" ? (openBlock(), createElementBlock(Fragment, { + key: 1 + }, [$options.chipSelectedItems ? (openBlock(), createElementBlock("span", _hoisted_2$b, toDisplayString($options.label), 1)) : (openBlock(true), createElementBlock(Fragment, { + key: 1 + }, renderList(_ctx.d_value, function(item8) { + return openBlock(), createElementBlock("span", mergeProps({ + key: $options.getLabelByValue(item8), + "class": _ctx.cx("chipItem"), + ref_for: true + }, _ctx.ptm("chipItem")), [renderSlot(_ctx.$slots, "chip", { + value: item8, + removeCallback: /* @__PURE__ */ __name(function removeCallback(event2) { + return $options.removeOption(event2, item8); + }, "removeCallback") + }, function() { + return [createVNode(_component_Chip, { + "class": normalizeClass(_ctx.cx("pcChip")), + label: $options.getLabelByValue(item8), + removeIcon: _ctx.chipIcon || _ctx.removeTokenIcon, + removable: "", + unstyled: _ctx.unstyled, + onRemove: /* @__PURE__ */ __name(function onRemove($event) { + return $options.removeOption($event, item8); + }, "onRemove"), + pt: _ctx.ptm("pcChip") + }, { + removeicon: withCtx(function() { + return [renderSlot(_ctx.$slots, _ctx.$slots.chipicon ? "chipicon" : "removetokenicon", { + "class": normalizeClass(_ctx.cx("chipIcon")), + item: item8, + removeCallback: /* @__PURE__ */ __name(function removeCallback(event2) { + return $options.removeOption(event2, item8); + }, "removeCallback") + })]; + }), + _: 2 + }, 1032, ["class", "label", "removeIcon", "unstyled", "onRemove", "pt"])]; + })], 16); + }), 128)), !_ctx.d_value || _ctx.d_value.length === 0 ? (openBlock(), createElementBlock(Fragment, { + key: 2 + }, [createTextVNode(toDisplayString(_ctx.placeholder || "empty"), 1)], 64)) : createCommentVNode("", true)], 64)) : createCommentVNode("", true)]; + })], 16)], 16), $options.isClearIconVisible ? renderSlot(_ctx.$slots, "clearicon", { + key: 0, + "class": normalizeClass(_ctx.cx("clearIcon")), + clearCallback: $options.onClearClick + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.clearIcon ? "i" : "TimesIcon"), mergeProps({ + ref: "clearIcon", + "class": [_ctx.cx("clearIcon"), _ctx.clearIcon], + onClick: $options.onClearClick + }, _ctx.ptm("clearIcon"), { + "data-pc-section": "clearicon" + }), null, 16, ["class", "onClick"]))]; + }) : createCommentVNode("", true), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("dropdown") + }, _ctx.ptm("dropdown")), [_ctx.loading ? renderSlot(_ctx.$slots, "loadingicon", { + key: 0, + "class": normalizeClass(_ctx.cx("loadingIcon")) + }, function() { + return [_ctx.loadingIcon ? (openBlock(), createElementBlock("span", mergeProps({ + key: 0, + "class": [_ctx.cx("loadingIcon"), "pi-spin", _ctx.loadingIcon], + "aria-hidden": "true" + }, _ctx.ptm("loadingIcon")), null, 16)) : (openBlock(), createBlock(_component_SpinnerIcon, mergeProps({ + key: 1, + "class": _ctx.cx("loadingIcon"), + spin: "", + "aria-hidden": "true" + }, _ctx.ptm("loadingIcon")), null, 16, ["class"]))]; + }) : renderSlot(_ctx.$slots, "dropdownicon", { + key: 1, + "class": normalizeClass(_ctx.cx("dropdownIcon")) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.dropdownIcon ? "span" : "ChevronDownIcon"), mergeProps({ + "class": [_ctx.cx("dropdownIcon"), _ctx.dropdownIcon], + "aria-hidden": "true" + }, _ctx.ptm("dropdownIcon")), null, 16, ["class"]))]; + })], 16), createVNode(_component_Portal, { + appendTo: _ctx.appendTo + }, { + "default": withCtx(function() { + return [createVNode(Transition, mergeProps({ + name: "p-connected-overlay", + onEnter: $options.onOverlayEnter, + onAfterEnter: $options.onOverlayAfterEnter, + onLeave: $options.onOverlayLeave, + onAfterLeave: $options.onOverlayAfterLeave + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [$data.overlayVisible ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: $options.overlayRef, + style: [_ctx.panelStyle, _ctx.overlayStyle], + "class": [_ctx.cx("overlay"), _ctx.panelClass, _ctx.overlayClass], + onClick: _cache[5] || (_cache[5] = function() { + return $options.onOverlayClick && $options.onOverlayClick.apply($options, arguments); + }), + onKeydown: _cache[6] || (_cache[6] = function() { + return $options.onOverlayKeyDown && $options.onOverlayKeyDown.apply($options, arguments); + }) + }, _ctx.ptm("overlay")), [createBaseVNode("span", mergeProps({ + ref: "firstHiddenFocusableElementOnOverlay", + role: "presentation", + "aria-hidden": "true", + "class": "p-hidden-accessible p-hidden-focusable", + tabindex: 0, + onFocus: _cache[3] || (_cache[3] = function() { + return $options.onFirstHiddenFocus && $options.onFirstHiddenFocus.apply($options, arguments); + }) + }, _ctx.ptm("hiddenFirstFocusableEl"), { + "data-p-hidden-accessible": true, + "data-p-hidden-focusable": true + }), null, 16), renderSlot(_ctx.$slots, "header", { + value: _ctx.d_value, + options: $options.visibleOptions + }), _ctx.showToggleAll && _ctx.selectionLimit == null || _ctx.filter ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("header") + }, _ctx.ptm("header")), [_ctx.showToggleAll && _ctx.selectionLimit == null ? (openBlock(), createBlock(_component_Checkbox, { + key: 0, + modelValue: $options.allSelected, + binary: true, + disabled: _ctx.disabled, + variant: _ctx.variant, + "aria-label": $options.toggleAllAriaLabel, + onChange: $options.onToggleAll, + unstyled: _ctx.unstyled, + pt: $options.getHeaderCheckboxPTOptions("pcHeaderCheckbox") + }, { + icon: withCtx(function(slotProps) { + return [_ctx.$slots.headercheckboxicon ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.headercheckboxicon), { + key: 0, + checked: slotProps.checked, + "class": normalizeClass(slotProps["class"]) + }, null, 8, ["checked", "class"])) : slotProps.checked ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.checkboxIcon ? "span" : "CheckIcon"), mergeProps({ + key: 1, + "class": [slotProps["class"], _defineProperty$e({}, _ctx.checkboxIcon, slotProps.checked)] + }, $options.getHeaderCheckboxPTOptions("pcHeaderCheckbox.icon")), null, 16, ["class"])) : createCommentVNode("", true)]; + }), + _: 1 + }, 8, ["modelValue", "disabled", "variant", "aria-label", "onChange", "unstyled", "pt"])) : createCommentVNode("", true), _ctx.filter ? (openBlock(), createBlock(_component_IconField, { + key: 1, + "class": normalizeClass(_ctx.cx("pcFilterContainer")), + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcFilterContainer") + }, { + "default": withCtx(function() { + return [createVNode(_component_InputText, { + ref: "filterInput", + value: $data.filterValue, + onVnodeMounted: $options.onFilterUpdated, + onVnodeUpdated: $options.onFilterUpdated, + "class": normalizeClass(_ctx.cx("pcFilter")), + placeholder: _ctx.filterPlaceholder, + disabled: _ctx.disabled, + variant: _ctx.variant, + unstyled: _ctx.unstyled, + role: "searchbox", + autocomplete: "off", + "aria-owns": $data.id + "_list", + "aria-activedescendant": $options.focusedOptionId, + onKeydown: $options.onFilterKeyDown, + onBlur: $options.onFilterBlur, + onInput: $options.onFilterChange, + pt: _ctx.ptm("pcFilter") + }, null, 8, ["value", "onVnodeMounted", "onVnodeUpdated", "class", "placeholder", "disabled", "variant", "unstyled", "aria-owns", "aria-activedescendant", "onKeydown", "onBlur", "onInput", "pt"]), createVNode(_component_InputIcon, { + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcFilterIconContainer") + }, { + "default": withCtx(function() { + return [renderSlot(_ctx.$slots, "filtericon", {}, function() { + return [_ctx.filterIcon ? (openBlock(), createElementBlock("span", mergeProps({ + key: 0, + "class": _ctx.filterIcon + }, _ctx.ptm("filterIcon")), null, 16)) : (openBlock(), createBlock(_component_SearchIcon, normalizeProps(mergeProps({ + key: 1 + }, _ctx.ptm("filterIcon"))), null, 16))]; + })]; + }), + _: 3 + }, 8, ["unstyled", "pt"])]; + }), + _: 3 + }, 8, ["class", "unstyled", "pt"])) : createCommentVNode("", true), _ctx.filter ? (openBlock(), createElementBlock("span", mergeProps({ + key: 2, + role: "status", + "aria-live": "polite", + "class": "p-hidden-accessible" + }, _ctx.ptm("hiddenFilterResult"), { + "data-p-hidden-accessible": true + }), toDisplayString($options.filterResultMessageText), 17)) : createCommentVNode("", true)], 16)) : createCommentVNode("", true), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("listContainer"), + style: { + "max-height": $options.virtualScrollerDisabled ? _ctx.scrollHeight : "" + } + }, _ctx.ptm("listContainer")), [createVNode(_component_VirtualScroller, mergeProps({ + ref: $options.virtualScrollerRef + }, _ctx.virtualScrollerOptions, { + items: $options.visibleOptions, + style: { + height: _ctx.scrollHeight + }, + tabindex: -1, + disabled: $options.virtualScrollerDisabled, + pt: _ctx.ptm("virtualScroller") + }), createSlots({ + content: withCtx(function(_ref2) { + var styleClass = _ref2.styleClass, contentRef2 = _ref2.contentRef, items2 = _ref2.items, getItemOptions = _ref2.getItemOptions, contentStyle = _ref2.contentStyle, itemSize = _ref2.itemSize; + return [createBaseVNode("ul", mergeProps({ + ref: /* @__PURE__ */ __name(function ref2(el) { + return $options.listRef(el, contentRef2); + }, "ref"), + id: $data.id + "_list", + "class": [_ctx.cx("list"), styleClass], + style: contentStyle, + role: "listbox", + "aria-multiselectable": "true", + "aria-label": $options.listAriaLabel + }, _ctx.ptm("list")), [(openBlock(true), createElementBlock(Fragment, null, renderList(items2, function(option4, i) { + return openBlock(), createElementBlock(Fragment, { + key: $options.getOptionRenderKey(option4, $options.getOptionIndex(i, getItemOptions)) + }, [$options.isOptionGroup(option4) ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + id: $data.id + "_" + $options.getOptionIndex(i, getItemOptions), + style: { + height: itemSize ? itemSize + "px" : void 0 + }, + "class": _ctx.cx("optionGroup"), + role: "option", + ref_for: true + }, _ctx.ptm("optionGroup")), [renderSlot(_ctx.$slots, "optiongroup", { + option: option4.optionGroup, + index: $options.getOptionIndex(i, getItemOptions) + }, function() { + return [createTextVNode(toDisplayString($options.getOptionGroupLabel(option4.optionGroup)), 1)]; + })], 16, _hoisted_4$5)) : withDirectives((openBlock(), createElementBlock("li", mergeProps({ + key: 1, + id: $data.id + "_" + $options.getOptionIndex(i, getItemOptions), + style: { + height: itemSize ? itemSize + "px" : void 0 + }, + "class": _ctx.cx("option", { + option: option4, + index: i, + getItemOptions + }), + role: "option", + "aria-label": $options.getOptionLabel(option4), + "aria-selected": $options.isSelected(option4), + "aria-disabled": $options.isOptionDisabled(option4), + "aria-setsize": $options.ariaSetSize, + "aria-posinset": $options.getAriaPosInset($options.getOptionIndex(i, getItemOptions)), + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onOptionSelect($event, option4, $options.getOptionIndex(i, getItemOptions), true); + }, "onClick"), + onMousemove: /* @__PURE__ */ __name(function onMousemove($event) { + return $options.onOptionMouseMove($event, $options.getOptionIndex(i, getItemOptions)); + }, "onMousemove"), + ref_for: true + }, $options.getCheckboxPTOptions(option4, getItemOptions, i, "option"), { + "data-p-selected": $options.isSelected(option4), + "data-p-focused": $data.focusedOptionIndex === $options.getOptionIndex(i, getItemOptions), + "data-p-disabled": $options.isOptionDisabled(option4) + }), [createVNode(_component_Checkbox, { + defaultValue: $options.isSelected(option4), + binary: true, + tabindex: -1, + variant: _ctx.variant, + unstyled: _ctx.unstyled, + pt: $options.getCheckboxPTOptions(option4, getItemOptions, i, "pcOptionCheckbox") + }, { + icon: withCtx(function(slotProps) { + return [_ctx.$slots.optioncheckboxicon || _ctx.$slots.itemcheckboxicon ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.optioncheckboxicon || _ctx.$slots.itemcheckboxicon), { + key: 0, + checked: slotProps.checked, + "class": normalizeClass(slotProps["class"]) + }, null, 8, ["checked", "class"])) : slotProps.checked ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.checkboxIcon ? "span" : "CheckIcon"), mergeProps({ + key: 1, + "class": [slotProps["class"], _defineProperty$e({}, _ctx.checkboxIcon, slotProps.checked)], + ref_for: true + }, $options.getCheckboxPTOptions(option4, getItemOptions, i, "pcOptionCheckbox.icon")), null, 16, ["class"])) : createCommentVNode("", true)]; + }), + _: 2 + }, 1032, ["defaultValue", "variant", "unstyled", "pt"]), renderSlot(_ctx.$slots, "option", { + option: option4, + selected: $options.isSelected(option4), + index: $options.getOptionIndex(i, getItemOptions) + }, function() { + return [createBaseVNode("span", mergeProps({ + ref_for: true + }, _ctx.ptm("optionLabel")), toDisplayString($options.getOptionLabel(option4)), 17)]; + })], 16, _hoisted_5$1)), [[_directive_ripple]])], 64); + }), 128)), $data.filterValue && (!items2 || items2 && items2.length === 0) ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + "class": _ctx.cx("emptyMessage"), + role: "option" + }, _ctx.ptm("emptyMessage")), [renderSlot(_ctx.$slots, "emptyfilter", {}, function() { + return [createTextVNode(toDisplayString($options.emptyFilterMessageText), 1)]; + })], 16)) : !_ctx.options || _ctx.options && _ctx.options.length === 0 ? (openBlock(), createElementBlock("li", mergeProps({ + key: 1, + "class": _ctx.cx("emptyMessage"), + role: "option" + }, _ctx.ptm("emptyMessage")), [renderSlot(_ctx.$slots, "empty", {}, function() { + return [createTextVNode(toDisplayString($options.emptyMessageText), 1)]; + })], 16)) : createCommentVNode("", true)], 16, _hoisted_3$8)]; + }), + _: 2 + }, [_ctx.$slots.loader ? { + name: "loader", + fn: withCtx(function(_ref4) { + var options4 = _ref4.options; + return [renderSlot(_ctx.$slots, "loader", { + options: options4 + })]; + }), + key: "0" + } : void 0]), 1040, ["items", "style", "disabled", "pt"])], 16), renderSlot(_ctx.$slots, "footer", { + value: _ctx.d_value, + options: $options.visibleOptions + }), !_ctx.options || _ctx.options && _ctx.options.length === 0 ? (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + role: "status", + "aria-live": "polite", + "class": "p-hidden-accessible" + }, _ctx.ptm("hiddenEmptyMessage"), { + "data-p-hidden-accessible": true + }), toDisplayString($options.emptyMessageText), 17)) : createCommentVNode("", true), createBaseVNode("span", mergeProps({ + role: "status", + "aria-live": "polite", + "class": "p-hidden-accessible" + }, _ctx.ptm("hiddenSelectedMessage"), { + "data-p-hidden-accessible": true + }), toDisplayString($options.selectedMessageText), 17), createBaseVNode("span", mergeProps({ + ref: "lastHiddenFocusableElementOnOverlay", + role: "presentation", + "aria-hidden": "true", + "class": "p-hidden-accessible p-hidden-focusable", + tabindex: 0, + onFocus: _cache[4] || (_cache[4] = function() { + return $options.onLastHiddenFocus && $options.onLastHiddenFocus.apply($options, arguments); + }) + }, _ctx.ptm("hiddenLastFocusableEl"), { + "data-p-hidden-accessible": true, + "data-p-hidden-focusable": true + }), null, 16)], 16)) : createCommentVNode("", true)]; + }), + _: 3 + }, 16, ["onEnter", "onAfterEnter", "onLeave", "onAfterLeave"])]; + }), + _: 3 + }, 8, ["appendTo"])], 16); +} +__name(render$r, "render$r"); +script$v.render = render$r; +var script$u = { + name: "AngleDoubleDownIcon", + "extends": script$1m +}; +function render$q(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + d: "M6.70786 6.59831C6.80043 6.63674 6.89974 6.65629 6.99997 6.65581C7.19621 6.64081 7.37877 6.54953 7.50853 6.40153L11.0685 2.8416C11.1364 2.69925 11.1586 2.53932 11.132 2.38384C11.1053 2.22837 11.0311 2.08498 10.9195 1.97343C10.808 1.86188 10.6646 1.78766 10.5091 1.76099C10.3536 1.73431 10.1937 1.75649 10.0513 1.82448L6.99997 4.87585L3.9486 1.82448C3.80625 1.75649 3.64632 1.73431 3.49084 1.76099C3.33536 1.78766 3.19197 1.86188 3.08043 1.97343C2.96888 2.08498 2.89466 2.22837 2.86798 2.38384C2.84131 2.53932 2.86349 2.69925 2.93147 2.8416L6.46089 6.43205C6.53132 6.50336 6.61528 6.55989 6.70786 6.59831ZM6.70786 12.1925C6.80043 12.2309 6.89974 12.2505 6.99997 12.25C7.10241 12.2465 7.20306 12.2222 7.29575 12.1785C7.38845 12.1348 7.47124 12.0726 7.53905 11.9957L11.0685 8.46629C11.1614 8.32292 11.2036 8.15249 11.1881 7.98233C11.1727 7.81216 11.1005 7.6521 10.9833 7.52781C10.866 7.40353 10.7104 7.3222 10.5415 7.29688C10.3725 7.27155 10.1999 7.30369 10.0513 7.38814L6.99997 10.4395L3.9486 7.38814C3.80006 7.30369 3.62747 7.27155 3.45849 7.29688C3.28951 7.3222 3.13393 7.40353 3.01667 7.52781C2.89942 7.6521 2.82729 7.81216 2.81184 7.98233C2.79639 8.15249 2.83852 8.32292 2.93148 8.46629L6.4609 12.0262C6.53133 12.0975 6.61529 12.1541 6.70786 12.1925Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$q, "render$q"); +script$u.render = render$q; +var script$t = { + name: "AngleDoubleUpIcon", + "extends": script$1m +}; +function render$p(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + d: "M10.1504 6.67719C10.2417 6.71508 10.3396 6.73436 10.4385 6.73389C10.6338 6.74289 10.8249 6.67441 10.97 6.54334C11.1109 6.4023 11.19 6.21112 11.19 6.01178C11.19 5.81245 11.1109 5.62127 10.97 5.48023L7.45977 1.96998C7.31873 1.82912 7.12755 1.75 6.92821 1.75C6.72888 1.75 6.5377 1.82912 6.39666 1.96998L2.9165 5.45014C2.83353 5.58905 2.79755 5.751 2.81392 5.91196C2.83028 6.07293 2.89811 6.22433 3.00734 6.34369C3.11656 6.46306 3.26137 6.54402 3.42025 6.57456C3.57914 6.60511 3.74364 6.5836 3.88934 6.51325L6.89813 3.50446L9.90691 6.51325C9.97636 6.58357 10.0592 6.6393 10.1504 6.67719ZM9.93702 11.9993C10.065 12.1452 10.245 12.2352 10.4385 12.25C10.632 12.2352 10.812 12.1452 10.9399 11.9993C11.0633 11.8614 11.1315 11.6828 11.1315 11.4978C11.1315 11.3128 11.0633 11.1342 10.9399 10.9963L7.48987 7.48609C7.34883 7.34523 7.15765 7.26611 6.95832 7.26611C6.75899 7.26611 6.5678 7.34523 6.42677 7.48609L2.91652 10.9963C2.84948 11.1367 2.82761 11.2944 2.85391 11.4477C2.88022 11.601 2.9534 11.7424 3.06339 11.8524C3.17338 11.9624 3.31477 12.0356 3.46808 12.0619C3.62139 12.0882 3.77908 12.0663 3.91945 11.9993L6.92823 8.99048L9.93702 11.9993Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$p, "render$p"); +script$t.render = render$p; +var theme$f = /* @__PURE__ */ __name(function theme25(_ref) { + var dt = _ref.dt; + return "\n.p-orderlist {\n display: flex;\n gap: ".concat(dt("orderlist.gap"), ";\n}\n\n.p-orderlist-controls {\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: ").concat(dt("orderlist.controls.gap"), ";\n}\n"); +}, "theme"); +var classes$g = { + root: "p-orderlist p-component", + controls: "p-orderlist-controls" +}; +var OrderListStyle = BaseStyle.extend({ + name: "orderlist", + theme: theme$f, + classes: classes$g +}); +var script$1$g = { + name: "BaseOrderList", + "extends": script$1d, + props: { + modelValue: { + type: Array, + "default": null + }, + selection: { + type: Array, + "default": null + }, + dataKey: { + type: String, + "default": null + }, + listStyle: { + type: null, + "default": null + }, + metaKeySelection: { + type: Boolean, + "default": false + }, + autoOptionFocus: { + type: Boolean, + "default": true + }, + focusOnHover: { + type: Boolean, + "default": true + }, + responsive: { + type: Boolean, + "default": true + }, + breakpoint: { + type: String, + "default": "960px" + }, + striped: { + type: Boolean, + "default": false + }, + scrollHeight: { + type: String, + "default": "14rem" + }, + buttonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default13() { + return { + severity: "secondary" + }; + }, "_default") + }, + moveUpButtonProps: { + type: null, + "default": null + }, + moveTopButtonProps: { + type: null, + "default": null + }, + moveDownButtonProps: { + type: null, + "default": null + }, + moveBottomButtonProps: { + type: null, + "default": null + }, + tabindex: { + type: Number, + "default": 0 + }, + disabled: { + type: Boolean, + "default": false + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + } + }, + style: OrderListStyle, + provide: /* @__PURE__ */ __name(function provide35() { + return { + $pcOrderList: this, + $parentInstance: this + }; + }, "provide") +}; +function _toConsumableArray$5(r) { + return _arrayWithoutHoles$5(r) || _iterableToArray$5(r) || _unsupportedIterableToArray$6(r) || _nonIterableSpread$5(); +} +__name(_toConsumableArray$5, "_toConsumableArray$5"); +function _nonIterableSpread$5() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$5, "_nonIterableSpread$5"); +function _unsupportedIterableToArray$6(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$6(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$6(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$6, "_unsupportedIterableToArray$6"); +function _iterableToArray$5(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$5, "_iterableToArray$5"); +function _arrayWithoutHoles$5(r) { + if (Array.isArray(r)) return _arrayLikeToArray$6(r); +} +__name(_arrayWithoutHoles$5, "_arrayWithoutHoles$5"); +function _arrayLikeToArray$6(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$6, "_arrayLikeToArray$6"); +var script$s = { + name: "OrderList", + "extends": script$1$g, + inheritAttrs: false, + emits: ["update:modelValue", "reorder", "update:selection", "selection-change", "focus", "blur"], + itemTouched: false, + reorderDirection: null, + styleElement: null, + list: null, + data: /* @__PURE__ */ __name(function data23() { + return { + id: this.$attrs.id, + d_selection: this.selection + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId8(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId") + }, + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount11() { + this.destroyStyle(); + }, "beforeUnmount"), + updated: /* @__PURE__ */ __name(function updated6() { + if (this.reorderDirection) { + this.updateListScroll(); + this.reorderDirection = null; + } + }, "updated"), + mounted: /* @__PURE__ */ __name(function mounted24() { + this.id = this.id || UniqueComponentId(); + if (this.responsive) { + this.createStyle(); + } + }, "mounted"), + methods: { + updateSelection: /* @__PURE__ */ __name(function updateSelection(event2) { + this.$emit("update:selection", this.d_selection); + this.$emit("selection-change", { + originalEvent: event2, + value: this.d_selection + }); + }, "updateSelection"), + onChangeSelection: /* @__PURE__ */ __name(function onChangeSelection(params) { + this.d_selection = params.value; + this.updateSelection(params.event); + }, "onChangeSelection"), + onListFocus: /* @__PURE__ */ __name(function onListFocus3(event2) { + this.$emit("focus", event2); + }, "onListFocus"), + onListBlur: /* @__PURE__ */ __name(function onListBlur3(event2) { + this.$emit("blur", event2); + }, "onListBlur"), + onReorderUpdate: /* @__PURE__ */ __name(function onReorderUpdate(event2, value2) { + this.$emit("update:modelValue", value2); + this.$emit("reorder", { + originalEvent: event2, + value: value2, + direction: this.reorderDirection + }); + }, "onReorderUpdate"), + moveUp: /* @__PURE__ */ __name(function moveUp(event2) { + if (this.d_selection) { + var value2 = _toConsumableArray$5(this.modelValue); + for (var i = 0; i < this.d_selection.length; i++) { + var selectedItem = this.d_selection[i]; + var selectedItemIndex = findIndexInList(selectedItem, value2); + if (selectedItemIndex !== 0) { + var movedItem = value2[selectedItemIndex]; + var temp = value2[selectedItemIndex - 1]; + value2[selectedItemIndex - 1] = movedItem; + value2[selectedItemIndex] = temp; + } else { + break; + } + } + this.reorderDirection = "up"; + this.onReorderUpdate(event2, value2); + } + }, "moveUp"), + moveTop: /* @__PURE__ */ __name(function moveTop(event2) { + if (this.d_selection) { + var value2 = _toConsumableArray$5(this.modelValue); + for (var i = 0; i < this.d_selection.length; i++) { + var selectedItem = this.d_selection[i]; + var selectedItemIndex = findIndexInList(selectedItem, value2); + if (selectedItemIndex !== 0) { + var movedItem = value2.splice(selectedItemIndex, 1)[0]; + value2.unshift(movedItem); + } else { + break; + } + } + this.reorderDirection = "top"; + this.onReorderUpdate(event2, value2); + } + }, "moveTop"), + moveDown: /* @__PURE__ */ __name(function moveDown(event2) { + if (this.d_selection) { + var value2 = _toConsumableArray$5(this.modelValue); + for (var i = this.d_selection.length - 1; i >= 0; i--) { + var selectedItem = this.d_selection[i]; + var selectedItemIndex = findIndexInList(selectedItem, value2); + if (selectedItemIndex !== value2.length - 1) { + var movedItem = value2[selectedItemIndex]; + var temp = value2[selectedItemIndex + 1]; + value2[selectedItemIndex + 1] = movedItem; + value2[selectedItemIndex] = temp; + } else { + break; + } + } + this.reorderDirection = "down"; + this.onReorderUpdate(event2, value2); + } + }, "moveDown"), + moveBottom: /* @__PURE__ */ __name(function moveBottom(event2) { + if (this.d_selection) { + var value2 = _toConsumableArray$5(this.modelValue); + for (var i = this.d_selection.length - 1; i >= 0; i--) { + var selectedItem = this.d_selection[i]; + var selectedItemIndex = findIndexInList(selectedItem, value2); + if (selectedItemIndex !== value2.length - 1) { + var movedItem = value2.splice(selectedItemIndex, 1)[0]; + value2.push(movedItem); + } else { + break; + } + } + this.reorderDirection = "bottom"; + this.onReorderUpdate(event2, value2); + } + }, "moveBottom"), + updateListScroll: /* @__PURE__ */ __name(function updateListScroll() { + this.list = findSingle(this.$refs.listbox.$el, '[data-pc-section="list"]'); + var listItems = find(this.list, '[data-pc-section="item"][data-p-selected="true"]'); + if (listItems && listItems.length) { + switch (this.reorderDirection) { + case "up": + scrollInView(this.list, listItems[0]); + break; + case "top": + this.list.scrollTop = 0; + break; + case "down": + scrollInView(this.list, listItems[listItems.length - 1]); + break; + case "bottom": + this.list.scrollTop = this.list.scrollHeight; + break; + } + } + }, "updateListScroll"), + createStyle: /* @__PURE__ */ __name(function createStyle() { + if (!this.styleElement && !this.isUnstyled) { + var _this$$primevue; + this.styleElement = document.createElement("style"); + this.styleElement.type = "text/css"; + setAttribute(this.styleElement, "nonce", (_this$$primevue = this.$primevue) === null || _this$$primevue === void 0 || (_this$$primevue = _this$$primevue.config) === null || _this$$primevue === void 0 || (_this$$primevue = _this$$primevue.csp) === null || _this$$primevue === void 0 ? void 0 : _this$$primevue.nonce); + document.head.appendChild(this.styleElement); + var innerHTML = "\n@media screen and (max-width: ".concat(this.breakpoint, ") {\n .p-orderlist[").concat(this.$attrSelector, "] {\n flex-direction: column;\n }\n\n .p-orderlist[").concat(this.$attrSelector, "] .p-orderlist-controls {\n flex-direction: row;\n }\n}\n"); + this.styleElement.innerHTML = innerHTML; + } + }, "createStyle"), + destroyStyle: /* @__PURE__ */ __name(function destroyStyle() { + if (this.styleElement) { + document.head.removeChild(this.styleElement); + this.styleElement = null; + } + }, "destroyStyle"), + moveDisabled: /* @__PURE__ */ __name(function moveDisabled() { + return this.disabled ? true : !this.d_selection || !this.d_selection.length ? true : false; + }, "moveDisabled") + }, + computed: { + moveUpAriaLabel: /* @__PURE__ */ __name(function moveUpAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.moveUp : void 0; + }, "moveUpAriaLabel"), + moveTopAriaLabel: /* @__PURE__ */ __name(function moveTopAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.moveTop : void 0; + }, "moveTopAriaLabel"), + moveDownAriaLabel: /* @__PURE__ */ __name(function moveDownAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.moveDown : void 0; + }, "moveDownAriaLabel"), + moveBottomAriaLabel: /* @__PURE__ */ __name(function moveBottomAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.moveBottom : void 0; + }, "moveBottomAriaLabel"), + hasSelectedOption: /* @__PURE__ */ __name(function hasSelectedOption3() { + return isNotEmpty(this.d_selection); + }, "hasSelectedOption") + }, + components: { + Listbox: script$1O, + Button: script$1e, + AngleUpIcon: script$1P, + AngleDownIcon: script$1H, + AngleDoubleUpIcon: script$t, + AngleDoubleDownIcon: script$u + }, + directives: { + ripple: Ripple + } +}; +function _typeof$d(o) { + "@babel/helpers - typeof"; + return _typeof$d = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$d(o); +} +__name(_typeof$d, "_typeof$d"); +function ownKeys$c(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$c, "ownKeys$c"); +function _objectSpread$c(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$c(Object(t2), true).forEach(function(r2) { + _defineProperty$d(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$c(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$c, "_objectSpread$c"); +function _defineProperty$d(e, r, t2) { + return (r = _toPropertyKey$d(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$d, "_defineProperty$d"); +function _toPropertyKey$d(t2) { + var i = _toPrimitive$d(t2, "string"); + return "symbol" == _typeof$d(i) ? i : i + ""; +} +__name(_toPropertyKey$d, "_toPropertyKey$d"); +function _toPrimitive$d(t2, r) { + if ("object" != _typeof$d(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$d(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$d, "_toPrimitive$d"); +function render$o(_ctx, _cache, $props, $setup, $data, $options) { + var _component_AngleUpIcon = resolveComponent("AngleUpIcon"); + var _component_Button = resolveComponent("Button"); + var _component_AngleDoubleUpIcon = resolveComponent("AngleDoubleUpIcon"); + var _component_AngleDownIcon = resolveComponent("AngleDownIcon"); + var _component_AngleDoubleDownIcon = resolveComponent("AngleDoubleDownIcon"); + var _component_Listbox = resolveComponent("Listbox"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("controls") + }, _ctx.ptm("controls")), [renderSlot(_ctx.$slots, "controlsstart"), createVNode(_component_Button, mergeProps({ + onClick: $options.moveUp, + "aria-label": $options.moveUpAriaLabel, + disabled: $options.moveDisabled() + }, _objectSpread$c(_objectSpread$c({}, _ctx.buttonProps), _ctx.moveUpButtonProps), { + pt: _ctx.ptm("pcMoveUpButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "moveupicon", {}, function() { + return [createVNode(_component_AngleUpIcon, mergeProps(_ctx.ptm("pcMoveUpButton")["icon"], { + "data-pc-section": "moveupicon" + }), null, 16)]; + })]; + }), + _: 3 + }, 16, ["onClick", "aria-label", "disabled", "pt", "unstyled"]), createVNode(_component_Button, mergeProps({ + onClick: $options.moveTop, + "aria-label": $options.moveTopAriaLabel, + disabled: $options.moveDisabled() + }, _objectSpread$c(_objectSpread$c({}, _ctx.buttonProps), _ctx.moveTopButtonProps), { + pt: _ctx.ptm("pcMoveTopButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movetopicon", {}, function() { + return [createVNode(_component_AngleDoubleUpIcon, mergeProps(_ctx.ptm("pcMoveTopButton")["icon"], { + "data-pc-section": "movetopicon" + }), null, 16)]; + })]; + }), + _: 3 + }, 16, ["onClick", "aria-label", "disabled", "pt", "unstyled"]), createVNode(_component_Button, mergeProps({ + onClick: $options.moveDown, + "aria-label": $options.moveDownAriaLabel, + disabled: $options.moveDisabled() + }, _objectSpread$c(_objectSpread$c({}, _ctx.buttonProps), _ctx.moveDownButtonProps), { + pt: _ctx.ptm("pcMoveDownButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movedownicon", {}, function() { + return [createVNode(_component_AngleDownIcon, mergeProps(_ctx.ptm("pcMoveDownButton")["icon"], { + "data-pc-section": "movedownicon" + }), null, 16)]; + })]; + }), + _: 3 + }, 16, ["onClick", "aria-label", "disabled", "pt", "unstyled"]), createVNode(_component_Button, mergeProps({ + onClick: $options.moveBottom, + "aria-label": $options.moveBottomAriaLabel, + disabled: $options.moveDisabled() + }, _objectSpread$c(_objectSpread$c({}, _ctx.buttonProps), _ctx.moveBottomButtonProps), { + pt: _ctx.ptm("pcMoveBottomButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movebottomicon", {}, function() { + return [createVNode(_component_AngleDoubleDownIcon, mergeProps(_ctx.ptm("pcMoveBottomButton")["icon"], { + "data-pc-section": "movebottomicon" + }), null, 16)]; + })]; + }), + _: 3 + }, 16, ["onClick", "aria-label", "disabled", "pt", "unstyled"]), renderSlot(_ctx.$slots, "controlsend")], 16), createVNode(_component_Listbox, { + ref: "listbox", + id: $data.id, + modelValue: $data.d_selection, + options: _ctx.modelValue, + multiple: "", + metaKeySelection: _ctx.metaKeySelection, + listStyle: _ctx.listStyle, + scrollHeight: _ctx.scrollHeight, + tabindex: _ctx.tabindex, + dataKey: _ctx.dataKey, + autoOptionFocus: _ctx.autoOptionFocus, + focusOnHover: _ctx.focusOnHover, + striped: _ctx.striped, + disabled: _ctx.disabled, + ariaLabel: _ctx.ariaLabel, + ariaLabelledby: _ctx.ariaLabelledby, + pt: _ctx.ptm("pcListbox"), + unstyled: _ctx.unstyled, + onFocus: $options.onListFocus, + onBlur: $options.onListBlur, + onChange: $options.onChangeSelection + }, createSlots({ + option: withCtx(function(_ref) { + var option4 = _ref.option, selected3 = _ref.selected, index = _ref.index; + return [renderSlot(_ctx.$slots, _ctx.$slots.option ? "option" : "item", { + item: option4, + option: option4, + selected: selected3, + index + })]; + }), + _: 2 + }, [_ctx.$slots.header ? { + name: "header", + fn: withCtx(function() { + return [renderSlot(_ctx.$slots, "header")]; + }), + key: "0" + } : void 0]), 1032, ["id", "modelValue", "options", "metaKeySelection", "listStyle", "scrollHeight", "tabindex", "dataKey", "autoOptionFocus", "focusOnHover", "striped", "disabled", "ariaLabel", "ariaLabelledby", "pt", "unstyled", "onFocus", "onBlur", "onChange"])], 16); +} +__name(render$o, "render$o"); +script$s.render = render$o; +var theme$e = /* @__PURE__ */ __name(function theme26(_ref) { + var dt = _ref.dt; + return "\n.p-organizationchart-table {\n border-spacing: 0;\n border-collapse: separate;\n margin: 0 auto;\n}\n\n.p-organizationchart-table > tbody > tr > td {\n text-align: center;\n vertical-align: top;\n padding: 0 ".concat(dt("organizationchart.gutter"), ";\n}\n\n.p-organizationchart-node {\n display: inline-block;\n position: relative;\n border: 1px solid ").concat(dt("organizationchart.node.border.color"), ";\n background: ").concat(dt("organizationchart.node.background"), ";\n color: ").concat(dt("organizationchart.node.color"), ";\n padding: ").concat(dt("organizationchart.node.padding"), ";\n border-radius: ").concat(dt("organizationchart.node.border.radius"), ";\n transition: background ").concat(dt("organizationchart.transition.duration"), ", border-color ").concat(dt("organizationchart.transition.duration"), ", color ").concat(dt("organizationchart.transition.duration"), ", box-shadow ").concat(dt("organizationchart.transition.duration"), ";\n}\n\n.p-organizationchart-node:has(.p-organizationchart-node-toggle-button) {\n padding: ").concat(dt("organizationchart.node.toggleable.padding"), ";\n}\n\n.p-organizationchart-node.p-organizationchart-node-selectable:not(.p-organizationchart-node-selected):hover {\n background: ").concat(dt("organizationchart.node.hover.background"), ";\n color: ").concat(dt("organizationchart.node.hover.color"), ";\n}\n\n.p-organizationchart-node-selected {\n background: ").concat(dt("organizationchart.node.selected.background"), ";\n color: ").concat(dt("organizationchart.node.selected.color"), ";\n}\n\n.p-organizationchart-node-toggle-button {\n position: absolute;\n inset-block-end: calc(-1 * calc(").concat(dt("organizationchart.node.toggle.button.size"), " / 2));\n margin-inline-start: calc(-1 * calc(").concat(dt("organizationchart.node.toggle.button.size"), " / 2));\n z-index: 2;\n inset-inline-start: 50%;\n user-select: none;\n cursor: pointer;\n width: ").concat(dt("organizationchart.node.toggle.button.size"), ";\n height: ").concat(dt("organizationchart.node.toggle.button.size"), ";\n text-decoration: none;\n background: ").concat(dt("organizationchart.node.toggle.button.background"), ";\n color: ").concat(dt("organizationchart.node.toggle.button.color"), ";\n border-radius: ").concat(dt("organizationchart.node.toggle.button.border.radius"), ";\n border: 1px solid ").concat(dt("organizationchart.node.toggle.button.border.color"), ";\n display: inline-flex;\n justify-content: center;\n align-items: center;\n outline-color: transparent;\n transition: background ").concat(dt("organizationchart.transition.duration"), ", color ").concat(dt("organizationchart.transition.duration"), ", border-color ").concat(dt("organizationchart.transition.duration"), ", outline-color ").concat(dt("organizationchart.transition.duration"), ", box-shadow ").concat(dt("organizationchart.transition.duration"), ";\n}\n\n.p-organizationchart-node-toggle-button:hover {\n background: ").concat(dt("organizationchart.node.toggle.button.hover.background"), ";\n color: ").concat(dt("organizationchart.node.toggle.button.hover.color"), ";\n}\n\n.p-organizationchart-node-toggle-button:focus-visible {\n box-shadow: ").concat(dt("breadcrumb.item.focus.ring.shadow"), ";\n outline: ").concat(dt("breadcrumb.item.focus.ring.width"), " ").concat(dt("breadcrumb.item.focus.ring.style"), " ").concat(dt("breadcrumb.item.focus.ring.color"), ";\n outline-offset: ").concat(dt("breadcrumb.item.focus.ring.offset"), ";\n}\n\n.p-organizationchart-node-toggle-button-icon {\n position: relative;\n inset-block-start: 1px;\n}\n\n.p-organizationchart-connector-down {\n margin: 0 auto;\n height: ").concat(dt("organizationchart.connector.height"), ";\n width: 1px;\n background: ").concat(dt("organizationchart.connector.color"), ";\n}\n\n.p-organizationchart-connector-right {\n border-radius: 0;\n}\n\n.p-organizationchart-connector-left {\n border-radius: 0;\n border-inline-end: 1px solid ").concat(dt("organizationchart.connector.color"), ";\n}\n\n.p-organizationchart-connector-top {\n border-block-start: 1px solid ").concat(dt("organizationchart.connector.color"), ";\n}\n\n.p-organizationchart-node-selectable {\n cursor: pointer;\n}\n\n.p-organizationchart-connectors :nth-child(1 of .p-organizationchart-connector-left) {\n border-inline-end: 0 none;\n}\n\n.p-organizationchart-connectors :nth-last-child(1 of .p-organizationchart-connector-left) {\n border-start-end-radius: ").concat(dt("organizationchart.connector.border.radius"), ";\n}\n\n.p-organizationchart-connectors :nth-child(1 of .p-organizationchart-connector-right) {\n border-inline-start: 1px solid ").concat(dt("organizationchart.connector.color"), ";\n border-start-start-radius: ").concat(dt("organizationchart.connector.border.radius"), ";\n}\n"); +}, "theme"); +var classes$f = { + root: "p-organizationchart p-component", + table: "p-organizationchart-table", + node: /* @__PURE__ */ __name(function node(_ref2) { + var instance = _ref2.instance; + return ["p-organizationchart-node", { + "p-organizationchart-node-selectable": instance.selectable, + "p-organizationchart-node-selected": instance.selected + }]; + }, "node"), + nodeToggleButton: "p-organizationchart-node-toggle-button", + nodeToggleButtonIcon: "p-organizationchart-node-toggle-button-icon", + connectors: "p-organizationchart-connectors", + connectorDown: "p-organizationchart-connector-down", + connectorLeft: /* @__PURE__ */ __name(function connectorLeft(_ref3) { + var index = _ref3.index; + return ["p-organizationchart-connector-left", { + "p-organizationchart-connector-top": !(index === 0) + }]; + }, "connectorLeft"), + connectorRight: /* @__PURE__ */ __name(function connectorRight(_ref4) { + var props = _ref4.props, index = _ref4.index; + return ["p-organizationchart-connector-right", { + "p-organizationchart-connector-top": !(index === props.node.children.length - 1) + }]; + }, "connectorRight"), + nodeChildren: "p-organizationchart-node-children" +}; +var OrganizationChartStyle = BaseStyle.extend({ + name: "organizationchart", + theme: theme$e, + classes: classes$f +}); +var script$2$2 = { + name: "BaseOrganizationChart", + "extends": script$1d, + props: { + value: { + type: null, + "default": null + }, + selectionKeys: { + type: null, + "default": null + }, + selectionMode: { + type: String, + "default": null + }, + collapsible: { + type: Boolean, + "default": false + }, + collapsedKeys: { + type: null, + "default": null + } + }, + style: OrganizationChartStyle, + provide: /* @__PURE__ */ __name(function provide36() { + return { + $pcOrganizationChart: this, + $parentInstance: this + }; + }, "provide") +}; +var script$1$f = { + name: "OrganizationChartNode", + hostName: "OrganizationChart", + "extends": script$1d, + emits: ["node-click", "node-toggle"], + props: { + node: { + type: null, + "default": null + }, + templates: { + type: null, + "default": null + }, + collapsible: { + type: Boolean, + "default": false + }, + collapsedKeys: { + type: null, + "default": null + }, + selectionKeys: { + type: null, + "default": null + }, + selectionMode: { + type: String, + "default": null + } + }, + methods: { + getPTOptions: /* @__PURE__ */ __name(function getPTOptions6(key) { + return this.ptm(key, { + context: { + expanded: this.expanded, + selectable: this.selectable, + selected: this.selected, + toggleable: this.toggleable, + active: this.selected + } + }); + }, "getPTOptions"), + getNodeOptions: /* @__PURE__ */ __name(function getNodeOptions(lineTop, key) { + return this.ptm(key, { + context: { + lineTop + } + }); + }, "getNodeOptions"), + onNodeClick: /* @__PURE__ */ __name(function onNodeClick(event2) { + if (isAttributeEquals(event2.target, "data-pc-section", "nodetogglebutton") || isAttributeEquals(event2.target, "data-pc-section", "nodetogglebuttonicon")) { + return; + } + if (this.selectionMode) { + this.$emit("node-click", this.node); + } + }, "onNodeClick"), + onChildNodeClick: /* @__PURE__ */ __name(function onChildNodeClick(node2) { + this.$emit("node-click", node2); + }, "onChildNodeClick"), + toggleNode: /* @__PURE__ */ __name(function toggleNode() { + this.$emit("node-toggle", this.node); + }, "toggleNode"), + onChildNodeToggle: /* @__PURE__ */ __name(function onChildNodeToggle(node2) { + this.$emit("node-toggle", node2); + }, "onChildNodeToggle"), + onKeydown: /* @__PURE__ */ __name(function onKeydown4(event2) { + if (event2.code === "Enter" || event2.code === "NumpadEnter" || event2.code === "Space") { + this.toggleNode(); + event2.preventDefault(); + } + }, "onKeydown") + }, + computed: { + leaf: /* @__PURE__ */ __name(function leaf() { + return this.node.leaf === false ? false : !(this.node.children && this.node.children.length); + }, "leaf"), + colspan: /* @__PURE__ */ __name(function colspan() { + return this.node.children && this.node.children.length ? this.node.children.length * 2 : null; + }, "colspan"), + childStyle: /* @__PURE__ */ __name(function childStyle() { + return { + visibility: !this.leaf && this.expanded ? "inherit" : "hidden" + }; + }, "childStyle"), + expanded: /* @__PURE__ */ __name(function expanded() { + return this.collapsedKeys[this.node.key] === void 0; + }, "expanded"), + selectable: /* @__PURE__ */ __name(function selectable() { + return this.selectionMode && this.node.selectable !== false; + }, "selectable"), + selected: /* @__PURE__ */ __name(function selected() { + return this.selectable && this.selectionKeys && this.selectionKeys[this.node.key] === true; + }, "selected"), + toggleable: /* @__PURE__ */ __name(function toggleable() { + return this.collapsible && this.node.collapsible !== false && !this.leaf; + }, "toggleable") + }, + components: { + ChevronDownIcon: script$1k, + ChevronUpIcon: script$1j + } +}; +var _hoisted_1$e = ["colspan"]; +var _hoisted_2$a = ["colspan"]; +var _hoisted_3$7 = ["colspan"]; +function render$1$2(_ctx, _cache, $props, $setup, $data, $options) { + var _component_OrganizationChartNode = resolveComponent("OrganizationChartNode", true); + return openBlock(), createElementBlock("table", mergeProps({ + "class": _ctx.cx("table") + }, _ctx.ptm("table")), [createBaseVNode("tbody", normalizeProps(guardReactiveProps(_ctx.ptm("body"))), [$props.node ? (openBlock(), createElementBlock("tr", normalizeProps(mergeProps({ + key: 0 + }, _ctx.ptm("row"))), [createBaseVNode("td", mergeProps({ + colspan: $options.colspan + }, _ctx.ptm("cell")), [createBaseVNode("div", mergeProps({ + "class": [_ctx.cx("node"), $props.node.styleClass], + onClick: _cache[2] || (_cache[2] = function() { + return $options.onNodeClick && $options.onNodeClick.apply($options, arguments); + }) + }, $options.getPTOptions("node")), [(openBlock(), createBlock(resolveDynamicComponent($props.templates[$props.node.type] || $props.templates["default"]), { + node: $props.node + }, null, 8, ["node"])), $options.toggleable ? (openBlock(), createElementBlock("a", mergeProps({ + key: 0, + tabindex: "0", + "class": _ctx.cx("nodeToggleButton"), + onClick: _cache[0] || (_cache[0] = function() { + return $options.toggleNode && $options.toggleNode.apply($options, arguments); + }), + onKeydown: _cache[1] || (_cache[1] = function() { + return $options.onKeydown && $options.onKeydown.apply($options, arguments); + }) + }, $options.getPTOptions("nodeToggleButton")), [$props.templates.toggleicon || $props.templates.togglericon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.toggleicon || $props.templates.togglericon), mergeProps({ + key: 0, + expanded: $options.expanded, + "class": _ctx.cx("nodeToggleButtonIcon") + }, $options.getPTOptions("nodeToggleButtonIcon")), null, 16, ["expanded", "class"])) : (openBlock(), createBlock(resolveDynamicComponent($options.expanded ? "ChevronDownIcon" : "ChevronUpIcon"), mergeProps({ + key: 1, + "class": _ctx.cx("nodeToggleButtonIcon") + }, $options.getPTOptions("nodeToggleButtonIcon")), null, 16, ["class"]))], 16)) : createCommentVNode("", true)], 16)], 16, _hoisted_1$e)], 16)) : createCommentVNode("", true), createBaseVNode("tr", mergeProps({ + style: $options.childStyle, + "class": _ctx.cx("connectors") + }, _ctx.ptm("connectors")), [createBaseVNode("td", mergeProps({ + colspan: $options.colspan + }, _ctx.ptm("lineCell")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("connectorDown") + }, _ctx.ptm("connectorDown")), null, 16)], 16, _hoisted_2$a)], 16), createBaseVNode("tr", mergeProps({ + style: $options.childStyle, + "class": _ctx.cx("connectors") + }, _ctx.ptm("connectors")), [$props.node.children && $props.node.children.length === 1 ? (openBlock(), createElementBlock("td", mergeProps({ + key: 0, + colspan: $options.colspan + }, _ctx.ptm("lineCell")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("connectorDown") + }, _ctx.ptm("connectorDown")), null, 16)], 16, _hoisted_3$7)) : createCommentVNode("", true), $props.node.children && $props.node.children.length > 1 ? (openBlock(true), createElementBlock(Fragment, { + key: 1 + }, renderList($props.node.children, function(child, i) { + return openBlock(), createElementBlock(Fragment, { + key: child.key + }, [createBaseVNode("td", mergeProps({ + "class": _ctx.cx("connectorLeft", { + index: i + }), + ref_for: true + }, $options.getNodeOptions(!(i === 0), "connectorLeft")), " ", 16), createBaseVNode("td", mergeProps({ + "class": _ctx.cx("connectorRight", { + index: i + }), + ref_for: true + }, $options.getNodeOptions(!(i === $props.node.children.length - 1), "connectorRight")), " ", 16)], 64); + }), 128)) : createCommentVNode("", true)], 16), createBaseVNode("tr", mergeProps({ + style: $options.childStyle, + "class": _ctx.cx("nodeChildren") + }, _ctx.ptm("nodeChildren")), [(openBlock(true), createElementBlock(Fragment, null, renderList($props.node.children, function(child) { + return openBlock(), createElementBlock("td", mergeProps({ + key: child.key, + colspan: "2", + ref_for: true + }, _ctx.ptm("nodeCell")), [createVNode(_component_OrganizationChartNode, { + node: child, + templates: $props.templates, + collapsedKeys: $props.collapsedKeys, + onNodeToggle: $options.onChildNodeToggle, + collapsible: $props.collapsible, + selectionMode: $props.selectionMode, + selectionKeys: $props.selectionKeys, + onNodeClick: $options.onChildNodeClick, + pt: _ctx.pt, + unstyled: _ctx.unstyled + }, null, 8, ["node", "templates", "collapsedKeys", "onNodeToggle", "collapsible", "selectionMode", "selectionKeys", "onNodeClick", "pt", "unstyled"])], 16); + }), 128))], 16)], 16)], 16); +} +__name(render$1$2, "render$1$2"); +script$1$f.render = render$1$2; +function _typeof$c(o) { + "@babel/helpers - typeof"; + return _typeof$c = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$c(o); +} +__name(_typeof$c, "_typeof$c"); +function ownKeys$b(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$b, "ownKeys$b"); +function _objectSpread$b(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$b(Object(t2), true).forEach(function(r2) { + _defineProperty$c(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$b(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$b, "_objectSpread$b"); +function _defineProperty$c(e, r, t2) { + return (r = _toPropertyKey$c(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$c, "_defineProperty$c"); +function _toPropertyKey$c(t2) { + var i = _toPrimitive$c(t2, "string"); + return "symbol" == _typeof$c(i) ? i : i + ""; +} +__name(_toPropertyKey$c, "_toPropertyKey$c"); +function _toPrimitive$c(t2, r) { + if ("object" != _typeof$c(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$c(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$c, "_toPrimitive$c"); +var script$r = { + name: "OrganizationChart", + "extends": script$2$2, + inheritAttrs: false, + emits: ["node-unselect", "node-select", "update:selectionKeys", "node-expand", "node-collapse", "update:collapsedKeys"], + data: /* @__PURE__ */ __name(function data24() { + return { + d_collapsedKeys: this.collapsedKeys || {} + }; + }, "data"), + watch: { + collapsedKeys: /* @__PURE__ */ __name(function collapsedKeys(newValue) { + this.d_collapsedKeys = newValue; + }, "collapsedKeys") + }, + methods: { + onNodeClick: /* @__PURE__ */ __name(function onNodeClick2(node2) { + var key = node2.key; + if (this.selectionMode) { + var _selectionKeys = this.selectionKeys ? _objectSpread$b({}, this.selectionKeys) : {}; + if (_selectionKeys[key]) { + delete _selectionKeys[key]; + this.$emit("node-unselect", node2); + } else { + if (this.selectionMode === "single") { + _selectionKeys = {}; + } + _selectionKeys[key] = true; + this.$emit("node-select", node2); + } + this.$emit("update:selectionKeys", _selectionKeys); + } + }, "onNodeClick"), + onNodeToggle: /* @__PURE__ */ __name(function onNodeToggle(node2) { + var key = node2.key; + if (this.d_collapsedKeys[key]) { + delete this.d_collapsedKeys[key]; + this.$emit("node-expand", node2); + } else { + this.d_collapsedKeys[key] = true; + this.$emit("node-collapse", node2); + } + this.d_collapsedKeys = _objectSpread$b({}, this.d_collapsedKeys); + this.$emit("update:collapsedKeys", this.d_collapsedKeys); + }, "onNodeToggle") + }, + components: { + OrganizationChartNode: script$1$f + } +}; +function render$n(_ctx, _cache, $props, $setup, $data, $options) { + var _component_OrganizationChartNode = resolveComponent("OrganizationChartNode"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [createVNode(_component_OrganizationChartNode, { + node: _ctx.value, + templates: _ctx.$slots, + onNodeToggle: $options.onNodeToggle, + collapsedKeys: $data.d_collapsedKeys, + collapsible: _ctx.collapsible, + onNodeClick: $options.onNodeClick, + selectionMode: _ctx.selectionMode, + selectionKeys: _ctx.selectionKeys, + pt: _ctx.pt, + unstyled: _ctx.unstyled + }, null, 8, ["node", "templates", "onNodeToggle", "collapsedKeys", "collapsible", "onNodeClick", "selectionMode", "selectionKeys", "pt", "unstyled"])], 16); +} +__name(render$n, "render$n"); +script$r.render = render$n; +var script$q = { + name: "OverlayPanel", + "extends": script$1Q, + mounted: /* @__PURE__ */ __name(function mounted25() { + console.warn("Deprecated since v4. Use Popover component instead."); + }, "mounted") +}; +var OverlayPanelStyle = BaseStyle.extend({ + name: "overlaypanel" +}); +var theme$d = /* @__PURE__ */ __name(function theme27(_ref) { + var dt = _ref.dt; + return "\n.p-panelmenu {\n display: flex;\n flex-direction: column;\n gap: ".concat(dt("panelmenu.gap"), ";\n}\n\n.p-panelmenu-panel {\n background: ").concat(dt("panelmenu.panel.background"), ";\n border-width: ").concat(dt("panelmenu.panel.border.width"), ";\n border-style: solid;\n border-color: ").concat(dt("panelmenu.panel.border.color"), ";\n color: ").concat(dt("panelmenu.panel.color"), ";\n border-radius: ").concat(dt("panelmenu.panel.border.radius"), ";\n padding: ").concat(dt("panelmenu.panel.padding"), ";\n}\n\n.p-panelmenu-panel:first-child {\n border-width: ").concat(dt("panelmenu.panel.first.border.width"), ";\n border-start-start-radius: ").concat(dt("panelmenu.panel.first.top.border.radius"), ";\n border-start-end-radius: ").concat(dt("panelmenu.panel.first.top.border.radius"), ";\n}\n\n.p-panelmenu-panel:last-child {\n border-width: ").concat(dt("panelmenu.panel.last.border.width"), ";\n border-end-start-radius: ").concat(dt("panelmenu.panel.last.bottom.border.radius"), ";\n border-end-end-radius: ").concat(dt("panelmenu.panel.last.bottom.border.radius"), ";\n}\n\n.p-panelmenu-header {\n outline: 0 none;\n}\n\n.p-panelmenu-header-content {\n border-radius: ").concat(dt("panelmenu.item.border.radius"), ";\n transition: background ").concat(dt("panelmenu.transition.duration"), ", color ").concat(dt("panelmenu.transition.duration"), ", outline-color ").concat(dt("panelmenu.transition.duration"), ", box-shadow ").concat(dt("panelmenu.transition.duration"), ";\n outline-color: transparent;\n color: ").concat(dt("panelmenu.item.color"), ";\n}\n\n.p-panelmenu-header-link {\n display: flex;\n gap: ").concat(dt("panelmenu.item.gap"), ";\n padding: ").concat(dt("panelmenu.item.padding"), ";\n align-items: center;\n user-select: none;\n cursor: pointer;\n position: relative;\n text-decoration: none;\n color: inherit;\n}\n\n.p-panelmenu-header-icon,\n.p-panelmenu-item-icon {\n color: ").concat(dt("panelmenu.item.icon.color"), ";\n}\n\n.p-panelmenu-submenu-icon {\n color: ").concat(dt("panelmenu.submenu.icon.color"), ";\n}\n\n.p-panelmenu-submenu-icon:dir(rtl) {\n transform: rotate(180deg);\n}\n\n.p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content {\n background: ").concat(dt("panelmenu.item.focus.background"), ";\n color: ").concat(dt("panelmenu.item.focus.color"), ";\n}\n\n.p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content .p-panelmenu-header-icon {\n color: ").concat(dt("panelmenu.item.icon.focus.color"), ";\n}\n\n.p-panelmenu-header:not(.p-disabled):focus-visible .p-panelmenu-header-content .p-panelmenu-submenu-icon {\n color: ").concat(dt("panelmenu.submenu.icon.focus.color"), ";\n}\n\n.p-panelmenu-header:not(.p-disabled) .p-panelmenu-header-content:hover {\n background: ").concat(dt("panelmenu.item.focus.background"), ";\n color: ").concat(dt("panelmenu.item.focus.color"), ";\n}\n\n.p-panelmenu-header:not(.p-disabled) .p-panelmenu-header-content:hover .p-panelmenu-header-icon {\n color: ").concat(dt("panelmenu.item.icon.focus.color"), ";\n}\n\n.p-panelmenu-header:not(.p-disabled) .p-panelmenu-header-content:hover .p-panelmenu-submenu-icon {\n color: ").concat(dt("panelmenu.submenu.icon.focus.color"), ";\n}\n\n.p-panelmenu-submenu {\n margin: 0;\n padding: 0 0 0 ").concat(dt("panelmenu.submenu.indent"), ";\n outline: 0;\n list-style: none;\n}\n\n.p-panelmenu-submenu:dir(rtl) {\n padding: 0 ").concat(dt("panelmenu.submenu.indent"), " 0 0;\n}\n\n.p-panelmenu-item-link {\n display: flex;\n gap: ").concat(dt("panelmenu.item.gap"), ";\n padding: ").concat(dt("panelmenu.item.padding"), ";\n align-items: center;\n user-select: none;\n cursor: pointer;\n text-decoration: none;\n color: inherit;\n position: relative;\n overflow: hidden;\n}\n\n.p-panelmenu-item-label {\n line-height: 1;\n}\n\n.p-panelmenu-item-content {\n border-radius: ").concat(dt("panelmenu.item.border.radius"), ";\n transition: background ").concat(dt("panelmenu.transition.duration"), ", color ").concat(dt("panelmenu.transition.duration"), ", outline-color ").concat(dt("panelmenu.transition.duration"), ", box-shadow ").concat(dt("panelmenu.transition.duration"), ";\n color: ").concat(dt("panelmenu.item.color"), ";\n outline-color: transparent;\n}\n\n.p-panelmenu-item.p-focus > .p-panelmenu-item-content {\n background: ").concat(dt("panelmenu.item.focus.background"), ";\n color: ").concat(dt("panelmenu.item.focus.color"), ";\n}\n\n.p-panelmenu-item.p-focus > .p-panelmenu-item-content .p-panelmenu-item-icon {\n color: ").concat(dt("panelmenu.item.focus.color"), ";\n}\n\n.p-panelmenu-item.p-focus > .p-panelmenu-item-content .p-panelmenu-submenu-icon {\n color: ").concat(dt("panelmenu.submenu.icon.focus.color"), ";\n}\n\n.p-panelmenu-item:not(.p-disabled) > .p-panelmenu-item-content:hover {\n background: ").concat(dt("panelmenu.item.focus.background"), ";\n color: ").concat(dt("panelmenu.item.focus.color"), ";\n}\n\n.p-panelmenu-item:not(.p-disabled) > .p-panelmenu-item-content:hover .p-panelmenu-item-icon {\n color: ").concat(dt("panelmenu.item.icon.focus.color"), ";\n}\n\n.p-panelmenu-item:not(.p-disabled) > .p-panelmenu-item-content:hover .p-panelmenu-submenu-icon {\n color: ").concat(dt("panelmenu.submenu.icon.focus.color"), ";\n}\n"); +}, "theme"); +var classes$e = { + root: "p-panelmenu p-component", + panel: "p-panelmenu-panel", + header: /* @__PURE__ */ __name(function header(_ref2) { + var instance = _ref2.instance, item8 = _ref2.item; + return ["p-panelmenu-header", { + "p-panelmenu-header-active": instance.isItemActive(item8) && !!item8.items, + "p-disabled": instance.isItemDisabled(item8) + }]; + }, "header"), + headerContent: "p-panelmenu-header-content", + headerLink: "p-panelmenu-header-link", + headerIcon: "p-panelmenu-header-icon", + headerLabel: "p-panelmenu-header-label", + contentContainer: "p-panelmenu-content-container", + content: "p-panelmenu-content", + rootList: "p-panelmenu-root-list", + item: /* @__PURE__ */ __name(function item5(_ref3) { + var instance = _ref3.instance, processedItem = _ref3.processedItem; + return ["p-panelmenu-item", { + "p-focus": instance.isItemFocused(processedItem), + "p-disabled": instance.isItemDisabled(processedItem) + }]; + }, "item"), + itemContent: "p-panelmenu-item-content", + itemLink: "p-panelmenu-item-link", + itemIcon: "p-panelmenu-item-icon", + itemLabel: "p-panelmenu-item-label", + submenuIcon: "p-panelmenu-submenu-icon", + submenu: "p-panelmenu-submenu", + separator: "p-menuitem-separator" +}; +var PanelMenuStyle = BaseStyle.extend({ + name: "panelmenu", + theme: theme$d, + classes: classes$e +}); +var script$3$1 = { + name: "BasePanelMenu", + "extends": script$1d, + props: { + model: { + type: Array, + "default": null + }, + expandedKeys: { + type: Object, + "default": null + }, + multiple: { + type: Boolean, + "default": false + }, + tabindex: { + type: Number, + "default": 0 + } + }, + style: PanelMenuStyle, + provide: /* @__PURE__ */ __name(function provide37() { + return { + $pcPanelMenu: this, + $parentInstance: this + }; + }, "provide") +}; +var script$2$1 = { + name: "PanelMenuSub", + hostName: "PanelMenu", + "extends": script$1d, + emits: ["item-toggle", "item-mousemove"], + props: { + panelId: { + type: String, + "default": null + }, + focusedItemId: { + type: String, + "default": null + }, + items: { + type: Array, + "default": null + }, + level: { + type: Number, + "default": 0 + }, + templates: { + type: Object, + "default": null + }, + activeItemPath: { + type: Object, + "default": null + }, + tabindex: { + type: Number, + "default": -1 + } + }, + methods: { + getItemId: /* @__PURE__ */ __name(function getItemId3(processedItem) { + return "".concat(this.panelId, "_").concat(processedItem.key); + }, "getItemId"), + getItemKey: /* @__PURE__ */ __name(function getItemKey2(processedItem) { + return this.getItemId(processedItem); + }, "getItemKey"), + getItemProp: /* @__PURE__ */ __name(function getItemProp5(processedItem, name4, params) { + return processedItem && processedItem.item ? resolve(processedItem.item[name4], params) : void 0; + }, "getItemProp"), + getItemLabel: /* @__PURE__ */ __name(function getItemLabel3(processedItem) { + return this.getItemProp(processedItem, "label"); + }, "getItemLabel"), + getPTOptions: /* @__PURE__ */ __name(function getPTOptions7(key, processedItem, index) { + return this.ptm(key, { + context: { + item: processedItem.item, + index, + active: this.isItemActive(processedItem), + focused: this.isItemFocused(processedItem), + disabled: this.isItemDisabled(processedItem) + } + }); + }, "getPTOptions"), + isItemActive: /* @__PURE__ */ __name(function isItemActive4(processedItem) { + return this.activeItemPath.some(function(path) { + return path.key === processedItem.key; + }); + }, "isItemActive"), + isItemVisible: /* @__PURE__ */ __name(function isItemVisible3(processedItem) { + return this.getItemProp(processedItem, "visible") !== false; + }, "isItemVisible"), + isItemDisabled: /* @__PURE__ */ __name(function isItemDisabled3(processedItem) { + return this.getItemProp(processedItem, "disabled"); + }, "isItemDisabled"), + isItemFocused: /* @__PURE__ */ __name(function isItemFocused3(processedItem) { + return this.focusedItemId === this.getItemId(processedItem); + }, "isItemFocused"), + isItemGroup: /* @__PURE__ */ __name(function isItemGroup3(processedItem) { + return isNotEmpty(processedItem.items); + }, "isItemGroup"), + onItemClick: /* @__PURE__ */ __name(function onItemClick5(event2, processedItem) { + this.getItemProp(processedItem, "command", { + originalEvent: event2, + item: processedItem.item + }); + this.$emit("item-toggle", { + processedItem, + expanded: !this.isItemActive(processedItem) + }); + }, "onItemClick"), + onItemToggle: /* @__PURE__ */ __name(function onItemToggle(event2) { + this.$emit("item-toggle", event2); + }, "onItemToggle"), + onItemMouseMove: /* @__PURE__ */ __name(function onItemMouseMove2(event2, processedItem) { + this.$emit("item-mousemove", { + originalEvent: event2, + processedItem + }); + }, "onItemMouseMove"), + getAriaSetSize: /* @__PURE__ */ __name(function getAriaSetSize2() { + var _this = this; + return this.items.filter(function(processedItem) { + return _this.isItemVisible(processedItem) && !_this.getItemProp(processedItem, "separator"); + }).length; + }, "getAriaSetSize"), + getAriaPosInset: /* @__PURE__ */ __name(function getAriaPosInset3(index) { + var _this2 = this; + return index - this.items.slice(0, index).filter(function(processedItem) { + return _this2.isItemVisible(processedItem) && _this2.getItemProp(processedItem, "separator"); + }).length + 1; + }, "getAriaPosInset"), + getMenuItemProps: /* @__PURE__ */ __name(function getMenuItemProps5(processedItem, index) { + return { + action: mergeProps({ + "class": this.cx("itemLink"), + tabindex: -1 + }, this.getPTOptions("itemLink", processedItem, index)), + icon: mergeProps({ + "class": [this.cx("itemIcon"), this.getItemProp(processedItem, "icon")] + }, this.getPTOptions("itemIcon", processedItem, index)), + label: mergeProps({ + "class": this.cx("itemLabel") + }, this.getPTOptions("itemLabel", processedItem, index)), + submenuicon: mergeProps({ + "class": this.cx("submenuIcon") + }, this.getPTOptions("submenuicon", processedItem, index)) + }; + }, "getMenuItemProps") + }, + components: { + ChevronRightIcon: script$1l, + ChevronDownIcon: script$1k + }, + directives: { + ripple: Ripple + } +}; +var _hoisted_1$1$2 = ["tabindex"]; +var _hoisted_2$1$1 = ["id", "aria-label", "aria-expanded", "aria-level", "aria-setsize", "aria-posinset", "data-p-focused", "data-p-disabled"]; +var _hoisted_3$1$1 = ["onClick", "onMousemove"]; +var _hoisted_4$1$1 = ["href", "target"]; +function render$2$1(_ctx, _cache, $props, $setup, $data, $options) { + var _component_PanelMenuSub = resolveComponent("PanelMenuSub", true); + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createElementBlock("ul", { + "class": normalizeClass(_ctx.cx("submenu")), + tabindex: $props.tabindex + }, [(openBlock(true), createElementBlock(Fragment, null, renderList($props.items, function(processedItem, index) { + return openBlock(), createElementBlock(Fragment, { + key: $options.getItemKey(processedItem) + }, [$options.isItemVisible(processedItem) && !$options.getItemProp(processedItem, "separator") ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + id: $options.getItemId(processedItem), + "class": [_ctx.cx("item", { + processedItem + }), $options.getItemProp(processedItem, "class")], + style: $options.getItemProp(processedItem, "style"), + role: "treeitem", + "aria-label": $options.getItemLabel(processedItem), + "aria-expanded": $options.isItemGroup(processedItem) ? $options.isItemActive(processedItem) : void 0, + "aria-level": $props.level + 1, + "aria-setsize": $options.getAriaSetSize(), + "aria-posinset": $options.getAriaPosInset(index), + ref_for: true + }, $options.getPTOptions("item", processedItem, index), { + "data-p-focused": $options.isItemFocused(processedItem), + "data-p-disabled": $options.isItemDisabled(processedItem) + }), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("itemContent"), + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onItemClick($event, processedItem); + }, "onClick"), + onMousemove: /* @__PURE__ */ __name(function onMousemove($event) { + return $options.onItemMouseMove($event, processedItem); + }, "onMousemove"), + ref_for: true + }, $options.getPTOptions("itemContent", processedItem, index)), [!$props.templates.item ? withDirectives((openBlock(), createElementBlock("a", mergeProps({ + key: 0, + href: $options.getItemProp(processedItem, "url"), + "class": _ctx.cx("itemLink"), + target: $options.getItemProp(processedItem, "target"), + tabindex: "-1", + ref_for: true + }, $options.getPTOptions("itemLink", processedItem, index)), [$options.isItemGroup(processedItem) ? (openBlock(), createElementBlock(Fragment, { + key: 0 + }, [$props.templates.submenuicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.submenuicon), mergeProps({ + key: 0, + "class": _ctx.cx("submenuIcon"), + active: $options.isItemActive(processedItem), + ref_for: true + }, $options.getPTOptions("submenuIcon", processedItem, index)), null, 16, ["class", "active"])) : (openBlock(), createBlock(resolveDynamicComponent($options.isItemActive(processedItem) ? "ChevronDownIcon" : "ChevronRightIcon"), mergeProps({ + key: 1, + "class": _ctx.cx("submenuIcon"), + ref_for: true + }, $options.getPTOptions("submenuIcon", processedItem, index)), null, 16, ["class"]))], 64)) : createCommentVNode("", true), $props.templates.itemicon ? (openBlock(), createBlock(resolveDynamicComponent($props.templates.itemicon), { + key: 1, + item: processedItem.item, + "class": normalizeClass(_ctx.cx("itemIcon")) + }, null, 8, ["item", "class"])) : $options.getItemProp(processedItem, "icon") ? (openBlock(), createElementBlock("span", mergeProps({ + key: 2, + "class": [_ctx.cx("itemIcon"), $options.getItemProp(processedItem, "icon")], + ref_for: true + }, $options.getPTOptions("itemIcon", processedItem, index)), null, 16)) : createCommentVNode("", true), createBaseVNode("span", mergeProps({ + "class": _ctx.cx("itemLabel"), + ref_for: true + }, $options.getPTOptions("itemLabel", processedItem, index)), toDisplayString($options.getItemLabel(processedItem)), 17)], 16, _hoisted_4$1$1)), [[_directive_ripple]]) : (openBlock(), createBlock(resolveDynamicComponent($props.templates.item), { + key: 1, + item: processedItem.item, + root: false, + active: $options.isItemActive(processedItem), + hasSubmenu: $options.isItemGroup(processedItem), + label: $options.getItemLabel(processedItem), + props: $options.getMenuItemProps(processedItem, index) + }, null, 8, ["item", "active", "hasSubmenu", "label", "props"]))], 16, _hoisted_3$1$1), createVNode(Transition, mergeProps({ + name: "p-toggleable-content", + ref_for: true + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [withDirectives(createBaseVNode("div", mergeProps({ + "class": _ctx.cx("contentContainer"), + ref_for: true + }, _ctx.ptm("contentContainer")), [$options.isItemVisible(processedItem) && $options.isItemGroup(processedItem) ? (openBlock(), createBlock(_component_PanelMenuSub, mergeProps({ + key: 0, + id: $options.getItemId(processedItem) + "_list", + role: "group", + panelId: $props.panelId, + focusedItemId: $props.focusedItemId, + items: processedItem.items, + level: $props.level + 1, + templates: $props.templates, + activeItemPath: $props.activeItemPath, + onItemToggle: $options.onItemToggle, + onItemMousemove: _cache[0] || (_cache[0] = function($event) { + return _ctx.$emit("item-mousemove", $event); + }), + pt: _ctx.pt, + unstyled: _ctx.unstyled, + ref_for: true + }, _ctx.ptm("submenu")), null, 16, ["id", "panelId", "focusedItemId", "items", "level", "templates", "activeItemPath", "onItemToggle", "pt", "unstyled"])) : createCommentVNode("", true)], 16), [[vShow, $options.isItemActive(processedItem)]])]; + }), + _: 2 + }, 1040)], 16, _hoisted_2$1$1)) : createCommentVNode("", true), $options.isItemVisible(processedItem) && $options.getItemProp(processedItem, "separator") ? (openBlock(), createElementBlock("li", mergeProps({ + key: 1, + style: $options.getItemProp(processedItem, "style"), + "class": [_ctx.cx("separator"), $options.getItemProp(processedItem, "class")], + role: "separator", + ref_for: true + }, _ctx.ptm("separator")), null, 16)) : createCommentVNode("", true)], 64); + }), 128))], 10, _hoisted_1$1$2); +} +__name(render$2$1, "render$2$1"); +script$2$1.render = render$2$1; +function _slicedToArray(r, e) { + return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray$5(r, e) || _nonIterableRest(); +} +__name(_slicedToArray, "_slicedToArray"); +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableRest, "_nonIterableRest"); +function _unsupportedIterableToArray$5(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$5(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$5(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$5, "_unsupportedIterableToArray$5"); +function _arrayLikeToArray$5(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$5, "_arrayLikeToArray$5"); +function _iterableToArrayLimit(r, l) { + var t2 = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (null != t2) { + var e, n, i, u, a = [], f = true, o = false; + try { + if (i = (t2 = t2.call(r)).next, 0 === l) ; + else for (; !(f = (e = i.call(t2)).done) && (a.push(e.value), a.length !== l); f = true) ; + } catch (r2) { + o = true, n = r2; + } finally { + try { + if (!f && null != t2["return"] && (u = t2["return"](), Object(u) !== u)) return; + } finally { + if (o) throw n; + } + } + return a; + } +} +__name(_iterableToArrayLimit, "_iterableToArrayLimit"); +function _arrayWithHoles(r) { + if (Array.isArray(r)) return r; +} +__name(_arrayWithHoles, "_arrayWithHoles"); +var script$1$e = { + name: "PanelMenuList", + hostName: "PanelMenu", + "extends": script$1d, + emits: ["item-toggle", "header-focus"], + props: { + panelId: { + type: String, + "default": null + }, + items: { + type: Array, + "default": null + }, + templates: { + type: Object, + "default": null + }, + expandedKeys: { + type: Object, + "default": null + } + }, + searchTimeout: null, + searchValue: null, + data: /* @__PURE__ */ __name(function data25() { + return { + focused: false, + focusedItem: null, + activeItemPath: [] + }; + }, "data"), + watch: { + expandedKeys: /* @__PURE__ */ __name(function expandedKeys(newValue) { + this.autoUpdateActiveItemPath(newValue); + }, "expandedKeys") + }, + mounted: /* @__PURE__ */ __name(function mounted26() { + this.autoUpdateActiveItemPath(this.expandedKeys); + }, "mounted"), + methods: { + getItemProp: /* @__PURE__ */ __name(function getItemProp6(processedItem, name4) { + return processedItem && processedItem.item ? resolve(processedItem.item[name4]) : void 0; + }, "getItemProp"), + getItemLabel: /* @__PURE__ */ __name(function getItemLabel4(processedItem) { + return this.getItemProp(processedItem, "label"); + }, "getItemLabel"), + isItemVisible: /* @__PURE__ */ __name(function isItemVisible4(processedItem) { + return this.getItemProp(processedItem, "visible") !== false; + }, "isItemVisible"), + isItemDisabled: /* @__PURE__ */ __name(function isItemDisabled4(processedItem) { + return this.getItemProp(processedItem, "disabled"); + }, "isItemDisabled"), + isItemActive: /* @__PURE__ */ __name(function isItemActive5(processedItem) { + return this.activeItemPath.some(function(path) { + return path.key === processedItem.parentKey; + }); + }, "isItemActive"), + isItemGroup: /* @__PURE__ */ __name(function isItemGroup4(processedItem) { + return isNotEmpty(processedItem.items); + }, "isItemGroup"), + onFocus: /* @__PURE__ */ __name(function onFocus10(event2) { + this.focused = true; + this.focusedItem = this.focusedItem || (this.isElementInPanel(event2, event2.relatedTarget) ? this.findFirstItem() : this.findLastItem()); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur10() { + this.focused = false; + this.focusedItem = null; + this.searchValue = ""; + }, "onBlur"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown10(event2) { + var metaKey = event2.metaKey || event2.ctrlKey; + switch (event2.code) { + case "ArrowDown": + this.onArrowDownKey(event2); + break; + case "ArrowUp": + this.onArrowUpKey(event2); + break; + case "ArrowLeft": + this.onArrowLeftKey(event2); + break; + case "ArrowRight": + this.onArrowRightKey(event2); + break; + case "Home": + this.onHomeKey(event2); + break; + case "End": + this.onEndKey(event2); + break; + case "Space": + this.onSpaceKey(event2); + break; + case "Enter": + case "NumpadEnter": + this.onEnterKey(event2); + break; + case "Escape": + case "Tab": + case "PageDown": + case "PageUp": + case "Backspace": + case "ShiftLeft": + case "ShiftRight": + break; + default: + if (!metaKey && isPrintableCharacter(event2.key)) { + this.searchItems(event2, event2.key); + } + break; + } + }, "onKeyDown"), + onArrowDownKey: /* @__PURE__ */ __name(function onArrowDownKey7(event2) { + var processedItem = isNotEmpty(this.focusedItem) ? this.findNextItem(this.focusedItem) : this.findFirstItem(); + this.changeFocusedItem({ + originalEvent: event2, + processedItem, + focusOnNext: true + }); + event2.preventDefault(); + }, "onArrowDownKey"), + onArrowUpKey: /* @__PURE__ */ __name(function onArrowUpKey7(event2) { + var processedItem = isNotEmpty(this.focusedItem) ? this.findPrevItem(this.focusedItem) : this.findLastItem(); + this.changeFocusedItem({ + originalEvent: event2, + processedItem, + selfCheck: true + }); + event2.preventDefault(); + }, "onArrowUpKey"), + onArrowLeftKey: /* @__PURE__ */ __name(function onArrowLeftKey4(event2) { + var _this = this; + if (isNotEmpty(this.focusedItem)) { + var matched = this.activeItemPath.some(function(p) { + return p.key === _this.focusedItem.key; + }); + if (matched) { + this.activeItemPath = this.activeItemPath.filter(function(p) { + return p.key !== _this.focusedItem.key; + }); + } else { + this.focusedItem = isNotEmpty(this.focusedItem.parent) ? this.focusedItem.parent : this.focusedItem; + } + event2.preventDefault(); + } + }, "onArrowLeftKey"), + onArrowRightKey: /* @__PURE__ */ __name(function onArrowRightKey3(event2) { + var _this2 = this; + if (isNotEmpty(this.focusedItem)) { + var grouped = this.isItemGroup(this.focusedItem); + if (grouped) { + var matched = this.activeItemPath.some(function(p) { + return p.key === _this2.focusedItem.key; + }); + if (matched) { + this.onArrowDownKey(event2); + } else { + this.activeItemPath = this.activeItemPath.filter(function(p) { + return p.parentKey !== _this2.focusedItem.parentKey; + }); + this.activeItemPath.push(this.focusedItem); + } + } + event2.preventDefault(); + } + }, "onArrowRightKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey7(event2) { + this.changeFocusedItem({ + originalEvent: event2, + processedItem: this.findFirstItem(), + allowHeaderFocus: false + }); + event2.preventDefault(); + }, "onHomeKey"), + onEndKey: /* @__PURE__ */ __name(function onEndKey7(event2) { + this.changeFocusedItem({ + originalEvent: event2, + processedItem: this.findLastItem(), + focusOnNext: true, + allowHeaderFocus: false + }); + event2.preventDefault(); + }, "onEndKey"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey6(event2) { + if (isNotEmpty(this.focusedItem)) { + var element = findSingle(this.$el, 'li[id="'.concat("".concat(this.focusedItemId), '"]')); + var anchorElement = element && (findSingle(element, '[data-pc-section="itemlink"]') || findSingle(element, "a,button")); + anchorElement ? anchorElement.click() : element && element.click(); + } + event2.preventDefault(); + }, "onEnterKey"), + onSpaceKey: /* @__PURE__ */ __name(function onSpaceKey5(event2) { + this.onEnterKey(event2); + }, "onSpaceKey"), + onItemToggle: /* @__PURE__ */ __name(function onItemToggle2(event2) { + var processedItem = event2.processedItem, expanded3 = event2.expanded; + if (this.expandedKeys) { + this.$emit("item-toggle", { + item: processedItem.item, + expanded: expanded3 + }); + } else { + this.activeItemPath = this.activeItemPath.filter(function(p) { + return p.parentKey !== processedItem.parentKey; + }); + expanded3 && this.activeItemPath.push(processedItem); + } + this.focusedItem = processedItem; + focus(this.$el); + }, "onItemToggle"), + onItemMouseMove: /* @__PURE__ */ __name(function onItemMouseMove3(event2) { + if (this.focused) { + this.focusedItem = event2.processedItem; + } + }, "onItemMouseMove"), + isElementInPanel: /* @__PURE__ */ __name(function isElementInPanel(event2, element) { + var panel2 = event2.currentTarget.closest('[data-pc-section="panel"]'); + return panel2 && panel2.contains(element); + }, "isElementInPanel"), + isItemMatched: /* @__PURE__ */ __name(function isItemMatched2(processedItem) { + var _this$getItemLabel; + return this.isValidItem(processedItem) && ((_this$getItemLabel = this.getItemLabel(processedItem)) === null || _this$getItemLabel === void 0 ? void 0 : _this$getItemLabel.toLocaleLowerCase(this.searchLocale).startsWith(this.searchValue.toLocaleLowerCase(this.searchLocale))); + }, "isItemMatched"), + isVisibleItem: /* @__PURE__ */ __name(function isVisibleItem(processedItem) { + return !!processedItem && (processedItem.level === 0 || this.isItemActive(processedItem)) && this.isItemVisible(processedItem); + }, "isVisibleItem"), + isValidItem: /* @__PURE__ */ __name(function isValidItem2(processedItem) { + return !!processedItem && !this.isItemDisabled(processedItem) && !this.getItemProp(processedItem, "separator"); + }, "isValidItem"), + findFirstItem: /* @__PURE__ */ __name(function findFirstItem() { + var _this3 = this; + return this.visibleItems.find(function(processedItem) { + return _this3.isValidItem(processedItem); + }); + }, "findFirstItem"), + findLastItem: /* @__PURE__ */ __name(function findLastItem() { + var _this4 = this; + return findLast(this.visibleItems, function(processedItem) { + return _this4.isValidItem(processedItem); + }); + }, "findLastItem"), + findNextItem: /* @__PURE__ */ __name(function findNextItem(processedItem) { + var _this5 = this; + var index = this.visibleItems.findIndex(function(item8) { + return item8.key === processedItem.key; + }); + var matchedItem = index < this.visibleItems.length - 1 ? this.visibleItems.slice(index + 1).find(function(pItem) { + return _this5.isValidItem(pItem); + }) : void 0; + return matchedItem || processedItem; + }, "findNextItem"), + findPrevItem: /* @__PURE__ */ __name(function findPrevItem(processedItem) { + var _this6 = this; + var index = this.visibleItems.findIndex(function(item8) { + return item8.key === processedItem.key; + }); + var matchedItem = index > 0 ? findLast(this.visibleItems.slice(0, index), function(pItem) { + return _this6.isValidItem(pItem); + }) : void 0; + return matchedItem || processedItem; + }, "findPrevItem"), + searchItems: /* @__PURE__ */ __name(function searchItems2(event2, _char) { + var _this7 = this; + this.searchValue = (this.searchValue || "") + _char; + var matchedItem = null; + var matched = false; + if (isNotEmpty(this.focusedItem)) { + var focusedItemIndex = this.visibleItems.findIndex(function(processedItem) { + return processedItem.key === _this7.focusedItem.key; + }); + matchedItem = this.visibleItems.slice(focusedItemIndex).find(function(processedItem) { + return _this7.isItemMatched(processedItem); + }); + matchedItem = isEmpty(matchedItem) ? this.visibleItems.slice(0, focusedItemIndex).find(function(processedItem) { + return _this7.isItemMatched(processedItem); + }) : matchedItem; + } else { + matchedItem = this.visibleItems.find(function(processedItem) { + return _this7.isItemMatched(processedItem); + }); + } + if (isNotEmpty(matchedItem)) { + matched = true; + } + if (isEmpty(matchedItem) && isEmpty(this.focusedItem)) { + matchedItem = this.findFirstItem(); + } + if (isNotEmpty(matchedItem)) { + this.changeFocusedItem({ + originalEvent: event2, + processedItem: matchedItem, + allowHeaderFocus: false + }); + } + if (this.searchTimeout) { + clearTimeout(this.searchTimeout); + } + this.searchTimeout = setTimeout(function() { + _this7.searchValue = ""; + _this7.searchTimeout = null; + }, 500); + return matched; + }, "searchItems"), + changeFocusedItem: /* @__PURE__ */ __name(function changeFocusedItem(event2) { + var originalEvent = event2.originalEvent, processedItem = event2.processedItem, focusOnNext = event2.focusOnNext, selfCheck = event2.selfCheck, _event$allowHeaderFoc = event2.allowHeaderFocus, allowHeaderFocus = _event$allowHeaderFoc === void 0 ? true : _event$allowHeaderFoc; + if (isNotEmpty(this.focusedItem) && this.focusedItem.key !== processedItem.key) { + this.focusedItem = processedItem; + this.scrollInView(); + } else if (allowHeaderFocus) { + this.$emit("header-focus", { + originalEvent, + focusOnNext, + selfCheck + }); + } + }, "changeFocusedItem"), + scrollInView: /* @__PURE__ */ __name(function scrollInView5() { + var element = findSingle(this.$el, 'li[id="'.concat("".concat(this.focusedItemId), '"]')); + if (element) { + element.scrollIntoView && element.scrollIntoView({ + block: "nearest", + inline: "start" + }); + } + }, "scrollInView"), + autoUpdateActiveItemPath: /* @__PURE__ */ __name(function autoUpdateActiveItemPath(expandedKeys4) { + var _this8 = this; + this.activeItemPath = Object.entries(expandedKeys4 || {}).reduce(function(acc, _ref) { + var _ref2 = _slicedToArray(_ref, 2), key = _ref2[0], val = _ref2[1]; + if (val) { + var processedItem = _this8.findProcessedItemByItemKey(key); + processedItem && acc.push(processedItem); + } + return acc; + }, []); + }, "autoUpdateActiveItemPath"), + findProcessedItemByItemKey: /* @__PURE__ */ __name(function findProcessedItemByItemKey(key, processedItems3) { + var level = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0; + processedItems3 = processedItems3 || level === 0 && this.processedItems; + if (!processedItems3) return null; + for (var i = 0; i < processedItems3.length; i++) { + var processedItem = processedItems3[i]; + if (this.getItemProp(processedItem, "key") === key) return processedItem; + var matchedItem = this.findProcessedItemByItemKey(key, processedItem.items, level + 1); + if (matchedItem) return matchedItem; + } + }, "findProcessedItemByItemKey"), + createProcessedItems: /* @__PURE__ */ __name(function createProcessedItems2(items2) { + var _this9 = this; + var level = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; + var parent = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; + var parentKey = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : ""; + var processedItems3 = []; + items2 && items2.forEach(function(item8, index) { + var key = (parentKey !== "" ? parentKey + "_" : "") + index; + var newItem = { + item: item8, + index, + level, + key, + parent, + parentKey + }; + newItem["items"] = _this9.createProcessedItems(item8.items, level + 1, newItem, key); + processedItems3.push(newItem); + }); + return processedItems3; + }, "createProcessedItems"), + flatItems: /* @__PURE__ */ __name(function flatItems(processedItems3) { + var _this10 = this; + var processedFlattenItems = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : []; + processedItems3 && processedItems3.forEach(function(processedItem) { + if (_this10.isVisibleItem(processedItem)) { + processedFlattenItems.push(processedItem); + _this10.flatItems(processedItem.items, processedFlattenItems); + } + }); + return processedFlattenItems; + }, "flatItems") + }, + computed: { + processedItems: /* @__PURE__ */ __name(function processedItems2() { + return this.createProcessedItems(this.items || []); + }, "processedItems"), + visibleItems: /* @__PURE__ */ __name(function visibleItems2() { + return this.flatItems(this.processedItems); + }, "visibleItems"), + focusedItemId: /* @__PURE__ */ __name(function focusedItemId2() { + return isNotEmpty(this.focusedItem) ? "".concat(this.panelId, "_").concat(this.focusedItem.key) : null; + }, "focusedItemId") + }, + components: { + PanelMenuSub: script$2$1 + } +}; +function render$1$1(_ctx, _cache, $props, $setup, $data, $options) { + var _component_PanelMenuSub = resolveComponent("PanelMenuSub"); + return openBlock(), createBlock(_component_PanelMenuSub, mergeProps({ + id: $props.panelId + "_list", + "class": _ctx.cx("rootList"), + role: "tree", + tabindex: -1, + "aria-activedescendant": $data.focused ? $options.focusedItemId : void 0, + panelId: $props.panelId, + focusedItemId: $data.focused ? $options.focusedItemId : void 0, + items: $options.processedItems, + templates: $props.templates, + activeItemPath: $data.activeItemPath, + onFocus: $options.onFocus, + onBlur: $options.onBlur, + onKeydown: $options.onKeyDown, + onItemToggle: $options.onItemToggle, + onItemMousemove: $options.onItemMouseMove, + pt: _ctx.pt, + unstyled: _ctx.unstyled + }, _ctx.ptm("rootList")), null, 16, ["id", "class", "aria-activedescendant", "panelId", "focusedItemId", "items", "templates", "activeItemPath", "onFocus", "onBlur", "onKeydown", "onItemToggle", "onItemMousemove", "pt", "unstyled"]); +} +__name(render$1$1, "render$1$1"); +script$1$e.render = render$1$1; +function _typeof$b(o) { + "@babel/helpers - typeof"; + return _typeof$b = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$b(o); +} +__name(_typeof$b, "_typeof$b"); +function ownKeys$a(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$a, "ownKeys$a"); +function _objectSpread$a(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$a(Object(t2), true).forEach(function(r2) { + _defineProperty$b(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$a(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$a, "_objectSpread$a"); +function _defineProperty$b(e, r, t2) { + return (r = _toPropertyKey$b(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$b, "_defineProperty$b"); +function _toPropertyKey$b(t2) { + var i = _toPrimitive$b(t2, "string"); + return "symbol" == _typeof$b(i) ? i : i + ""; +} +__name(_toPropertyKey$b, "_toPropertyKey$b"); +function _toPrimitive$b(t2, r) { + if ("object" != _typeof$b(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$b(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$b, "_toPrimitive$b"); +var script$p = { + name: "PanelMenu", + "extends": script$3$1, + inheritAttrs: false, + emits: ["update:expandedKeys", "panel-open", "panel-close"], + data: /* @__PURE__ */ __name(function data26() { + return { + id: this.$attrs.id, + activeItem: null, + activeItems: [] + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId9(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId") + }, + mounted: /* @__PURE__ */ __name(function mounted27() { + this.id = this.id || UniqueComponentId(); + }, "mounted"), + methods: { + getItemProp: /* @__PURE__ */ __name(function getItemProp7(item8, name4) { + return item8 ? resolve(item8[name4]) : void 0; + }, "getItemProp"), + getItemLabel: /* @__PURE__ */ __name(function getItemLabel5(item8) { + return this.getItemProp(item8, "label"); + }, "getItemLabel"), + getPTOptions: /* @__PURE__ */ __name(function getPTOptions8(key, item8, index) { + return this.ptm(key, { + context: { + index, + active: this.isItemActive(item8), + focused: this.isItemFocused(item8), + disabled: this.isItemDisabled(item8) + } + }); + }, "getPTOptions"), + isItemActive: /* @__PURE__ */ __name(function isItemActive6(item8) { + return this.expandedKeys ? this.expandedKeys[this.getItemProp(item8, "key")] : this.multiple ? this.activeItems.some(function(subItem) { + return equals(item8, subItem); + }) : equals(item8, this.activeItem); + }, "isItemActive"), + isItemVisible: /* @__PURE__ */ __name(function isItemVisible5(item8) { + return this.getItemProp(item8, "visible") !== false; + }, "isItemVisible"), + isItemDisabled: /* @__PURE__ */ __name(function isItemDisabled5(item8) { + return this.getItemProp(item8, "disabled"); + }, "isItemDisabled"), + isItemFocused: /* @__PURE__ */ __name(function isItemFocused4(item8) { + return equals(item8, this.activeItem); + }, "isItemFocused"), + isItemGroup: /* @__PURE__ */ __name(function isItemGroup5(item8) { + return isNotEmpty(item8.items); + }, "isItemGroup"), + getPanelId: /* @__PURE__ */ __name(function getPanelId(index) { + return "".concat(this.id, "_").concat(index); + }, "getPanelId"), + getPanelKey: /* @__PURE__ */ __name(function getPanelKey(index) { + return this.getPanelId(index); + }, "getPanelKey"), + getHeaderId: /* @__PURE__ */ __name(function getHeaderId(index) { + return "".concat(this.getPanelId(index), "_header"); + }, "getHeaderId"), + getContentId: /* @__PURE__ */ __name(function getContentId(index) { + return "".concat(this.getPanelId(index), "_content"); + }, "getContentId"), + onHeaderClick: /* @__PURE__ */ __name(function onHeaderClick(event2, item8) { + if (this.isItemDisabled(item8)) { + event2.preventDefault(); + return; + } + if (item8.command) { + item8.command({ + originalEvent: event2, + item: item8 + }); + } + this.changeActiveItem(event2, item8); + focus(event2.currentTarget); + }, "onHeaderClick"), + onHeaderKeyDown: /* @__PURE__ */ __name(function onHeaderKeyDown(event2, item8) { + switch (event2.code) { + case "ArrowDown": + this.onHeaderArrowDownKey(event2); + break; + case "ArrowUp": + this.onHeaderArrowUpKey(event2); + break; + case "Home": + this.onHeaderHomeKey(event2); + break; + case "End": + this.onHeaderEndKey(event2); + break; + case "Enter": + case "NumpadEnter": + case "Space": + this.onHeaderEnterKey(event2, item8); + break; + } + }, "onHeaderKeyDown"), + onHeaderArrowDownKey: /* @__PURE__ */ __name(function onHeaderArrowDownKey(event2) { + var rootList2 = getAttribute(event2.currentTarget, "data-p-active") === true ? findSingle(event2.currentTarget.nextElementSibling, '[data-pc-section="rootlist"]') : null; + rootList2 ? focus(rootList2) : this.updateFocusedHeader({ + originalEvent: event2, + focusOnNext: true + }); + event2.preventDefault(); + }, "onHeaderArrowDownKey"), + onHeaderArrowUpKey: /* @__PURE__ */ __name(function onHeaderArrowUpKey(event2) { + var prevHeader = this.findPrevHeader(event2.currentTarget.parentElement) || this.findLastHeader(); + var rootList2 = getAttribute(prevHeader, "data-p-active") === true ? findSingle(prevHeader.nextElementSibling, '[data-pc-section="rootlist"]') : null; + rootList2 ? focus(rootList2) : this.updateFocusedHeader({ + originalEvent: event2, + focusOnNext: false + }); + event2.preventDefault(); + }, "onHeaderArrowUpKey"), + onHeaderHomeKey: /* @__PURE__ */ __name(function onHeaderHomeKey(event2) { + this.changeFocusedHeader(event2, this.findFirstHeader()); + event2.preventDefault(); + }, "onHeaderHomeKey"), + onHeaderEndKey: /* @__PURE__ */ __name(function onHeaderEndKey(event2) { + this.changeFocusedHeader(event2, this.findLastHeader()); + event2.preventDefault(); + }, "onHeaderEndKey"), + onHeaderEnterKey: /* @__PURE__ */ __name(function onHeaderEnterKey(event2, item8) { + var headerAction = findSingle(event2.currentTarget, '[data-pc-section="headerlink"]'); + headerAction ? headerAction.click() : this.onHeaderClick(event2, item8); + event2.preventDefault(); + }, "onHeaderEnterKey"), + findNextHeader: /* @__PURE__ */ __name(function findNextHeader(panelElement) { + var selfCheck = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + var nextPanelElement = selfCheck ? panelElement : panelElement.nextElementSibling; + var headerElement = findSingle(nextPanelElement, '[data-pc-section="header"]'); + return headerElement ? getAttribute(headerElement, "data-p-disabled") ? this.findNextHeader(headerElement.parentElement) : headerElement : null; + }, "findNextHeader"), + findPrevHeader: /* @__PURE__ */ __name(function findPrevHeader(panelElement) { + var selfCheck = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + var prevPanelElement = selfCheck ? panelElement : panelElement.previousElementSibling; + var headerElement = findSingle(prevPanelElement, '[data-pc-section="header"]'); + return headerElement ? getAttribute(headerElement, "data-p-disabled") ? this.findPrevHeader(headerElement.parentElement) : headerElement : null; + }, "findPrevHeader"), + findFirstHeader: /* @__PURE__ */ __name(function findFirstHeader() { + return this.findNextHeader(this.$el.firstElementChild, true); + }, "findFirstHeader"), + findLastHeader: /* @__PURE__ */ __name(function findLastHeader() { + return this.findPrevHeader(this.$el.lastElementChild, true); + }, "findLastHeader"), + updateFocusedHeader: /* @__PURE__ */ __name(function updateFocusedHeader(event2) { + var originalEvent = event2.originalEvent, focusOnNext = event2.focusOnNext, selfCheck = event2.selfCheck; + var panelElement = originalEvent.currentTarget.closest('[data-pc-section="panel"]'); + var header2 = selfCheck ? findSingle(panelElement, '[data-pc-section="header"]') : focusOnNext ? this.findNextHeader(panelElement) : this.findPrevHeader(panelElement); + header2 ? this.changeFocusedHeader(originalEvent, header2) : focusOnNext ? this.onHeaderHomeKey(originalEvent) : this.onHeaderEndKey(originalEvent); + }, "updateFocusedHeader"), + changeActiveItem: /* @__PURE__ */ __name(function changeActiveItem(event2, item8) { + var selfActive = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false; + if (!this.isItemDisabled(item8)) { + var active3 = this.isItemActive(item8); + var eventName = !active3 ? "panel-open" : "panel-close"; + this.activeItem = selfActive ? item8 : this.activeItem && equals(item8, this.activeItem) ? null : item8; + if (this.multiple) { + if (this.activeItems.some(function(subItem) { + return equals(item8, subItem); + })) { + this.activeItems = this.activeItems.filter(function(subItem) { + return !equals(item8, subItem); + }); + } else { + this.activeItems.push(item8); + } + } + this.changeExpandedKeys({ + item: item8, + expanded: !active3 + }); + this.$emit(eventName, { + originalEvent: event2, + item: item8 + }); + } + }, "changeActiveItem"), + changeExpandedKeys: /* @__PURE__ */ __name(function changeExpandedKeys(_ref) { + var item8 = _ref.item, _ref$expanded = _ref.expanded, expanded3 = _ref$expanded === void 0 ? false : _ref$expanded; + if (this.expandedKeys) { + var _keys = _objectSpread$a({}, this.expandedKeys); + if (expanded3) _keys[item8.key] = true; + else delete _keys[item8.key]; + this.$emit("update:expandedKeys", _keys); + } + }, "changeExpandedKeys"), + changeFocusedHeader: /* @__PURE__ */ __name(function changeFocusedHeader(event2, element) { + element && focus(element); + }, "changeFocusedHeader"), + getMenuItemProps: /* @__PURE__ */ __name(function getMenuItemProps6(item8, index) { + return { + icon: mergeProps({ + "class": [this.cx("headerIcon"), this.getItemProp(item8, "icon")] + }, this.getPTOptions("headerIcon", item8, index)), + label: mergeProps({ + "class": this.cx("headerLabel") + }, this.getPTOptions("headerLabel", item8, index)) + }; + }, "getMenuItemProps") + }, + components: { + PanelMenuList: script$1$e, + ChevronRightIcon: script$1l, + ChevronDownIcon: script$1k + } +}; +var _hoisted_1$d = ["id"]; +var _hoisted_2$9 = ["id", "tabindex", "aria-label", "aria-expanded", "aria-controls", "aria-disabled", "onClick", "onKeydown", "data-p-active", "data-p-disabled"]; +var _hoisted_3$6 = ["href"]; +var _hoisted_4$4 = ["id", "aria-labelledby"]; +function render$m(_ctx, _cache, $props, $setup, $data, $options) { + var _component_PanelMenuList = resolveComponent("PanelMenuList"); + return openBlock(), createElementBlock("div", mergeProps({ + id: $data.id, + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.model, function(item8, index) { + return openBlock(), createElementBlock(Fragment, { + key: $options.getPanelKey(index) + }, [$options.isItemVisible(item8) ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + style: $options.getItemProp(item8, "style"), + "class": [_ctx.cx("panel"), $options.getItemProp(item8, "class")], + ref_for: true + }, _ctx.ptm("panel")), [createBaseVNode("div", mergeProps({ + id: $options.getHeaderId(index), + "class": [_ctx.cx("header", { + item: item8 + }), $options.getItemProp(item8, "headerClass")], + tabindex: $options.isItemDisabled(item8) ? -1 : _ctx.tabindex, + role: "button", + "aria-label": $options.getItemLabel(item8), + "aria-expanded": $options.isItemActive(item8), + "aria-controls": $options.getContentId(index), + "aria-disabled": $options.isItemDisabled(item8), + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onHeaderClick($event, item8); + }, "onClick"), + onKeydown: /* @__PURE__ */ __name(function onKeydown6($event) { + return $options.onHeaderKeyDown($event, item8); + }, "onKeydown"), + ref_for: true + }, $options.getPTOptions("header", item8, index), { + "data-p-active": $options.isItemActive(item8), + "data-p-disabled": $options.isItemDisabled(item8) + }), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("headerContent"), + ref_for: true + }, $options.getPTOptions("headerContent", item8, index)), [!_ctx.$slots.item ? (openBlock(), createElementBlock("a", mergeProps({ + key: 0, + href: $options.getItemProp(item8, "url"), + "class": _ctx.cx("headerLink"), + tabindex: -1, + ref_for: true + }, $options.getPTOptions("headerLink", item8, index)), [$options.getItemProp(item8, "items") ? renderSlot(_ctx.$slots, "submenuicon", { + key: 0, + active: $options.isItemActive(item8) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent($options.isItemActive(item8) ? "ChevronDownIcon" : "ChevronRightIcon"), mergeProps({ + "class": _ctx.cx("submenuIcon"), + ref_for: true + }, $options.getPTOptions("submenuIcon", item8, index)), null, 16, ["class"]))]; + }) : createCommentVNode("", true), _ctx.$slots.headericon ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.headericon), { + key: 1, + item: item8, + "class": normalizeClass([_ctx.cx("headerIcon"), $options.getItemProp(item8, "icon")]) + }, null, 8, ["item", "class"])) : $options.getItemProp(item8, "icon") ? (openBlock(), createElementBlock("span", mergeProps({ + key: 2, + "class": [_ctx.cx("headerIcon"), $options.getItemProp(item8, "icon")], + ref_for: true + }, $options.getPTOptions("headerIcon", item8, index)), null, 16)) : createCommentVNode("", true), createBaseVNode("span", mergeProps({ + "class": _ctx.cx("headerLabel"), + ref_for: true + }, $options.getPTOptions("headerLabel", item8, index)), toDisplayString($options.getItemLabel(item8)), 17)], 16, _hoisted_3$6)) : (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.item), { + key: 1, + item: item8, + root: true, + active: $options.isItemActive(item8), + hasSubmenu: $options.isItemGroup(item8), + label: $options.getItemLabel(item8), + props: $options.getMenuItemProps(item8, index) + }, null, 8, ["item", "active", "hasSubmenu", "label", "props"]))], 16)], 16, _hoisted_2$9), createVNode(Transition, mergeProps({ + name: "p-toggleable-content", + ref_for: true + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [withDirectives(createBaseVNode("div", mergeProps({ + id: $options.getContentId(index), + "class": _ctx.cx("contentContainer"), + role: "region", + "aria-labelledby": $options.getHeaderId(index), + ref_for: true + }, _ctx.ptm("contentContainer")), [$options.getItemProp(item8, "items") ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("content"), + ref_for: true + }, _ctx.ptm("content")), [createVNode(_component_PanelMenuList, { + panelId: $options.getPanelId(index), + items: $options.getItemProp(item8, "items"), + templates: _ctx.$slots, + expandedKeys: _ctx.expandedKeys, + onItemToggle: $options.changeExpandedKeys, + onHeaderFocus: $options.updateFocusedHeader, + pt: _ctx.pt, + unstyled: _ctx.unstyled + }, null, 8, ["panelId", "items", "templates", "expandedKeys", "onItemToggle", "onHeaderFocus", "pt", "unstyled"])], 16)) : createCommentVNode("", true)], 16, _hoisted_4$4), [[vShow, $options.isItemActive(item8)]])]; + }), + _: 2 + }, 1040)], 16)) : createCommentVNode("", true)], 64); + }), 128))], 16, _hoisted_1$d); +} +__name(render$m, "render$m"); +script$p.render = render$m; +var script$o = { + name: "EyeSlashIcon", + "extends": script$1m +}; +function render$l(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + d: "M13.9414 6.74792C13.9437 6.75295 13.9455 6.757 13.9469 6.76003C13.982 6.8394 14.0001 6.9252 14.0001 7.01195C14.0001 7.0987 13.982 7.1845 13.9469 7.26386C13.6004 8.00059 13.1711 8.69549 12.6674 9.33515C12.6115 9.4071 12.54 9.46538 12.4582 9.50556C12.3765 9.54574 12.2866 9.56678 12.1955 9.56707C12.0834 9.56671 11.9737 9.53496 11.8788 9.47541C11.7838 9.41586 11.7074 9.3309 11.6583 9.23015C11.6092 9.12941 11.5893 9.01691 11.6008 8.90543C11.6124 8.79394 11.6549 8.68793 11.7237 8.5994C12.1065 8.09726 12.4437 7.56199 12.7313 6.99995C12.2595 6.08027 10.3402 2.8014 6.99732 2.8014C6.63723 2.80218 6.27816 2.83969 5.92569 2.91336C5.77666 2.93304 5.62568 2.89606 5.50263 2.80972C5.37958 2.72337 5.29344 2.59398 5.26125 2.44714C5.22907 2.30031 5.2532 2.14674 5.32885 2.01685C5.40451 1.88696 5.52618 1.79021 5.66978 1.74576C6.10574 1.64961 6.55089 1.60134 6.99732 1.60181C11.5916 1.60181 13.7864 6.40856 13.9414 6.74792ZM2.20333 1.61685C2.35871 1.61411 2.5091 1.67179 2.6228 1.77774L12.2195 11.3744C12.3318 11.4869 12.3949 11.6393 12.3949 11.7983C12.3949 11.9572 12.3318 12.1097 12.2195 12.2221C12.107 12.3345 11.9546 12.3976 11.7956 12.3976C11.6367 12.3976 11.4842 12.3345 11.3718 12.2221L10.5081 11.3584C9.46549 12.0426 8.24432 12.4042 6.99729 12.3981C2.403 12.3981 0.208197 7.59135 0.0532336 7.25198C0.0509364 7.24694 0.0490875 7.2429 0.0476856 7.23986C0.0162332 7.16518 3.05176e-05 7.08497 3.05176e-05 7.00394C3.05176e-05 6.92291 0.0162332 6.8427 0.0476856 6.76802C0.631261 5.47831 1.46902 4.31959 2.51084 3.36119L1.77509 2.62545C1.66914 2.51175 1.61146 2.36136 1.61421 2.20597C1.61695 2.05059 1.6799 1.90233 1.78979 1.79244C1.89968 1.68254 2.04794 1.6196 2.20333 1.61685ZM7.45314 8.35147L5.68574 6.57609V6.5361C5.5872 6.78938 5.56498 7.06597 5.62183 7.33173C5.67868 7.59749 5.8121 7.84078 6.00563 8.03158C6.19567 8.21043 6.43052 8.33458 6.68533 8.39089C6.94014 8.44721 7.20543 8.43359 7.45314 8.35147ZM1.26327 6.99994C1.7351 7.91163 3.64645 11.1985 6.99729 11.1985C7.9267 11.2048 8.8408 10.9618 9.64438 10.4947L8.35682 9.20718C7.86027 9.51441 7.27449 9.64491 6.69448 9.57752C6.11446 9.51014 5.57421 9.24881 5.16131 8.83592C4.74842 8.42303 4.4871 7.88277 4.41971 7.30276C4.35232 6.72274 4.48282 6.13697 4.79005 5.64041L3.35855 4.2089C2.4954 5.00336 1.78523 5.94935 1.26327 6.99994Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$l, "render$l"); +script$o.render = render$l; +var theme$c = /* @__PURE__ */ __name(function theme28(_ref) { + var dt = _ref.dt; + return "\n.p-password {\n display: inline-flex;\n position: relative;\n}\n\n.p-password .p-password-overlay {\n min-width: 100%;\n}\n\n.p-password-meter {\n height: ".concat(dt("password.meter.height"), ";\n background: ").concat(dt("password.meter.background"), ";\n border-radius: ").concat(dt("password.meter.border.radius"), ";\n}\n\n.p-password-meter-label {\n height: 100%;\n width: 0;\n transition: width 1s ease-in-out;\n border-radius: ").concat(dt("password.meter.border.radius"), ";\n}\n\n.p-password-meter-weak {\n background: ").concat(dt("password.strength.weak.background"), ";\n}\n\n.p-password-meter-medium {\n background: ").concat(dt("password.strength.medium.background"), ";\n}\n\n.p-password-meter-strong {\n background: ").concat(dt("password.strength.strong.background"), ";\n}\n\n.p-password-fluid {\n display: flex;\n}\n\n.p-password-fluid .p-password-input {\n width: 100%;\n}\n\n.p-password-input::-ms-reveal,\n.p-password-input::-ms-clear {\n display: none;\n}\n\n.p-password-overlay {\n padding: ").concat(dt("password.overlay.padding"), ";\n background: ").concat(dt("password.overlay.background"), ";\n color: ").concat(dt("password.overlay.color"), ";\n border: 1px solid ").concat(dt("password.overlay.border.color"), ";\n box-shadow: ").concat(dt("password.overlay.shadow"), ";\n border-radius: ").concat(dt("password.overlay.border.radius"), ";\n}\n\n.p-password-content {\n display: flex;\n flex-direction: column;\n gap: ").concat(dt("password.content.gap"), ";\n}\n\n.p-password-toggle-mask-icon {\n inset-inline-end: ").concat(dt("form.field.padding.x"), ";\n color: ").concat(dt("password.icon.color"), ";\n position: absolute;\n top: 50%;\n margin-top: calc(-1 * calc(").concat(dt("icon.size"), " / 2));\n width: ").concat(dt("icon.size"), ";\n height: ").concat(dt("icon.size"), ";\n}\n\n.p-password:has(.p-password-toggle-mask-icon) .p-password-input {\n padding-inline-end: calc((").concat(dt("form.field.padding.x"), " * 2) + ").concat(dt("icon.size"), ");\n}\n"); +}, "theme"); +var inlineStyles$4 = { + root: /* @__PURE__ */ __name(function root22(_ref2) { + var props = _ref2.props; + return { + position: props.appendTo === "self" ? "relative" : void 0 + }; + }, "root") +}; +var classes$d = { + root: /* @__PURE__ */ __name(function root23(_ref3) { + var instance = _ref3.instance; + return ["p-password p-component p-inputwrapper", { + "p-inputwrapper-filled": instance.$filled, + "p-inputwrapper-focus": instance.focused, + "p-password-fluid": instance.$fluid + }]; + }, "root"), + pcInputText: "p-password-input", + maskIcon: "p-password-toggle-mask-icon p-password-mask-icon", + unmaskIcon: "p-password-toggle-mask-icon p-password-unmask-icon", + overlay: "p-password-overlay p-component", + content: "p-password-content", + meter: "p-password-meter", + meterLabel: /* @__PURE__ */ __name(function meterLabel(_ref4) { + var instance = _ref4.instance; + return "p-password-meter-label ".concat(instance.meter ? "p-password-meter-" + instance.meter.strength : ""); + }, "meterLabel"), + meterText: "p-password-meter-text" +}; +var PasswordStyle = BaseStyle.extend({ + name: "password", + theme: theme$c, + classes: classes$d, + inlineStyles: inlineStyles$4 +}); +var script$1$d = { + name: "BasePassword", + "extends": script$1n, + props: { + promptLabel: { + type: String, + "default": null + }, + mediumRegex: { + type: [String, RegExp], + "default": "^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})" + // eslint-disable-line + }, + strongRegex: { + type: [String, RegExp], + "default": "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})" + // eslint-disable-line + }, + weakLabel: { + type: String, + "default": null + }, + mediumLabel: { + type: String, + "default": null + }, + strongLabel: { + type: String, + "default": null + }, + feedback: { + type: Boolean, + "default": true + }, + appendTo: { + type: [String, Object], + "default": "body" + }, + toggleMask: { + type: Boolean, + "default": false + }, + hideIcon: { + type: String, + "default": void 0 + }, + maskIcon: { + type: String, + "default": void 0 + }, + showIcon: { + type: String, + "default": void 0 + }, + unmaskIcon: { + type: String, + "default": void 0 + }, + disabled: { + type: Boolean, + "default": false + }, + placeholder: { + type: String, + "default": null + }, + required: { + type: Boolean, + "default": false + }, + inputId: { + type: String, + "default": null + }, + inputClass: { + type: [String, Object], + "default": null + }, + inputStyle: { + type: Object, + "default": null + }, + inputProps: { + type: null, + "default": null + }, + panelId: { + type: String, + "default": null + }, + panelClass: { + type: [String, Object], + "default": null + }, + panelStyle: { + type: Object, + "default": null + }, + panelProps: { + type: null, + "default": null + }, + overlayId: { + type: String, + "default": null + }, + overlayClass: { + type: [String, Object], + "default": null + }, + overlayStyle: { + type: Object, + "default": null + }, + overlayProps: { + type: null, + "default": null + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + }, + autofocus: { + type: Boolean, + "default": null + } + }, + style: PasswordStyle, + provide: /* @__PURE__ */ __name(function provide38() { + return { + $pcPassword: this, + $parentInstance: this + }; + }, "provide") +}; +var script$n = { + name: "Password", + "extends": script$1$d, + inheritAttrs: false, + emits: ["change", "focus", "blur", "invalid"], + inject: { + $pcFluid: { + "default": null + } + }, + data: /* @__PURE__ */ __name(function data27() { + return { + id: this.$attrs.id, + overlayVisible: false, + meter: null, + infoText: null, + focused: false, + unmasked: false + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId10(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId") + }, + mediumCheckRegExp: null, + strongCheckRegExp: null, + resizeListener: null, + scrollHandler: null, + overlay: null, + mounted: /* @__PURE__ */ __name(function mounted28() { + this.id = this.id || UniqueComponentId(); + this.infoText = this.promptText; + this.mediumCheckRegExp = new RegExp(this.mediumRegex); + this.strongCheckRegExp = new RegExp(this.strongRegex); + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount12() { + this.unbindResizeListener(); + if (this.scrollHandler) { + this.scrollHandler.destroy(); + this.scrollHandler = null; + } + if (this.overlay) { + ZIndex.clear(this.overlay); + this.overlay = null; + } + }, "beforeUnmount"), + methods: { + onOverlayEnter: /* @__PURE__ */ __name(function onOverlayEnter4(el) { + ZIndex.set("overlay", el, this.$primevue.config.zIndex.overlay); + addStyle(el, { + position: "absolute", + top: "0", + left: "0" + }); + this.alignOverlay(); + this.bindScrollListener(); + this.bindResizeListener(); + }, "onOverlayEnter"), + onOverlayLeave: /* @__PURE__ */ __name(function onOverlayLeave4() { + this.unbindScrollListener(); + this.unbindResizeListener(); + this.overlay = null; + }, "onOverlayLeave"), + onOverlayAfterLeave: /* @__PURE__ */ __name(function onOverlayAfterLeave4(el) { + ZIndex.clear(el); + }, "onOverlayAfterLeave"), + alignOverlay: /* @__PURE__ */ __name(function alignOverlay5() { + if (this.appendTo === "self") { + relativePosition(this.overlay, this.$refs.input.$el); + } else { + this.overlay.style.minWidth = getOuterWidth(this.$refs.input.$el) + "px"; + absolutePosition(this.overlay, this.$refs.input.$el); + } + }, "alignOverlay"), + testStrength: /* @__PURE__ */ __name(function testStrength(str) { + var level = 0; + if (this.strongCheckRegExp.test(str)) level = 3; + else if (this.mediumCheckRegExp.test(str)) level = 2; + else if (str.length) level = 1; + return level; + }, "testStrength"), + onInput: /* @__PURE__ */ __name(function onInput5(event2) { + this.writeValue(event2.target.value, event2); + this.$emit("change", event2); + }, "onInput"), + onFocus: /* @__PURE__ */ __name(function onFocus11(event2) { + this.focused = true; + if (this.feedback) { + this.setPasswordMeter(this.d_value); + this.overlayVisible = true; + } + this.$emit("focus", event2); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur11(event2) { + this.focused = false; + if (this.feedback) { + this.overlayVisible = false; + } + this.$emit("blur", event2); + }, "onBlur"), + onKeyUp: /* @__PURE__ */ __name(function onKeyUp(event2) { + if (this.feedback) { + var value2 = event2.target.value; + var _this$checkPasswordSt = this.checkPasswordStrength(value2), meter = _this$checkPasswordSt.meter, label12 = _this$checkPasswordSt.label; + this.meter = meter; + this.infoText = label12; + if (event2.code === "Escape") { + this.overlayVisible && (this.overlayVisible = false); + return; + } + if (!this.overlayVisible) { + this.overlayVisible = true; + } + } + }, "onKeyUp"), + setPasswordMeter: /* @__PURE__ */ __name(function setPasswordMeter() { + if (!this.d_value) { + this.meter = null; + this.infoText = this.promptText; + return; + } + var _this$checkPasswordSt2 = this.checkPasswordStrength(this.d_value), meter = _this$checkPasswordSt2.meter, label12 = _this$checkPasswordSt2.label; + this.meter = meter; + this.infoText = label12; + if (!this.overlayVisible) { + this.overlayVisible = true; + } + }, "setPasswordMeter"), + checkPasswordStrength: /* @__PURE__ */ __name(function checkPasswordStrength(value2) { + var label12 = null; + var meter = null; + switch (this.testStrength(value2)) { + case 1: + label12 = this.weakText; + meter = { + strength: "weak", + width: "33.33%" + }; + break; + case 2: + label12 = this.mediumText; + meter = { + strength: "medium", + width: "66.66%" + }; + break; + case 3: + label12 = this.strongText; + meter = { + strength: "strong", + width: "100%" + }; + break; + default: + label12 = this.promptText; + meter = null; + break; + } + return { + label: label12, + meter + }; + }, "checkPasswordStrength"), + onInvalid: /* @__PURE__ */ __name(function onInvalid(event2) { + this.$emit("invalid", event2); + }, "onInvalid"), + bindScrollListener: /* @__PURE__ */ __name(function bindScrollListener6() { + var _this = this; + if (!this.scrollHandler) { + this.scrollHandler = new ConnectedOverlayScrollHandler(this.$refs.input.$el, function() { + if (_this.overlayVisible) { + _this.overlayVisible = false; + } + }); + } + this.scrollHandler.bindScrollListener(); + }, "bindScrollListener"), + unbindScrollListener: /* @__PURE__ */ __name(function unbindScrollListener6() { + if (this.scrollHandler) { + this.scrollHandler.unbindScrollListener(); + } + }, "unbindScrollListener"), + bindResizeListener: /* @__PURE__ */ __name(function bindResizeListener6() { + var _this2 = this; + if (!this.resizeListener) { + this.resizeListener = function() { + if (_this2.overlayVisible && !isTouchDevice()) { + _this2.overlayVisible = false; + } + }; + window.addEventListener("resize", this.resizeListener); + } + }, "bindResizeListener"), + unbindResizeListener: /* @__PURE__ */ __name(function unbindResizeListener6() { + if (this.resizeListener) { + window.removeEventListener("resize", this.resizeListener); + this.resizeListener = null; + } + }, "unbindResizeListener"), + overlayRef: /* @__PURE__ */ __name(function overlayRef4(el) { + this.overlay = el; + }, "overlayRef"), + onMaskToggle: /* @__PURE__ */ __name(function onMaskToggle() { + this.unmasked = !this.unmasked; + }, "onMaskToggle"), + onOverlayClick: /* @__PURE__ */ __name(function onOverlayClick5(event2) { + OverlayEventBus.emit("overlay-click", { + originalEvent: event2, + target: this.$el + }); + }, "onOverlayClick") + }, + computed: { + inputType: /* @__PURE__ */ __name(function inputType2() { + return this.unmasked ? "text" : "password"; + }, "inputType"), + weakText: /* @__PURE__ */ __name(function weakText() { + return this.weakLabel || this.$primevue.config.locale.weak; + }, "weakText"), + mediumText: /* @__PURE__ */ __name(function mediumText() { + return this.mediumLabel || this.$primevue.config.locale.medium; + }, "mediumText"), + strongText: /* @__PURE__ */ __name(function strongText() { + return this.strongLabel || this.$primevue.config.locale.strong; + }, "strongText"), + promptText: /* @__PURE__ */ __name(function promptText() { + return this.promptLabel || this.$primevue.config.locale.passwordPrompt; + }, "promptText"), + overlayUniqueId: /* @__PURE__ */ __name(function overlayUniqueId() { + return this.id + "_overlay"; + }, "overlayUniqueId") + }, + components: { + InputText: script$1o, + Portal: script$1f, + EyeSlashIcon: script$o, + EyeIcon: script$N + } +}; +function _typeof$a(o) { + "@babel/helpers - typeof"; + return _typeof$a = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$a(o); +} +__name(_typeof$a, "_typeof$a"); +function ownKeys$9(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$9, "ownKeys$9"); +function _objectSpread$9(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$9(Object(t2), true).forEach(function(r2) { + _defineProperty$a(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$9(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$9, "_objectSpread$9"); +function _defineProperty$a(e, r, t2) { + return (r = _toPropertyKey$a(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$a, "_defineProperty$a"); +function _toPropertyKey$a(t2) { + var i = _toPrimitive$a(t2, "string"); + return "symbol" == _typeof$a(i) ? i : i + ""; +} +__name(_toPropertyKey$a, "_toPropertyKey$a"); +function _toPrimitive$a(t2, r) { + if ("object" != _typeof$a(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$a(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$a, "_toPrimitive$a"); +var _hoisted_1$c = ["id"]; +function render$k(_ctx, _cache, $props, $setup, $data, $options) { + var _component_InputText = resolveComponent("InputText"); + var _component_Portal = resolveComponent("Portal"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root"), + style: _ctx.sx("root") + }, _ctx.ptmi("root")), [createVNode(_component_InputText, mergeProps({ + ref: "input", + id: _ctx.inputId, + type: $options.inputType, + "class": [_ctx.cx("pcInputText"), _ctx.inputClass], + style: _ctx.inputStyle, + value: _ctx.d_value, + name: _ctx.$formName, + "aria-labelledby": _ctx.ariaLabelledby, + "aria-label": _ctx.ariaLabel, + "aria-controls": _ctx.overlayProps && _ctx.overlayProps.id || _ctx.overlayId || _ctx.panelProps && _ctx.panelProps.id || _ctx.panelId || $options.overlayUniqueId, + "aria-expanded": $data.overlayVisible, + "aria-haspopup": true, + placeholder: _ctx.placeholder, + required: _ctx.required, + fluid: _ctx.fluid, + disabled: _ctx.disabled, + variant: _ctx.variant, + invalid: _ctx.invalid, + size: _ctx.size, + autofocus: _ctx.autofocus, + onInput: $options.onInput, + onFocus: $options.onFocus, + onBlur: $options.onBlur, + onKeyup: $options.onKeyUp, + onInvalid: $options.onInvalid + }, _ctx.inputProps, { + pt: _ctx.ptm("pcInputText"), + unstyled: _ctx.unstyled + }), null, 16, ["id", "type", "class", "style", "value", "name", "aria-labelledby", "aria-label", "aria-controls", "aria-expanded", "placeholder", "required", "fluid", "disabled", "variant", "invalid", "size", "autofocus", "onInput", "onFocus", "onBlur", "onKeyup", "onInvalid", "pt", "unstyled"]), _ctx.toggleMask && $data.unmasked ? renderSlot(_ctx.$slots, _ctx.$slots.maskicon ? "maskicon" : "hideicon", { + key: 0, + toggleCallback: $options.onMaskToggle + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.maskIcon ? "i" : "EyeSlashIcon"), mergeProps({ + "class": [_ctx.cx("maskIcon"), _ctx.maskIcon], + onClick: $options.onMaskToggle + }, _ctx.ptm("maskIcon")), null, 16, ["class", "onClick"]))]; + }) : createCommentVNode("", true), _ctx.toggleMask && !$data.unmasked ? renderSlot(_ctx.$slots, _ctx.$slots.unmaskicon ? "unmaskicon" : "showicon", { + key: 1, + toggleCallback: $options.onMaskToggle + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.unmaskIcon ? "i" : "EyeIcon"), mergeProps({ + "class": [_ctx.cx("unmaskIcon"), _ctx.unmaskIcon], + onClick: $options.onMaskToggle + }, _ctx.ptm("unmaskIcon")), null, 16, ["class", "onClick"]))]; + }) : createCommentVNode("", true), createBaseVNode("span", mergeProps({ + "class": "p-hidden-accessible", + "aria-live": "polite" + }, _ctx.ptm("hiddenAccesible"), { + "data-p-hidden-accessible": true + }), toDisplayString($data.infoText), 17), createVNode(_component_Portal, { + appendTo: _ctx.appendTo + }, { + "default": withCtx(function() { + return [createVNode(Transition, mergeProps({ + name: "p-connected-overlay", + onEnter: $options.onOverlayEnter, + onLeave: $options.onOverlayLeave, + onAfterLeave: $options.onOverlayAfterLeave + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [$data.overlayVisible ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: $options.overlayRef, + id: _ctx.overlayId || _ctx.panelId || $options.overlayUniqueId, + "class": [_ctx.cx("overlay"), _ctx.panelClass, _ctx.overlayClass], + style: [_ctx.overlayStyle, _ctx.panelStyle], + onClick: _cache[0] || (_cache[0] = function() { + return $options.onOverlayClick && $options.onOverlayClick.apply($options, arguments); + }) + }, _objectSpread$9(_objectSpread$9(_objectSpread$9({}, _ctx.panelProps), _ctx.overlayProps), _ctx.ptm("overlay"))), [renderSlot(_ctx.$slots, "header"), renderSlot(_ctx.$slots, "content", {}, function() { + return [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("content") + }, _ctx.ptm("content")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("meter") + }, _ctx.ptm("meter")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("meterLabel"), + style: { + width: $data.meter ? $data.meter.width : "" + } + }, _ctx.ptm("meterLabel")), null, 16)], 16), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("meterText") + }, _ctx.ptm("meterText")), toDisplayString($data.infoText), 17)], 16)]; + }), renderSlot(_ctx.$slots, "footer")], 16, _hoisted_1$c)) : createCommentVNode("", true)]; + }), + _: 3 + }, 16, ["onEnter", "onLeave", "onAfterLeave"])]; + }), + _: 3 + }, 8, ["appendTo"])], 16); +} +__name(render$k, "render$k"); +script$n.render = render$k; +var theme$b = /* @__PURE__ */ __name(function theme29(_ref) { + var dt = _ref.dt; + return "\n.p-picklist {\n display: flex;\n gap: ".concat(dt("picklist.gap"), ";\n}\n\n.p-picklist-controls {\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: ").concat(dt("picklist.controls.gap"), ";\n}\n\n.p-picklist-list-container {\n flex: 1 1 50%;\n}\n\n.p-picklist .p-listbox {\n height: 100%;\n}\n"); +}, "theme"); +var classes$c = { + root: "p-picklist p-component", + sourceControls: "p-picklist-controls p-picklist-source-controls", + sourceListContainer: "p-picklist-list-container p-picklist-source-list-container", + transferControls: "p-picklist-controls p-picklist-transfer-controls", + targetListContainer: "p-picklist-list-container p-picklist-target-list-container", + targetControls: "p-picklist-controls p-picklist-target-controls" +}; +var PickListStyle = BaseStyle.extend({ + name: "picklist", + theme: theme$b, + classes: classes$c +}); +var script$1$c = { + name: "BasePickList", + "extends": script$1d, + props: { + modelValue: { + type: Array, + "default": /* @__PURE__ */ __name(function _default14() { + return [[], []]; + }, "_default") + }, + selection: { + type: Array, + "default": /* @__PURE__ */ __name(function _default15() { + return [[], []]; + }, "_default") + }, + dataKey: { + type: String, + "default": null + }, + listStyle: { + type: null, + "default": null + }, + metaKeySelection: { + type: Boolean, + "default": false + }, + autoOptionFocus: { + type: Boolean, + "default": true + }, + focusOnHover: { + type: Boolean, + "default": true + }, + responsive: { + type: Boolean, + "default": true + }, + breakpoint: { + type: String, + "default": "960px" + }, + striped: { + type: Boolean, + "default": false + }, + scrollHeight: { + type: String, + "default": "14rem" + }, + showSourceControls: { + type: Boolean, + "default": true + }, + showTargetControls: { + type: Boolean, + "default": true + }, + buttonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default16() { + return { + severity: "secondary" + }; + }, "_default") + }, + moveUpButtonProps: { + type: null, + "default": null + }, + moveTopButtonProps: { + type: null, + "default": null + }, + moveDownButtonProps: { + type: null, + "default": null + }, + moveBottomButtonProps: { + type: null, + "default": null + }, + moveToTargetProps: { + type: null, + "default": null + }, + moveAllToTargetProps: { + type: null, + "default": null + }, + moveToSourceProps: { + type: null, + "default": null + }, + moveAllToSourceProps: { + type: null, + "default": null + }, + tabindex: { + type: Number, + "default": 0 + }, + disabled: { + type: Boolean, + "default": false + } + }, + style: PickListStyle, + provide: /* @__PURE__ */ __name(function provide39() { + return { + $pcPickList: this, + $parentInstance: this + }; + }, "provide") +}; +function _toConsumableArray$4(r) { + return _arrayWithoutHoles$4(r) || _iterableToArray$4(r) || _unsupportedIterableToArray$4(r) || _nonIterableSpread$4(); +} +__name(_toConsumableArray$4, "_toConsumableArray$4"); +function _nonIterableSpread$4() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$4, "_nonIterableSpread$4"); +function _unsupportedIterableToArray$4(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$4(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$4(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$4, "_unsupportedIterableToArray$4"); +function _iterableToArray$4(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$4, "_iterableToArray$4"); +function _arrayWithoutHoles$4(r) { + if (Array.isArray(r)) return _arrayLikeToArray$4(r); +} +__name(_arrayWithoutHoles$4, "_arrayWithoutHoles$4"); +function _arrayLikeToArray$4(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$4, "_arrayLikeToArray$4"); +var script$m = { + name: "PickList", + "extends": script$1$c, + inheritAttrs: false, + emits: ["update:modelValue", "reorder", "update:selection", "selection-change", "move-to-target", "move-to-source", "move-all-to-target", "move-all-to-source", "focus", "blur"], + itemTouched: false, + reorderDirection: null, + styleElement: null, + media: null, + mediaChangeListener: null, + data: /* @__PURE__ */ __name(function data28() { + return { + id: this.$attrs.id, + d_selection: this.selection, + viewChanged: false + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId11(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + selection: /* @__PURE__ */ __name(function selection(newValue) { + this.d_selection = newValue; + }, "selection"), + breakpoint: /* @__PURE__ */ __name(function breakpoint() { + this.destroyMedia(); + this.initMedia(); + }, "breakpoint") + }, + updated: /* @__PURE__ */ __name(function updated7() { + if (this.reorderDirection) { + this.updateListScroll(this.$refs.sourceList.$el); + this.updateListScroll(this.$refs.targetList.$el); + this.reorderDirection = null; + } + }, "updated"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount13() { + this.destroyStyle(); + this.destroyMedia(); + }, "beforeUnmount"), + mounted: /* @__PURE__ */ __name(function mounted29() { + this.id = this.id || UniqueComponentId(); + if (this.responsive) { + this.createStyle(); + this.initMedia(); + } + }, "mounted"), + methods: { + updateSelection: /* @__PURE__ */ __name(function updateSelection2(event2) { + this.$emit("update:selection", this.d_selection); + this.$emit("selection-change", { + originalEvent: event2, + value: this.d_selection + }); + }, "updateSelection"), + onChangeSelection: /* @__PURE__ */ __name(function onChangeSelection2(params, listIndex) { + this.d_selection[listIndex] = params.value; + this.updateSelection(params.event); + }, "onChangeSelection"), + onListFocus: /* @__PURE__ */ __name(function onListFocus4(event2, listType) { + this.$emit("focus", event2, listType); + }, "onListFocus"), + onListBlur: /* @__PURE__ */ __name(function onListBlur4(event2, listType) { + this.$emit("blur", event2, listType); + }, "onListBlur"), + onReorderUpdate: /* @__PURE__ */ __name(function onReorderUpdate2(event2, value2, listIndex) { + this.$emit("update:modelValue", value2); + this.$emit("reorder", { + originalEvent: event2, + value: value2, + direction: this.reorderDirection, + listIndex + }); + }, "onReorderUpdate"), + onItemDblClick: /* @__PURE__ */ __name(function onItemDblClick(event2, listIndex) { + if (listIndex === 0) this.moveToTarget({ + event: event2.originalEvent + }); + else if (listIndex === 1) this.moveToSource({ + event: event2.originalEvent + }); + }, "onItemDblClick"), + moveUp: /* @__PURE__ */ __name(function moveUp2(event2, listIndex) { + if (this.d_selection && this.d_selection[listIndex]) { + var valueList = _toConsumableArray$4(this.modelValue[listIndex]); + var selectionList = this.d_selection[listIndex]; + for (var i = 0; i < selectionList.length; i++) { + var selectedItem = selectionList[i]; + var selectedItemIndex = findIndexInList(selectedItem, valueList); + if (selectedItemIndex !== 0) { + var movedItem = valueList[selectedItemIndex]; + var temp = valueList[selectedItemIndex - 1]; + valueList[selectedItemIndex - 1] = movedItem; + valueList[selectedItemIndex] = temp; + } else { + break; + } + } + var value2 = _toConsumableArray$4(this.modelValue); + value2[listIndex] = valueList; + this.reorderDirection = "up"; + this.onReorderUpdate(event2, value2, listIndex); + } + }, "moveUp"), + moveTop: /* @__PURE__ */ __name(function moveTop2(event2, listIndex) { + if (this.d_selection) { + var valueList = _toConsumableArray$4(this.modelValue[listIndex]); + var selectionList = this.d_selection[listIndex]; + for (var i = 0; i < selectionList.length; i++) { + var selectedItem = selectionList[i]; + var selectedItemIndex = findIndexInList(selectedItem, valueList); + if (selectedItemIndex !== 0) { + var movedItem = valueList.splice(selectedItemIndex, 1)[0]; + valueList.unshift(movedItem); + } else { + break; + } + } + var value2 = _toConsumableArray$4(this.modelValue); + value2[listIndex] = valueList; + this.reorderDirection = "top"; + this.onReorderUpdate(event2, value2, listIndex); + } + }, "moveTop"), + moveDown: /* @__PURE__ */ __name(function moveDown2(event2, listIndex) { + if (this.d_selection) { + var valueList = _toConsumableArray$4(this.modelValue[listIndex]); + var selectionList = this.d_selection[listIndex]; + for (var i = selectionList.length - 1; i >= 0; i--) { + var selectedItem = selectionList[i]; + var selectedItemIndex = findIndexInList(selectedItem, valueList); + if (selectedItemIndex !== valueList.length - 1) { + var movedItem = valueList[selectedItemIndex]; + var temp = valueList[selectedItemIndex + 1]; + valueList[selectedItemIndex + 1] = movedItem; + valueList[selectedItemIndex] = temp; + } else { + break; + } + } + var value2 = _toConsumableArray$4(this.modelValue); + value2[listIndex] = valueList; + this.reorderDirection = "down"; + this.onReorderUpdate(event2, value2, listIndex); + } + }, "moveDown"), + moveBottom: /* @__PURE__ */ __name(function moveBottom2(event2, listIndex) { + if (this.d_selection) { + var valueList = _toConsumableArray$4(this.modelValue[listIndex]); + var selectionList = this.d_selection[listIndex]; + for (var i = selectionList.length - 1; i >= 0; i--) { + var selectedItem = selectionList[i]; + var selectedItemIndex = findIndexInList(selectedItem, valueList); + if (selectedItemIndex !== valueList.length - 1) { + var movedItem = valueList.splice(selectedItemIndex, 1)[0]; + valueList.push(movedItem); + } else { + break; + } + } + var value2 = _toConsumableArray$4(this.modelValue); + value2[listIndex] = valueList; + this.reorderDirection = "bottom"; + this.onReorderUpdate(event2, value2, listIndex); + } + }, "moveBottom"), + moveToTarget: /* @__PURE__ */ __name(function moveToTarget(event2) { + var selection2 = this.d_selection && this.d_selection[0] ? this.d_selection[0] : null; + var sourceList2 = _toConsumableArray$4(this.modelValue[0]); + var targetList2 = _toConsumableArray$4(this.modelValue[1]); + if (selection2) { + for (var i = 0; i < selection2.length; i++) { + var selectedItem = selection2[i]; + if (findIndexInList(selectedItem, targetList2) == -1) { + targetList2.push(sourceList2.splice(findIndexInList(selectedItem, sourceList2), 1)[0]); + } + } + var value2 = _toConsumableArray$4(this.modelValue); + value2[0] = sourceList2; + value2[1] = targetList2; + this.$emit("update:modelValue", value2); + this.$emit("move-to-target", { + originalEvent: event2, + items: _toConsumableArray$4(new Set(selection2)) + }); + this.d_selection[0] = []; + this.updateSelection(event2); + } + }, "moveToTarget"), + moveAllToTarget: /* @__PURE__ */ __name(function moveAllToTarget(event2) { + if (this.modelValue[0]) { + var sourceList2 = _toConsumableArray$4(this.modelValue[0]); + var targetList2 = _toConsumableArray$4(this.modelValue[1]); + this.$emit("move-all-to-target", { + originalEvent: event2, + items: sourceList2 + }); + targetList2 = [].concat(_toConsumableArray$4(targetList2), _toConsumableArray$4(sourceList2)); + sourceList2 = []; + var value2 = _toConsumableArray$4(this.modelValue); + value2[0] = sourceList2; + value2[1] = targetList2; + this.$emit("update:modelValue", value2); + this.d_selection = [[], []]; + this.updateSelection(event2); + } + }, "moveAllToTarget"), + moveToSource: /* @__PURE__ */ __name(function moveToSource(event2) { + var selection2 = this.d_selection && this.d_selection[1] ? this.d_selection[1] : null; + var sourceList2 = _toConsumableArray$4(this.modelValue[0]); + var targetList2 = _toConsumableArray$4(this.modelValue[1]); + if (selection2) { + for (var i = 0; i < selection2.length; i++) { + var selectedItem = selection2[i]; + if (findIndexInList(selectedItem, sourceList2) == -1) { + sourceList2.push(targetList2.splice(findIndexInList(selectedItem, targetList2), 1)[0]); + } + } + var value2 = _toConsumableArray$4(this.modelValue); + value2[0] = sourceList2; + value2[1] = targetList2; + this.$emit("update:modelValue", value2); + this.$emit("move-to-source", { + originalEvent: event2, + items: _toConsumableArray$4(new Set(selection2)) + }); + this.d_selection[1] = []; + this.updateSelection(event2); + } + }, "moveToSource"), + moveAllToSource: /* @__PURE__ */ __name(function moveAllToSource(event2) { + if (this.modelValue[1]) { + var sourceList2 = _toConsumableArray$4(this.modelValue[0]); + var targetList2 = _toConsumableArray$4(this.modelValue[1]); + this.$emit("move-all-to-source", { + originalEvent: event2, + items: targetList2 + }); + sourceList2 = [].concat(_toConsumableArray$4(sourceList2), _toConsumableArray$4(targetList2)); + targetList2 = []; + var value2 = _toConsumableArray$4(this.modelValue); + value2[0] = sourceList2; + value2[1] = targetList2; + this.$emit("update:modelValue", value2); + this.d_selection = [[], []]; + this.updateSelection(event2); + } + }, "moveAllToSource"), + onItemClick: /* @__PURE__ */ __name(function onItemClick6(event2, item8, index, listIndex) { + var listType = listIndex === 0 ? "sourceList" : "targetList"; + this.itemTouched = false; + var selectionList = this.d_selection[listIndex]; + var selectedIndex = findIndexInList(item8, selectionList); + var selected3 = selectedIndex != -1; + var metaSelection = this.itemTouched ? false : this.metaKeySelection; + var selectedId = find(this.$refs[listType].$el, '[data-pc-section="item"]')[index].getAttribute("id"); + this.focusedOptionIndex = selectedId; + var _selection; + if (metaSelection) { + var metaKey = event2.metaKey || event2.ctrlKey; + if (selected3 && metaKey) { + _selection = selectionList.filter(function(val, index2) { + return index2 !== selectedIndex; + }); + } else { + _selection = metaKey ? selectionList ? _toConsumableArray$4(selectionList) : [] : []; + _selection.push(item8); + } + } else { + if (selected3) { + _selection = selectionList.filter(function(val, index2) { + return index2 !== selectedIndex; + }); + } else { + _selection = selectionList ? _toConsumableArray$4(selectionList) : []; + _selection.push(item8); + } + } + var newSelection = _toConsumableArray$4(this.d_selection); + newSelection[listIndex] = _selection; + this.d_selection = newSelection; + this.updateSelection(event2); + }, "onItemClick"), + updateListScroll: /* @__PURE__ */ __name(function updateListScroll2(listElement) { + var listItems = find(listElement, '[data-pc-section="item"][data-p-selected="true"]'); + if (listItems && listItems.length) { + switch (this.reorderDirection) { + case "up": + scrollInView(listElement, listItems[0]); + break; + case "top": + listElement.scrollTop = 0; + break; + case "down": + scrollInView(listElement, listItems[listItems.length - 1]); + break; + case "bottom": + listElement.scrollTop = listElement.scrollHeight; + break; + } + } + }, "updateListScroll"), + initMedia: /* @__PURE__ */ __name(function initMedia() { + this.media = window.matchMedia("(max-width: ".concat(this.breakpoint, ")")); + this.viewChanged = this.media.matches; + this.bindMediaChangeListener(); + }, "initMedia"), + destroyMedia: /* @__PURE__ */ __name(function destroyMedia() { + this.unbindMediaChangeListener(); + }, "destroyMedia"), + bindMediaChangeListener: /* @__PURE__ */ __name(function bindMediaChangeListener() { + var _this = this; + if (this.media && !this.mediaChangeListener) { + this.mediaChangeListener = function(event2) { + _this.viewChanged = event2.matches; + }; + this.media.addEventListener("change", this.mediaChangeListener); + } + }, "bindMediaChangeListener"), + unbindMediaChangeListener: /* @__PURE__ */ __name(function unbindMediaChangeListener() { + if (this.media && this.mediaChangeListener) { + this.media.removeEventListener("change", this.mediaChangeListener); + this.mediaChangeListener = null; + } + }, "unbindMediaChangeListener"), + createStyle: /* @__PURE__ */ __name(function createStyle2() { + if (!this.styleElement && !this.isUnstyled) { + var _this$$primevue; + this.styleElement = document.createElement("style"); + this.styleElement.type = "text/css"; + setAttribute(this.styleElement, "nonce", (_this$$primevue = this.$primevue) === null || _this$$primevue === void 0 || (_this$$primevue = _this$$primevue.config) === null || _this$$primevue === void 0 || (_this$$primevue = _this$$primevue.csp) === null || _this$$primevue === void 0 ? void 0 : _this$$primevue.nonce); + document.head.appendChild(this.styleElement); + var innerHTML = "\n@media screen and (max-width: ".concat(this.breakpoint, ") {\n .p-picklist[").concat(this.$attrSelector, "] {\n flex-direction: column;\n }\n\n .p-picklist[").concat(this.$attrSelector, "] .p-picklist-controls {\n flex-direction: row;\n }\n}\n"); + this.styleElement.innerHTML = innerHTML; + } + }, "createStyle"), + destroyStyle: /* @__PURE__ */ __name(function destroyStyle2() { + if (this.styleElement) { + document.head.removeChild(this.styleElement); + this.styleElement = null; + } + }, "destroyStyle"), + moveDisabled: /* @__PURE__ */ __name(function moveDisabled2(index) { + return this.disabled ? true : this.d_selection && (!this.d_selection[index] || !this.d_selection[index].length) ? true : false; + }, "moveDisabled"), + moveAllDisabled: /* @__PURE__ */ __name(function moveAllDisabled(list2) { + return this.disabled ? true : isEmpty(this[list2]); + }, "moveAllDisabled") + }, + computed: { + idSource: /* @__PURE__ */ __name(function idSource() { + return "".concat(this.id, "_source"); + }, "idSource"), + idTarget: /* @__PURE__ */ __name(function idTarget() { + return "".concat(this.id, "_target"); + }, "idTarget"), + sourceList: /* @__PURE__ */ __name(function sourceList() { + return this.modelValue && this.modelValue[0] ? this.modelValue[0] : null; + }, "sourceList"), + targetList: /* @__PURE__ */ __name(function targetList() { + return this.modelValue && this.modelValue[1] ? this.modelValue[1] : null; + }, "targetList"), + moveUpAriaLabel: /* @__PURE__ */ __name(function moveUpAriaLabel2() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.moveUp : void 0; + }, "moveUpAriaLabel"), + moveTopAriaLabel: /* @__PURE__ */ __name(function moveTopAriaLabel2() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.moveTop : void 0; + }, "moveTopAriaLabel"), + moveDownAriaLabel: /* @__PURE__ */ __name(function moveDownAriaLabel2() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.moveDown : void 0; + }, "moveDownAriaLabel"), + moveBottomAriaLabel: /* @__PURE__ */ __name(function moveBottomAriaLabel2() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.moveBottom : void 0; + }, "moveBottomAriaLabel"), + moveToTargetAriaLabel: /* @__PURE__ */ __name(function moveToTargetAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.moveToTarget : void 0; + }, "moveToTargetAriaLabel"), + moveAllToTargetAriaLabel: /* @__PURE__ */ __name(function moveAllToTargetAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.moveAllToTarget : void 0; + }, "moveAllToTargetAriaLabel"), + moveToSourceAriaLabel: /* @__PURE__ */ __name(function moveToSourceAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.moveToSource : void 0; + }, "moveToSourceAriaLabel"), + moveAllToSourceAriaLabel: /* @__PURE__ */ __name(function moveAllToSourceAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.moveAllToSource : void 0; + }, "moveAllToSourceAriaLabel") + }, + components: { + Listbox: script$1O, + Button: script$1e, + AngleRightIcon: script$1q, + AngleLeftIcon: script$1R, + AngleDownIcon: script$1H, + AngleUpIcon: script$1P, + AngleDoubleRightIcon: script$1S, + AngleDoubleLeftIcon: script$1T, + AngleDoubleDownIcon: script$u, + AngleDoubleUpIcon: script$t + }, + directives: { + ripple: Ripple + } +}; +function _typeof$9(o) { + "@babel/helpers - typeof"; + return _typeof$9 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$9(o); +} +__name(_typeof$9, "_typeof$9"); +function ownKeys$8(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$8, "ownKeys$8"); +function _objectSpread$8(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$8(Object(t2), true).forEach(function(r2) { + _defineProperty$9(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$8(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$8, "_objectSpread$8"); +function _defineProperty$9(e, r, t2) { + return (r = _toPropertyKey$9(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$9, "_defineProperty$9"); +function _toPropertyKey$9(t2) { + var i = _toPrimitive$9(t2, "string"); + return "symbol" == _typeof$9(i) ? i : i + ""; +} +__name(_toPropertyKey$9, "_toPropertyKey$9"); +function _toPrimitive$9(t2, r) { + if ("object" != _typeof$9(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$9(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$9, "_toPrimitive$9"); +function render$j(_ctx, _cache, $props, $setup, $data, $options) { + var _component_AngleUpIcon = resolveComponent("AngleUpIcon"); + var _component_Button = resolveComponent("Button"); + var _component_AngleDoubleUpIcon = resolveComponent("AngleDoubleUpIcon"); + var _component_AngleDownIcon = resolveComponent("AngleDownIcon"); + var _component_AngleDoubleDownIcon = resolveComponent("AngleDoubleDownIcon"); + var _component_Listbox = resolveComponent("Listbox"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [_ctx.showSourceControls ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("sourceControls") + }, _ctx.ptm("sourceControls"), { + "data-pc-group-section": "controls" + }), [renderSlot(_ctx.$slots, "sourcecontrolsstart"), createVNode(_component_Button, mergeProps({ + "aria-label": $options.moveUpAriaLabel, + disabled: $options.moveDisabled(0), + onClick: _cache[0] || (_cache[0] = function($event) { + return $options.moveUp($event, 0); + }) + }, _objectSpread$8(_objectSpread$8({}, _ctx.buttonProps), _ctx.moveUpButtonProps), { + pt: _ctx.ptm("pcSourceMoveUpButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "moveupicon", {}, function() { + return [createVNode(_component_AngleUpIcon, mergeProps(_ctx.ptm("pcSourceMoveUpButton")["icon"], { + "data-pc-section": "moveupicon" + }), null, 16)]; + })]; + }), + _: 3 + }, 16, ["aria-label", "disabled", "pt", "unstyled"]), createVNode(_component_Button, mergeProps({ + "aria-label": $options.moveTopAriaLabel, + disabled: $options.moveDisabled(0), + onClick: _cache[1] || (_cache[1] = function($event) { + return $options.moveTop($event, 0); + }) + }, _objectSpread$8(_objectSpread$8({}, _ctx.buttonProps), _ctx.moveTopButtonProps), { + pt: _ctx.ptm("pcSourceMoveTopButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movetopicon", {}, function() { + return [createVNode(_component_AngleDoubleUpIcon, mergeProps(_ctx.ptm("pcSourceMoveTopButton")["icon"], { + "data-pc-section": "movetopicon" + }), null, 16)]; + })]; + }), + _: 3 + }, 16, ["aria-label", "disabled", "pt", "unstyled"]), createVNode(_component_Button, mergeProps({ + "aria-label": $options.moveDownAriaLabel, + disabled: $options.moveDisabled(0), + onClick: _cache[2] || (_cache[2] = function($event) { + return $options.moveDown($event, 0); + }) + }, _objectSpread$8(_objectSpread$8({}, _ctx.buttonProps), _ctx.moveDownButtonProps), { + pt: _ctx.ptm("pcSourceMoveDownButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movedownicon", {}, function() { + return [createVNode(_component_AngleDownIcon, mergeProps(_ctx.ptm("pcSourceMoveDownButton")["icon"], { + "data-pc-section": "movedownicon" + }), null, 16)]; + })]; + }), + _: 3 + }, 16, ["aria-label", "disabled", "pt", "unstyled"]), createVNode(_component_Button, mergeProps({ + "aria-label": $options.moveBottomAriaLabel, + disabled: $options.moveDisabled(0), + onClick: _cache[3] || (_cache[3] = function($event) { + return $options.moveBottom($event, 0); + }) + }, _objectSpread$8(_objectSpread$8({}, _ctx.buttonProps), _ctx.moveBottomButtonProps), { + pt: _ctx.ptm("pcSourceMoveBottomButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movebottomicon", {}, function() { + return [createVNode(_component_AngleDoubleDownIcon, mergeProps(_ctx.ptm("pcSourceMoveBottomButton")["icon"], { + "data-pc-section": "movebottomicon" + }), null, 16)]; + })]; + }), + _: 3 + }, 16, ["aria-label", "disabled", "pt", "unstyled"]), renderSlot(_ctx.$slots, "sourcecontrolsend")], 16)) : createCommentVNode("", true), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("sourceListContainer") + }, _ctx.ptm("sourceListContainer"), { + "data-pc-group-section": "listcontainer" + }), [createVNode(_component_Listbox, { + ref: "sourceList", + id: $options.idSource + "_list", + modelValue: $data.d_selection[0], + options: $options.sourceList, + multiple: "", + metaKeySelection: _ctx.metaKeySelection, + listStyle: _ctx.listStyle, + scrollHeight: _ctx.scrollHeight, + tabindex: $options.sourceList && $options.sourceList.length > 0 ? _ctx.tabindex : -1, + dataKey: _ctx.dataKey, + autoOptionFocus: _ctx.autoOptionFocus, + focusOnHover: _ctx.focusOnHover, + striped: _ctx.striped, + disabled: _ctx.disabled, + pt: _ctx.ptm("pcListbox"), + unstyled: _ctx.unstyled, + onFocus: _cache[4] || (_cache[4] = function($event) { + return $options.onListFocus($event, "sourceList"); + }), + onBlur: _cache[5] || (_cache[5] = function($event) { + return $options.onListBlur($event, "sourceList"); + }), + onChange: _cache[6] || (_cache[6] = function($event) { + return $options.onChangeSelection($event, 0); + }), + onItemDblclick: _cache[7] || (_cache[7] = function($event) { + return $options.onItemDblClick($event, 0); + }), + "data-pc-group-section": "list" + }, createSlots({ + option: withCtx(function(_ref) { + var option4 = _ref.option, selected3 = _ref.selected, index = _ref.index; + return [renderSlot(_ctx.$slots, _ctx.$slots.option ? "option" : "item", { + item: option4, + option: option4, + selected: selected3, + index + })]; + }), + _: 2 + }, [_ctx.$slots.sourceheader ? { + name: "header", + fn: withCtx(function() { + return [renderSlot(_ctx.$slots, "sourceheader")]; + }), + key: "0" + } : void 0]), 1032, ["id", "modelValue", "options", "metaKeySelection", "listStyle", "scrollHeight", "tabindex", "dataKey", "autoOptionFocus", "focusOnHover", "striped", "disabled", "pt", "unstyled"])], 16), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("transferControls") + }, _ctx.ptm("transferControls"), { + "data-pc-group-section": "controls" + }), [renderSlot(_ctx.$slots, "movecontrolsstart"), createVNode(_component_Button, mergeProps({ + "aria-label": $options.moveToTargetAriaLabel, + onClick: $options.moveToTarget, + disabled: $options.moveDisabled(0) + }, _objectSpread$8(_objectSpread$8({}, _ctx.buttonProps), _ctx.moveToTargetProps), { + pt: _ctx.ptm("pcMoveToTargetButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movetotargeticon", { + viewChanged: $data.viewChanged + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent($data.viewChanged ? "AngleDownIcon" : "AngleRightIcon"), mergeProps(_ctx.ptm("pcMoveToTargetButton")["icon"], { + "data-pc-section": "movetotargeticon" + }), null, 16))]; + })]; + }), + _: 3 + }, 16, ["aria-label", "onClick", "disabled", "pt", "unstyled"]), createVNode(_component_Button, mergeProps({ + "aria-label": $options.moveAllToTargetAriaLabel, + onClick: $options.moveAllToTarget, + disabled: $options.moveAllDisabled("sourceList") + }, _objectSpread$8(_objectSpread$8({}, _ctx.buttonProps), _ctx.moveAllToTargetProps), { + pt: _ctx.ptm("pcMoveAllToTargetButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movealltotargeticon", { + viewChanged: $data.viewChanged + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent($data.viewChanged ? "AngleDoubleDownIcon" : "AngleDoubleRightIcon"), mergeProps(_ctx.ptm("pcMoveAllToTargetButton")["icon"], { + "data-pc-section": "movealltotargeticon" + }), null, 16))]; + })]; + }), + _: 3 + }, 16, ["aria-label", "onClick", "disabled", "pt", "unstyled"]), createVNode(_component_Button, mergeProps({ + "aria-label": $options.moveToSourceAriaLabel, + onClick: $options.moveToSource, + disabled: $options.moveDisabled(1) + }, _objectSpread$8(_objectSpread$8({}, _ctx.buttonProps), _ctx.moveToSourceProps), { + pt: _ctx.ptm("pcMoveToSourceButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movetosourceicon", { + viewChanged: $data.viewChanged + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent($data.viewChanged ? "AngleUpIcon" : "AngleLeftIcon"), mergeProps(_ctx.ptm("pcMoveToSourceButton")["icon"], { + "data-pc-section": "movetosourceicon" + }), null, 16))]; + })]; + }), + _: 3 + }, 16, ["aria-label", "onClick", "disabled", "pt", "unstyled"]), createVNode(_component_Button, mergeProps({ + "aria-label": $options.moveAllToSourceAriaLabel, + onClick: $options.moveAllToSource, + disabled: $options.moveAllDisabled("targetList") + }, _objectSpread$8(_objectSpread$8({}, _ctx.buttonProps), _ctx.moveAllToSourceProps), { + pt: _ctx.ptm("pcMoveAllToSourceButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movealltosourceicon", { + viewChanged: $data.viewChanged + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent($data.viewChanged ? "AngleDoubleUpIcon" : "AngleDoubleLeftIcon"), mergeProps(_ctx.ptm("pcMoveAllToSourceButton")["icon"], { + "data-pc-section": "movealltosourceicon" + }), null, 16))]; + })]; + }), + _: 3 + }, 16, ["aria-label", "onClick", "disabled", "pt", "unstyled"]), renderSlot(_ctx.$slots, "movecontrolsend")], 16), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("targetListContainer") + }, _ctx.ptm("targetListContainer"), { + "data-pc-group-section": "listcontainer" + }), [createVNode(_component_Listbox, { + ref: "targetList", + id: $options.idTarget + "_list", + modelValue: $data.d_selection[1], + options: $options.targetList, + multiple: "", + metaKeySelection: _ctx.metaKeySelection, + listStyle: _ctx.listStyle, + scrollHeight: _ctx.scrollHeight, + tabindex: $options.targetList && $options.targetList.length > 0 ? _ctx.tabindex : -1, + dataKey: _ctx.dataKey, + autoOptionFocus: _ctx.autoOptionFocus, + focusOnHover: _ctx.focusOnHover, + striped: _ctx.striped, + disabled: _ctx.disabled, + pt: _ctx.ptm("pcListbox"), + unstyled: _ctx.unstyled, + onFocus: _cache[8] || (_cache[8] = function($event) { + return $options.onListFocus($event, "targetList"); + }), + onBlur: _cache[9] || (_cache[9] = function($event) { + return $options.onListBlur($event, "targetList"); + }), + onChange: _cache[10] || (_cache[10] = function($event) { + return $options.onChangeSelection($event, 1); + }), + onItemDblclick: _cache[11] || (_cache[11] = function($event) { + return $options.onItemDblClick($event, 1); + }), + "data-pc-group-section": "list" + }, createSlots({ + option: withCtx(function(_ref2) { + var option4 = _ref2.option, selected3 = _ref2.selected, index = _ref2.index; + return [renderSlot(_ctx.$slots, _ctx.$slots.option ? "option" : "item", { + item: option4, + option: option4, + selected: selected3, + index + })]; + }), + _: 2 + }, [_ctx.$slots.targetheader ? { + name: "header", + fn: withCtx(function() { + return [renderSlot(_ctx.$slots, "targetheader")]; + }), + key: "0" + } : void 0]), 1032, ["id", "modelValue", "options", "metaKeySelection", "listStyle", "scrollHeight", "tabindex", "dataKey", "autoOptionFocus", "focusOnHover", "striped", "disabled", "pt", "unstyled"])], 16), _ctx.showTargetControls ? (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": _ctx.cx("targetControls") + }, _ctx.ptm("targetControls"), { + "data-pc-group-section": "controls" + }), [renderSlot(_ctx.$slots, "targetcontrolsstart"), createVNode(_component_Button, mergeProps({ + "aria-label": $options.moveUpAriaLabel, + disabled: $options.moveDisabled(1), + onClick: _cache[12] || (_cache[12] = function($event) { + return $options.moveUp($event, 1); + }) + }, _objectSpread$8(_objectSpread$8({}, _ctx.buttonProps), _ctx.moveUpButtonProps), { + pt: _ctx.ptm("pcTargetMoveUpButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "moveupicon", {}, function() { + return [createVNode(_component_AngleUpIcon, mergeProps(_ctx.ptm("pcTargetMoveUpButton")["icon"], { + "data-pc-section": "moveupicon" + }), null, 16)]; + })]; + }), + _: 3 + }, 16, ["aria-label", "disabled", "pt", "unstyled"]), createVNode(_component_Button, mergeProps({ + "aria-label": $options.moveTopAriaLabel, + disabled: $options.moveDisabled(1), + onClick: _cache[13] || (_cache[13] = function($event) { + return $options.moveTop($event, 1); + }) + }, _objectSpread$8(_objectSpread$8({}, _ctx.buttonProps), _ctx.moveTopButtonProps), { + pt: _ctx.ptm("pcTargetMoveTopButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movetopicon", {}, function() { + return [createVNode(_component_AngleDoubleUpIcon, mergeProps(_ctx.ptm("pcTargetMoveTopButton")["icon"], { + "data-pc-section": "movetopicon" + }), null, 16)]; + })]; + }), + _: 3 + }, 16, ["aria-label", "disabled", "pt", "unstyled"]), createVNode(_component_Button, mergeProps({ + "aria-label": $options.moveDownAriaLabel, + disabled: $options.moveDisabled(1), + onClick: _cache[14] || (_cache[14] = function($event) { + return $options.moveDown($event, 1); + }) + }, _objectSpread$8(_objectSpread$8({}, _ctx.buttonProps), _ctx.moveDownButtonProps), { + pt: _ctx.ptm("pcTargetMoveDownButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movedownicon", {}, function() { + return [createVNode(_component_AngleDownIcon, mergeProps(_ctx.ptm("pcTargetMoveDownButton")["icon"], { + "data-pc-section": "movedownicon" + }), null, 16)]; + })]; + }), + _: 3 + }, 16, ["aria-label", "disabled", "pt", "unstyled"]), createVNode(_component_Button, mergeProps({ + "aria-label": $options.moveBottomAriaLabel, + disabled: $options.moveDisabled(1), + onClick: _cache[15] || (_cache[15] = function($event) { + return $options.moveBottom($event, 1); + }) + }, _objectSpread$8(_objectSpread$8({}, _ctx.buttonProps), _ctx.moveBottomButtonProps), { + pt: _ctx.ptm("pcTargetMoveBottomButton"), + unstyled: _ctx.unstyled + }), { + icon: withCtx(function() { + return [renderSlot(_ctx.$slots, "movebottomicon", {}, function() { + return [createVNode(_component_AngleDoubleDownIcon, mergeProps(_ctx.ptm("pcTargetMoveBottomButton")["icon"], { + "data-pc-section": "movebottomicon" + }), null, 16)]; + })]; + }), + _: 3 + }, 16, ["aria-label", "disabled", "pt", "unstyled"]), renderSlot(_ctx.$slots, "targetcontrolsend")], 16)) : createCommentVNode("", true)], 16); +} +__name(render$j, "render$j"); +script$m.render = render$j; +var PortalStyle = BaseStyle.extend({ + name: "portal" +}); +var theme$a = /* @__PURE__ */ __name(function theme30(_ref) { + _ref.dt; + return "\n.p-radiobutton-group {\n display: inline-flex;\n}\n"; +}, "theme"); +var classes$b = { + root: "p-radiobutton-group p-component" +}; +var RadioButtonGroupStyle = BaseStyle.extend({ + name: "radiobuttongroup", + theme: theme$a, + classes: classes$b +}); +var script$1$b = { + name: "BaseRadioButtonGroup", + "extends": script$1s, + style: RadioButtonGroupStyle, + provide: /* @__PURE__ */ __name(function provide40() { + return { + $pcRadioButtonGroup: this, + $parentInstance: this + }; + }, "provide") +}; +var script$l = { + name: "RadioButtonGroup", + "extends": script$1$b, + inheritAttrs: false, + data: /* @__PURE__ */ __name(function data29() { + return { + groupName: this.name + }; + }, "data"), + watch: { + name: /* @__PURE__ */ __name(function name2(newValue) { + this.groupName = newValue || uuid("radiobutton-group-"); + }, "name") + }, + mounted: /* @__PURE__ */ __name(function mounted30() { + this.groupName = this.groupName || uuid("radiobutton-group-"); + }, "mounted") +}; +function render$i(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default")], 16); +} +__name(render$i, "render$i"); +script$l.render = render$i; +var script$k = { + name: "BanIcon", + "extends": script$1m +}; +function render$h(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + d: "M7 0C5.61553 0 4.26215 0.410543 3.11101 1.17971C1.95987 1.94888 1.06266 3.04213 0.532846 4.32122C0.00303296 5.6003 -0.13559 7.00776 0.134506 8.36563C0.404603 9.7235 1.07129 10.9708 2.05026 11.9497C3.02922 12.9287 4.2765 13.5954 5.63437 13.8655C6.99224 14.1356 8.3997 13.997 9.67879 13.4672C10.9579 12.9373 12.0511 12.0401 12.8203 10.889C13.5895 9.73785 14 8.38447 14 7C14 5.14348 13.2625 3.36301 11.9497 2.05025C10.637 0.737498 8.85652 0 7 0ZM1.16667 7C1.16549 5.65478 1.63303 4.35118 2.48889 3.31333L10.6867 11.5111C9.83309 12.2112 8.79816 12.6544 7.70243 12.789C6.60669 12.9236 5.49527 12.744 4.49764 12.2713C3.50001 11.7986 2.65724 11.0521 2.06751 10.1188C1.47778 9.18558 1.16537 8.10397 1.16667 7ZM11.5111 10.6867L3.31334 2.48889C4.43144 1.57388 5.84966 1.10701 7.29265 1.1789C8.73565 1.2508 10.1004 1.85633 11.1221 2.87795C12.1437 3.89956 12.7492 5.26435 12.8211 6.70735C12.893 8.15034 12.4261 9.56856 11.5111 10.6867Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$h, "render$h"); +script$k.render = render$h; +var script$j = { + name: "StarIcon", + "extends": script$1m +}; +function render$g(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + d: "M10.9741 13.6721C10.8806 13.6719 10.7886 13.6483 10.7066 13.6033L7.00002 11.6545L3.29345 13.6033C3.19926 13.6539 3.09281 13.6771 2.98612 13.6703C2.87943 13.6636 2.77676 13.6271 2.6897 13.5651C2.60277 13.5014 2.53529 13.4147 2.4948 13.3148C2.45431 13.215 2.44241 13.1058 2.46042 12.9995L3.17881 8.87264L0.167699 5.95324C0.0922333 5.8777 0.039368 5.78258 0.0150625 5.67861C-0.00924303 5.57463 -0.00402231 5.46594 0.030136 5.36477C0.0621323 5.26323 0.122141 5.17278 0.203259 5.10383C0.284377 5.03488 0.383311 4.99023 0.488681 4.97501L4.63087 4.37126L6.48797 0.618832C6.54083 0.530159 6.61581 0.456732 6.70556 0.405741C6.79532 0.35475 6.89678 0.327942 7.00002 0.327942C7.10325 0.327942 7.20471 0.35475 7.29447 0.405741C7.38422 0.456732 7.4592 0.530159 7.51206 0.618832L9.36916 4.37126L13.5114 4.97501C13.6167 4.99023 13.7157 5.03488 13.7968 5.10383C13.8779 5.17278 13.9379 5.26323 13.9699 5.36477C14.0041 5.46594 14.0093 5.57463 13.985 5.67861C13.9607 5.78258 13.9078 5.8777 13.8323 5.95324L10.8212 8.87264L11.532 12.9995C11.55 13.1058 11.5381 13.215 11.4976 13.3148C11.4571 13.4147 11.3896 13.5014 11.3027 13.5651C11.2059 13.632 11.0917 13.6692 10.9741 13.6721ZM7.00002 10.4393C7.09251 10.4404 7.18371 10.4613 7.2675 10.5005L10.2098 12.029L9.65193 8.75036C9.6368 8.6584 9.64343 8.56418 9.6713 8.47526C9.69918 8.38633 9.74751 8.30518 9.81242 8.23832L12.1969 5.94559L8.90298 5.45648C8.81188 5.44198 8.72555 5.406 8.65113 5.35152C8.57671 5.29703 8.51633 5.2256 8.475 5.14314L7.00002 2.1626L5.52503 5.15078C5.4837 5.23324 5.42332 5.30467 5.3489 5.35916C5.27448 5.41365 5.18815 5.44963 5.09705 5.46412L1.80318 5.94559L4.18761 8.23832C4.25252 8.30518 4.30085 8.38633 4.32873 8.47526C4.3566 8.56418 4.36323 8.6584 4.3481 8.75036L3.7902 12.0519L6.73253 10.5234C6.81451 10.4762 6.9058 10.4475 7.00002 10.4393Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$g, "render$g"); +script$j.render = render$g; +var script$i = { + name: "StarFillIcon", + "extends": script$1m +}; +function render$f(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("svg", mergeProps({ + width: "14", + height: "14", + viewBox: "0 0 14 14", + fill: "none", + xmlns: "http://www.w3.org/2000/svg" + }, _ctx.pti()), _cache[0] || (_cache[0] = [createBaseVNode("path", { + d: "M13.9718 5.36453C13.9398 5.26298 13.8798 5.17252 13.7986 5.10356C13.7175 5.0346 13.6186 4.98994 13.5132 4.97472L9.37043 4.37088L7.51307 0.617955C7.46021 0.529271 7.38522 0.455834 7.29545 0.404836C7.20568 0.353838 7.1042 0.327026 7.00096 0.327026C6.89771 0.327026 6.79624 0.353838 6.70647 0.404836C6.6167 0.455834 6.54171 0.529271 6.48885 0.617955L4.63149 4.37088L0.488746 4.97472C0.383363 4.98994 0.284416 5.0346 0.203286 5.10356C0.122157 5.17252 0.0621407 5.26298 0.03014 5.36453C-0.00402286 5.46571 -0.00924428 5.57442 0.0150645 5.67841C0.0393733 5.7824 0.0922457 5.87753 0.167722 5.95308L3.17924 8.87287L2.4684 13.0003C2.45038 13.1066 2.46229 13.2158 2.50278 13.3157C2.54328 13.4156 2.61077 13.5022 2.6977 13.5659C2.78477 13.628 2.88746 13.6644 2.99416 13.6712C3.10087 13.678 3.20733 13.6547 3.30153 13.6042L7.00096 11.6551L10.708 13.6042C10.79 13.6491 10.882 13.6728 10.9755 13.673C11.0958 13.6716 11.2129 13.6343 11.3119 13.5659C11.3988 13.5022 11.4663 13.4156 11.5068 13.3157C11.5473 13.2158 11.5592 13.1066 11.5412 13.0003L10.8227 8.87287L13.8266 5.95308C13.9033 5.87835 13.9577 5.7836 13.9833 5.67957C14.009 5.57554 14.005 5.4664 13.9718 5.36453Z", + fill: "currentColor" + }, null, -1)]), 16); +} +__name(render$f, "render$f"); +script$i.render = render$f; +var theme$9 = /* @__PURE__ */ __name(function theme31(_ref) { + var dt = _ref.dt; + return "\n.p-rating {\n position: relative;\n display: flex;\n align-items: center;\n gap: ".concat(dt("rating.gap"), ";\n}\n\n.p-rating-option {\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n outline-color: transparent;\n border-radius: 50%;\n transition: background ").concat(dt("rating.transition.duration"), ", color ").concat(dt("rating.transition.duration"), ", border-color ").concat(dt("rating.transition.duration"), ", outline-color ").concat(dt("rating.transition.duration"), ", box-shadow ").concat(dt("rating.transition.duration"), ";\n}\n\n.p-rating-option.p-focus-visible {\n box-shadow: ").concat(dt("rating.focus.ring.shadow"), ";\n outline: ").concat(dt("rating.focus.ring.width"), " ").concat(dt("rating.focus.ring.style"), " ").concat(dt("rating.focus.ring.color"), ";\n outline-offset: ").concat(dt("rating.focus.ring.offset"), ";\n}\n\n.p-rating-icon {\n color: ").concat(dt("rating.icon.color"), ";\n transition: background ").concat(dt("rating.transition.duration"), ", color ").concat(dt("rating.transition.duration"), ", border-color ").concat(dt("rating.transition.duration"), ", outline-color ").concat(dt("rating.transition.duration"), ", box-shadow ").concat(dt("rating.transition.duration"), ";\n font-size: ").concat(dt("rating.icon.size"), ";\n width: ").concat(dt("rating.icon.size"), ";\n height: ").concat(dt("rating.icon.size"), ";\n}\n\n.p-rating:not(.p-disabled):not(.p-readonly) .p-rating-option:hover .p-rating-icon {\n color: ").concat(dt("rating.icon.hover.color"), ";\n}\n\n.p-rating-option-active .p-rating-icon {\n color: ").concat(dt("rating.icon.active.color"), ";\n}\n\n.p-rating-icon.p-invalid { /* @todo */\n stroke: ").concat(dt("rating.invalid.icon.color"), ";\n}\n"); +}, "theme"); +var classes$a = { + root: /* @__PURE__ */ __name(function root24(_ref2) { + var props = _ref2.props; + return ["p-rating", { + "p-readonly": props.readonly, + "p-disabled": props.disabled + }]; + }, "root"), + option: /* @__PURE__ */ __name(function option3(_ref3) { + var instance = _ref3.instance, value2 = _ref3.value; + return ["p-rating-option", { + "p-rating-option-active": value2 <= instance.d_value, + "p-focus-visible": value2 === instance.focusedOptionIndex && instance.isFocusVisibleItem + }]; + }, "option"), + onIcon: /* @__PURE__ */ __name(function onIcon(_ref4) { + var instance = _ref4.instance; + return ["p-rating-icon p-rating-on-icon", { + "p-invalid": instance.$invalid + }]; + }, "onIcon"), + offIcon: /* @__PURE__ */ __name(function offIcon(_ref5) { + var instance = _ref5.instance; + return ["p-rating-icon p-rating-off-icon", { + "p-invalid": instance.$invalid + }]; + }, "offIcon") +}; +var RatingStyle = BaseStyle.extend({ + name: "rating", + theme: theme$9, + classes: classes$a +}); +var script$1$a = { + name: "BaseRating", + "extends": script$1s, + props: { + readonly: { + type: Boolean, + "default": false + }, + stars: { + type: Number, + "default": 5 + }, + onIcon: { + type: String, + "default": void 0 + }, + offIcon: { + type: String, + "default": void 0 + } + }, + style: RatingStyle, + provide: /* @__PURE__ */ __name(function provide41() { + return { + $pcRating: this, + $parentInstance: this + }; + }, "provide") +}; +var script$h = { + name: "Rating", + "extends": script$1$a, + inheritAttrs: false, + emits: ["change", "focus", "blur"], + data: /* @__PURE__ */ __name(function data30() { + return { + d_name: this.name, + focusedOptionIndex: -1, + isFocusVisibleItem: true + }; + }, "data"), + watch: { + name: /* @__PURE__ */ __name(function name3(newValue) { + this.d_name = newValue || UniqueComponentId(); + }, "name") + }, + mounted: /* @__PURE__ */ __name(function mounted31() { + this.d_name = this.d_name || UniqueComponentId(); + }, "mounted"), + methods: { + getPTOptions: /* @__PURE__ */ __name(function getPTOptions9(key, value2) { + return this.ptm(key, { + context: { + active: value2 <= this.d_value, + focused: value2 === this.focusedOptionIndex + } + }); + }, "getPTOptions"), + onOptionClick: /* @__PURE__ */ __name(function onOptionClick3(event2, value2) { + if (!this.readonly && !this.disabled) { + this.onOptionSelect(event2, value2); + this.isFocusVisibleItem = false; + var firstFocusableEl = getFirstFocusableElement(event2.currentTarget); + firstFocusableEl && focus(firstFocusableEl); + } + }, "onOptionClick"), + onFocus: /* @__PURE__ */ __name(function onFocus12(event2, value2) { + this.focusedOptionIndex = value2; + this.$emit("focus", event2); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur12(event2) { + var _this$formField$onBlu, _this$formField; + this.focusedOptionIndex = -1; + this.$emit("blur", event2); + (_this$formField$onBlu = (_this$formField = this.formField).onBlur) === null || _this$formField$onBlu === void 0 || _this$formField$onBlu.call(_this$formField); + }, "onBlur"), + onChange: /* @__PURE__ */ __name(function onChange(event2, value2) { + this.onOptionSelect(event2, value2); + this.isFocusVisibleItem = true; + }, "onChange"), + onOptionSelect: /* @__PURE__ */ __name(function onOptionSelect3(event2, value2) { + if (this.focusedOptionIndex === value2 || this.d_value === value2) { + this.focusedOptionIndex = -1; + this.updateModel(event2, null); + } else { + this.focusedOptionIndex = value2; + this.updateModel(event2, value2 || null); + } + }, "onOptionSelect"), + updateModel: /* @__PURE__ */ __name(function updateModel7(event2, value2) { + this.writeValue(value2, event2); + this.$emit("change", { + originalEvent: event2, + value: value2 + }); + }, "updateModel"), + starAriaLabel: /* @__PURE__ */ __name(function starAriaLabel(value2) { + return value2 === 1 ? this.$primevue.config.locale.aria.star : this.$primevue.config.locale.aria.stars.replace(/{star}/g, value2); + }, "starAriaLabel") + }, + components: { + StarFillIcon: script$i, + StarIcon: script$j, + BanIcon: script$k + } +}; +var _hoisted_1$b = ["onClick", "data-p-active", "data-p-focused"]; +var _hoisted_2$8 = ["value", "name", "checked", "disabled", "readonly", "aria-label", "onFocus", "onChange"]; +function render$e(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.stars, function(value2) { + return openBlock(), createElementBlock("div", mergeProps({ + key: value2, + "class": _ctx.cx("option", { + value: value2 + }), + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onOptionClick($event, value2); + }, "onClick"), + ref_for: true + }, $options.getPTOptions("option", value2), { + "data-p-active": value2 <= _ctx.d_value, + "data-p-focused": value2 === $data.focusedOptionIndex + }), [createBaseVNode("span", mergeProps({ + "class": "p-hidden-accessible", + ref_for: true + }, _ctx.ptm("hiddenOptionInputContainer"), { + "data-p-hidden-accessible": true + }), [createBaseVNode("input", mergeProps({ + type: "radio", + value: value2, + name: $data.d_name, + checked: _ctx.d_value === value2, + disabled: _ctx.disabled, + readonly: _ctx.readonly, + "aria-label": $options.starAriaLabel(value2), + onFocus: /* @__PURE__ */ __name(function onFocus15($event) { + return $options.onFocus($event, value2); + }, "onFocus"), + onBlur: _cache[0] || (_cache[0] = function() { + return $options.onBlur && $options.onBlur.apply($options, arguments); + }), + onChange: /* @__PURE__ */ __name(function onChange2($event) { + return $options.onChange($event, value2); + }, "onChange"), + ref_for: true + }, _ctx.ptm("hiddenOptionInput")), null, 16, _hoisted_2$8)], 16), value2 <= _ctx.d_value ? renderSlot(_ctx.$slots, "onicon", { + key: 0, + value: value2, + "class": normalizeClass(_ctx.cx("onIcon")) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.onIcon ? "span" : "StarFillIcon"), mergeProps({ + "class": [_ctx.cx("onIcon"), _ctx.onIcon], + ref_for: true + }, _ctx.ptm("onIcon")), null, 16, ["class"]))]; + }) : renderSlot(_ctx.$slots, "officon", { + key: 1, + value: value2, + "class": normalizeClass(_ctx.cx("offIcon")) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.offIcon ? "span" : "StarIcon"), mergeProps({ + "class": [_ctx.cx("offIcon"), _ctx.offIcon], + ref_for: true + }, _ctx.ptm("offIcon")), null, 16, ["class"]))]; + })], 16, _hoisted_1$b); + }), 128))], 16); +} +__name(render$e, "render$e"); +script$h.render = render$e; +var script$g = { + name: "Row", + "extends": script$1d, + inject: ["$rows"], + mounted: /* @__PURE__ */ __name(function mounted32() { + var _this$$rows; + (_this$$rows = this.$rows) === null || _this$$rows === void 0 || _this$$rows.add(this.$); + }, "mounted"), + unmounted: /* @__PURE__ */ __name(function unmounted4() { + var _this$$rows2; + (_this$$rows2 = this.$rows) === null || _this$$rows2 === void 0 || _this$$rows2["delete"](this.$); + }, "unmounted"), + render: /* @__PURE__ */ __name(function render2() { + return null; + }, "render") +}; +var RowStyle = BaseStyle.extend({ + name: "row" +}); +var theme$8 = /* @__PURE__ */ __name(function theme32(_ref) { + _ref.dt; + return "\n.p-scrolltop.p-button {\n position: fixed !important;\n inset-block-end: 20px;\n inset-inline-end: 20px;\n}\n\n.p-scrolltop-sticky.p-button {\n position: sticky !important;\n display: flex;\n margin-inline-start: auto;\n}\n\n.p-scrolltop-enter-from {\n opacity: 0;\n}\n\n.p-scrolltop-enter-active {\n transition: opacity 0.15s;\n}\n\n.p-scrolltop.p-scrolltop-leave-to {\n opacity: 0;\n}\n\n.p-scrolltop-leave-active {\n transition: opacity 0.15s;\n}\n"; +}, "theme"); +var classes$9 = { + root: /* @__PURE__ */ __name(function root25(_ref2) { + var props = _ref2.props; + return ["p-scrolltop", { + "p-scrolltop-sticky": props.target !== "window" + }]; + }, "root"), + icon: "p-scrolltop-icon" +}; +var ScrollTopStyle = BaseStyle.extend({ + name: "scrolltop", + theme: theme$8, + classes: classes$9 +}); +var script$1$9 = { + name: "BaseScrollTop", + "extends": script$1d, + props: { + target: { + type: String, + "default": "window" + }, + threshold: { + type: Number, + "default": 400 + }, + icon: { + type: String, + "default": void 0 + }, + behavior: { + type: String, + "default": "smooth" + }, + buttonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default17() { + return { + rounded: true + }; + }, "_default") + } + }, + style: ScrollTopStyle, + provide: /* @__PURE__ */ __name(function provide42() { + return { + $pcScrollTop: this, + $parentInstance: this + }; + }, "provide") +}; +var script$f = { + name: "ScrollTop", + "extends": script$1$9, + inheritAttrs: false, + scrollListener: null, + container: null, + data: /* @__PURE__ */ __name(function data31() { + return { + visible: false + }; + }, "data"), + mounted: /* @__PURE__ */ __name(function mounted33() { + if (this.target === "window") this.bindDocumentScrollListener(); + else if (this.target === "parent") this.bindParentScrollListener(); + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount14() { + if (this.target === "window") this.unbindDocumentScrollListener(); + else if (this.target === "parent") this.unbindParentScrollListener(); + if (this.container) { + ZIndex.clear(this.container); + this.overlay = null; + } + }, "beforeUnmount"), + methods: { + onClick: /* @__PURE__ */ __name(function onClick5() { + var scrollElement = this.target === "window" ? window : this.$el.parentElement; + scrollElement.scroll({ + top: 0, + behavior: this.behavior + }); + }, "onClick"), + checkVisibility: /* @__PURE__ */ __name(function checkVisibility(scrollY) { + if (scrollY > this.threshold) this.visible = true; + else this.visible = false; + }, "checkVisibility"), + bindParentScrollListener: /* @__PURE__ */ __name(function bindParentScrollListener() { + var _this = this; + this.scrollListener = function() { + _this.checkVisibility(_this.$el.parentElement.scrollTop); + }; + this.$el.parentElement.addEventListener("scroll", this.scrollListener); + }, "bindParentScrollListener"), + bindDocumentScrollListener: /* @__PURE__ */ __name(function bindDocumentScrollListener() { + var _this2 = this; + this.scrollListener = function() { + _this2.checkVisibility(getWindowScrollTop()); + }; + window.addEventListener("scroll", this.scrollListener); + }, "bindDocumentScrollListener"), + unbindParentScrollListener: /* @__PURE__ */ __name(function unbindParentScrollListener() { + if (this.scrollListener) { + this.$el.parentElement.removeEventListener("scroll", this.scrollListener); + this.scrollListener = null; + } + }, "unbindParentScrollListener"), + unbindDocumentScrollListener: /* @__PURE__ */ __name(function unbindDocumentScrollListener() { + if (this.scrollListener) { + window.removeEventListener("scroll", this.scrollListener); + this.scrollListener = null; + } + }, "unbindDocumentScrollListener"), + onEnter: /* @__PURE__ */ __name(function onEnter4(el) { + ZIndex.set("overlay", el, this.$primevue.config.zIndex.overlay); + }, "onEnter"), + onAfterLeave: /* @__PURE__ */ __name(function onAfterLeave4(el) { + ZIndex.clear(el); + }, "onAfterLeave"), + containerRef: /* @__PURE__ */ __name(function containerRef5(el) { + this.container = el ? el.$el : void 0; + }, "containerRef") + }, + computed: { + scrollTopAriaLabel: /* @__PURE__ */ __name(function scrollTopAriaLabel() { + return this.$primevue.config.locale.aria ? this.$primevue.config.locale.aria.scrollTop : void 0; + }, "scrollTopAriaLabel") + }, + components: { + ChevronUpIcon: script$1j, + Button: script$1e + } +}; +function render$d(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Button = resolveComponent("Button"); + return openBlock(), createBlock(Transition, mergeProps({ + name: "p-scrolltop", + appear: "", + onEnter: $options.onEnter, + onAfterLeave: $options.onAfterLeave + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [$data.visible ? (openBlock(), createBlock(_component_Button, mergeProps({ + key: 0, + ref: $options.containerRef, + "class": _ctx.cx("root"), + onClick: $options.onClick, + "aria-label": $options.scrollTopAriaLabel, + unstyled: _ctx.unstyled + }, _ctx.buttonProps, { + pt: _ctx.pt + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "icon", { + "class": normalizeClass(_ctx.cx("icon")) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.icon ? "span" : "ChevronUpIcon"), mergeProps({ + "class": [_ctx.cx("icon"), _ctx.icon, slotProps["class"]] + }, _ctx.ptm("icon")), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "onClick", "aria-label", "unstyled", "pt"])) : createCommentVNode("", true)]; + }), + _: 3 + }, 16, ["onEnter", "onAfterLeave"]); +} +__name(render$d, "render$d"); +script$f.render = render$d; +var script$e = { + name: "Sidebar", + "extends": script$1c, + mounted: /* @__PURE__ */ __name(function mounted34() { + console.warn("Deprecated since v4. Use Drawer component instead."); + }, "mounted") +}; +var SidebarStyle = BaseStyle.extend({ + name: "sidebar" +}); +var theme$7 = /* @__PURE__ */ __name(function theme33(_ref) { + var dt = _ref.dt; + return "\n.p-skeleton {\n overflow: hidden;\n background: ".concat(dt("skeleton.background"), ";\n border-radius: ").concat(dt("skeleton.border.radius"), ';\n}\n\n.p-skeleton::after {\n content: "";\n animation: p-skeleton-animation 1.2s infinite;\n height: 100%;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n transform: translateX(-100%);\n z-index: 1;\n background: linear-gradient(90deg, rgba(255, 255, 255, 0), ').concat(dt("skeleton.animation.background"), ", rgba(255, 255, 255, 0));\n}\n\n[dir='rtl'] .p-skeleton::after {\n animation-name: p-skeleton-animation-rtl;\n}\n\n.p-skeleton-circle {\n border-radius: 50%;\n}\n\n.p-skeleton-animation-none::after {\n animation: none;\n}\n\n@keyframes p-skeleton-animation {\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(100%);\n }\n}\n\n@keyframes p-skeleton-animation-rtl {\n from {\n transform: translateX(100%);\n }\n to {\n transform: translateX(-100%);\n }\n}\n"); +}, "theme"); +var inlineStyles$3 = { + root: { + position: "relative" + } +}; +var classes$8 = { + root: /* @__PURE__ */ __name(function root26(_ref2) { + var props = _ref2.props; + return ["p-skeleton p-component", { + "p-skeleton-circle": props.shape === "circle", + "p-skeleton-animation-none": props.animation === "none" + }]; + }, "root") +}; +var SkeletonStyle = BaseStyle.extend({ + name: "skeleton", + theme: theme$7, + classes: classes$8, + inlineStyles: inlineStyles$3 +}); +var script$1$8 = { + name: "BaseSkeleton", + "extends": script$1d, + props: { + shape: { + type: String, + "default": "rectangle" + }, + size: { + type: String, + "default": null + }, + width: { + type: String, + "default": "100%" + }, + height: { + type: String, + "default": "1rem" + }, + borderRadius: { + type: String, + "default": null + }, + animation: { + type: String, + "default": "wave" + } + }, + style: SkeletonStyle, + provide: /* @__PURE__ */ __name(function provide43() { + return { + $pcSkeleton: this, + $parentInstance: this + }; + }, "provide") +}; +var script$d = { + name: "Skeleton", + "extends": script$1$8, + inheritAttrs: false, + computed: { + containerStyle: /* @__PURE__ */ __name(function containerStyle() { + if (this.size) return { + width: this.size, + height: this.size, + borderRadius: this.borderRadius + }; + else return { + width: this.width, + height: this.height, + borderRadius: this.borderRadius + }; + }, "containerStyle") + } +}; +function render$c(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root"), + style: [_ctx.sx("root"), $options.containerStyle], + "aria-hidden": "true" + }, _ctx.ptmi("root")), null, 16); +} +__name(render$c, "render$c"); +script$d.render = render$c; +function _typeof$8(o) { + "@babel/helpers - typeof"; + return _typeof$8 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$8(o); +} +__name(_typeof$8, "_typeof$8"); +function _defineProperty$8(e, r, t2) { + return (r = _toPropertyKey$8(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$8, "_defineProperty$8"); +function _toPropertyKey$8(t2) { + var i = _toPrimitive$8(t2, "string"); + return "symbol" == _typeof$8(i) ? i : i + ""; +} +__name(_toPropertyKey$8, "_toPropertyKey$8"); +function _toPrimitive$8(t2, r) { + if ("object" != _typeof$8(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$8(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$8, "_toPrimitive$8"); +var theme$6 = /* @__PURE__ */ __name(function theme34(_ref) { + var dt = _ref.dt; + return "\n.p-speeddial {\n position: static;\n display: flex;\n gap: ".concat(dt("speeddial.gap"), ";\n}\n\n.p-speeddial-button {\n z-index: 1;\n}\n\n.p-speeddial-button.p-speeddial-rotate {\n transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, background ").concat(dt("speeddial.transition.duration"), ", color ").concat(dt("speeddial.transition.duration"), ", border-color ").concat(dt("speeddial.transition.duration"), ",\n box-shadow ").concat(dt("speeddial.transition.duration"), ", outline-color ").concat(dt("speeddial.transition.duration"), ";\n will-change: transform;\n}\n\n.p-speeddial-list {\n margin: 0;\n padding: 0;\n list-style: none;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: inset-block-start 0s linear ").concat(dt("speeddial.transition.duration"), ";\n pointer-events: none;\n outline: 0 none;\n z-index: 2;\n gap: ").concat(dt("speeddial.gap"), ";\n}\n\n.p-speeddial-item {\n transform: scale(0);\n opacity: 0;\n transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, opacity 0.8s;\n will-change: transform;\n}\n\n.p-speeddial-circle .p-speeddial-item,\n.p-speeddial-semi-circle .p-speeddial-item,\n.p-speeddial-quarter-circle .p-speeddial-item {\n position: absolute;\n}\n\n.p-speeddial-mask {\n position: absolute;\n inset-inline-start: 0;\n inset-block-start: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n background: ").concat(dt("mask.background"), ";\n border-radius: 6px;\n transition: opacity 150ms;\n}\n\n.p-speeddial-mask-visible {\n pointer-events: none;\n opacity: 1;\n transition: opacity 150ms;\n}\n\n.p-speeddial-open .p-speeddial-list {\n pointer-events: auto;\n}\n\n.p-speeddial-open .p-speeddial-item {\n transform: scale(1);\n opacity: 1;\n}\n\n.p-speeddial-open .p-speeddial-rotate {\n transform: rotate(45deg);\n}\n"); +}, "theme"); +var inlineStyles$2 = { + root: /* @__PURE__ */ __name(function root27(_ref2) { + var props = _ref2.props; + return { + alignItems: (props.direction === "up" || props.direction === "down") && "center", + justifyContent: (props.direction === "left" || props.direction === "right") && "center", + flexDirection: props.direction === "up" ? "column-reverse" : props.direction === "down" ? "column" : props.direction === "left" ? "row-reverse" : props.direction === "right" ? "row" : null + }; + }, "root"), + list: /* @__PURE__ */ __name(function list(_ref3) { + var props = _ref3.props; + return { + flexDirection: props.direction === "up" ? "column-reverse" : props.direction === "down" ? "column" : props.direction === "left" ? "row-reverse" : props.direction === "right" ? "row" : null + }; + }, "list") +}; +var classes$7 = { + root: /* @__PURE__ */ __name(function root28(_ref4) { + var instance = _ref4.instance, props = _ref4.props; + return ["p-speeddial p-component p-speeddial-".concat(props.type), _defineProperty$8(_defineProperty$8(_defineProperty$8({}, "p-speeddial-direction-".concat(props.direction), props.type !== "circle"), "p-speeddial-open", instance.d_visible), "p-disabled", props.disabled)]; + }, "root"), + pcButton: /* @__PURE__ */ __name(function pcButton(_ref6) { + var props = _ref6.props; + return ["p-speeddial-button", { + "p-speeddial-rotate": props.rotateAnimation && !props.hideIcon + }]; + }, "pcButton"), + list: "p-speeddial-list", + item: "p-speeddial-item", + action: "p-speeddial-action", + actionIcon: "p-speeddial-action-icon", + mask: /* @__PURE__ */ __name(function mask4(_ref7) { + var instance = _ref7.instance; + return ["p-speeddial-mask", { + "p-speeddial-mask-visible": instance.d_visible + }]; + }, "mask") +}; +var SpeedDialStyle = BaseStyle.extend({ + name: "speeddial", + theme: theme$6, + classes: classes$7, + inlineStyles: inlineStyles$2 +}); +var script$1$7 = { + name: "BaseSpeedDial", + "extends": script$1d, + props: { + model: null, + visible: { + type: Boolean, + "default": false + }, + direction: { + type: String, + "default": "up" + }, + transitionDelay: { + type: Number, + "default": 30 + }, + type: { + type: String, + "default": "linear" + }, + radius: { + type: Number, + "default": 0 + }, + mask: { + type: Boolean, + "default": false + }, + disabled: { + type: Boolean, + "default": false + }, + hideOnClickOutside: { + type: Boolean, + "default": true + }, + buttonClass: null, + maskStyle: null, + maskClass: null, + showIcon: { + type: String, + "default": void 0 + }, + hideIcon: { + type: String, + "default": void 0 + }, + rotateAnimation: { + type: Boolean, + "default": true + }, + tooltipOptions: null, + style: null, + "class": null, + buttonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default18() { + return { + rounded: true + }; + }, "_default") + }, + actionButtonProps: { + type: Object, + "default": /* @__PURE__ */ __name(function _default19() { + return { + severity: "secondary", + rounded: true, + size: "small" + }; + }, "_default") + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + } + }, + style: SpeedDialStyle, + provide: /* @__PURE__ */ __name(function provide44() { + return { + $pcSpeedDial: this, + $parentInstance: this + }; + }, "provide") +}; +function _typeof$7(o) { + "@babel/helpers - typeof"; + return _typeof$7 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$7(o); +} +__name(_typeof$7, "_typeof$7"); +function ownKeys$7(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$7, "ownKeys$7"); +function _objectSpread$7(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$7(Object(t2), true).forEach(function(r2) { + _defineProperty$7(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$7(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$7, "_objectSpread$7"); +function _defineProperty$7(e, r, t2) { + return (r = _toPropertyKey$7(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$7, "_defineProperty$7"); +function _toPropertyKey$7(t2) { + var i = _toPrimitive$7(t2, "string"); + return "symbol" == _typeof$7(i) ? i : i + ""; +} +__name(_toPropertyKey$7, "_toPropertyKey$7"); +function _toPrimitive$7(t2, r) { + if ("object" != _typeof$7(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$7(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$7, "_toPrimitive$7"); +function _toConsumableArray$3(r) { + return _arrayWithoutHoles$3(r) || _iterableToArray$3(r) || _unsupportedIterableToArray$3(r) || _nonIterableSpread$3(); +} +__name(_toConsumableArray$3, "_toConsumableArray$3"); +function _nonIterableSpread$3() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$3, "_nonIterableSpread$3"); +function _unsupportedIterableToArray$3(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$3(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$3(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$3, "_unsupportedIterableToArray$3"); +function _iterableToArray$3(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$3, "_iterableToArray$3"); +function _arrayWithoutHoles$3(r) { + if (Array.isArray(r)) return _arrayLikeToArray$3(r); +} +__name(_arrayWithoutHoles$3, "_arrayWithoutHoles$3"); +function _arrayLikeToArray$3(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$3, "_arrayLikeToArray$3"); +var Math_PI = 3.14159265358979; +var script$c = { + name: "SpeedDial", + "extends": script$1$7, + inheritAttrs: false, + emits: ["click", "show", "hide", "focus", "blur"], + documentClickListener: null, + container: null, + list: null, + data: /* @__PURE__ */ __name(function data32() { + return { + id: this.$attrs.id, + d_visible: this.visible, + isItemClicked: false, + focused: false, + focusedOptionIndex: -1 + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId12(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + visible: /* @__PURE__ */ __name(function visible4(newValue) { + this.d_visible = newValue; + }, "visible") + }, + mounted: /* @__PURE__ */ __name(function mounted35() { + this.id = this.id || UniqueComponentId(); + if (this.type !== "linear") { + var button = findSingle(this.container, '[data-pc-name="pcbutton"]'); + var firstItem = findSingle(this.list, '[data-pc-section="item"]'); + if (button && firstItem) { + var wDiff = Math.abs(button.offsetWidth - firstItem.offsetWidth); + var hDiff = Math.abs(button.offsetHeight - firstItem.offsetHeight); + this.list.style.setProperty($dt("item.diff.x").name, "".concat(wDiff / 2, "px")); + this.list.style.setProperty($dt("item.diff.y").name, "".concat(hDiff / 2, "px")); + } + } + if (this.hideOnClickOutside) { + this.bindDocumentClickListener(); + } + }, "mounted"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount15() { + this.unbindDocumentClickListener(); + }, "beforeUnmount"), + methods: { + getPTOptions: /* @__PURE__ */ __name(function getPTOptions10(id4, key) { + return this.ptm(key, { + context: { + active: this.isItemActive(id4), + hidden: !this.d_visible + } + }); + }, "getPTOptions"), + onFocus: /* @__PURE__ */ __name(function onFocus13(event2) { + this.$emit("focus", event2); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur13(event2) { + this.focusedOptionIndex = -1; + this.$emit("blur", event2); + }, "onBlur"), + onItemClick: /* @__PURE__ */ __name(function onItemClick7(e, item8) { + if (item8.command) { + item8.command({ + originalEvent: e, + item: item8 + }); + } + this.hide(); + this.isItemClicked = true; + e.preventDefault(); + }, "onItemClick"), + onClick: /* @__PURE__ */ __name(function onClick6(event2) { + this.d_visible ? this.hide() : this.show(); + this.isItemClicked = true; + this.$emit("click", event2); + }, "onClick"), + show: /* @__PURE__ */ __name(function show5() { + this.d_visible = true; + this.$emit("show"); + }, "show"), + hide: /* @__PURE__ */ __name(function hide6() { + this.d_visible = false; + this.$emit("hide"); + }, "hide"), + calculateTransitionDelay: /* @__PURE__ */ __name(function calculateTransitionDelay(index) { + var length = this.model.length; + var visible7 = this.d_visible; + return (visible7 ? index : length - index - 1) * this.transitionDelay; + }, "calculateTransitionDelay"), + onTogglerKeydown: /* @__PURE__ */ __name(function onTogglerKeydown(event2) { + switch (event2.code) { + case "ArrowDown": + case "ArrowLeft": + this.onTogglerArrowDown(event2); + break; + case "ArrowUp": + case "ArrowRight": + this.onTogglerArrowUp(event2); + break; + case "Escape": + this.onEscapeKey(); + break; + } + }, "onTogglerKeydown"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown11(event2) { + switch (event2.code) { + case "ArrowDown": + this.onArrowDown(event2); + break; + case "ArrowUp": + this.onArrowUp(event2); + break; + case "ArrowLeft": + this.onArrowLeft(event2); + break; + case "ArrowRight": + this.onArrowRight(event2); + break; + case "Enter": + case "NumpadEnter": + case "Space": + this.onEnterKey(event2); + break; + case "Escape": + this.onEscapeKey(event2); + break; + case "Home": + this.onHomeKey(event2); + break; + case "End": + this.onEndKey(event2); + break; + } + }, "onKeyDown"), + onTogglerArrowUp: /* @__PURE__ */ __name(function onTogglerArrowUp(event2) { + this.show(); + this.navigatePrevItem(event2); + event2.preventDefault(); + }, "onTogglerArrowUp"), + onTogglerArrowDown: /* @__PURE__ */ __name(function onTogglerArrowDown(event2) { + this.show(); + this.navigateNextItem(event2); + event2.preventDefault(); + }, "onTogglerArrowDown"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey7(event2) { + var _this = this; + var items2 = find(this.container, '[data-pc-section="item"]'); + var itemIndex = _toConsumableArray$3(items2).findIndex(function(item8) { + return item8.id === _this.focusedOptionIndex; + }); + var buttonEl = findSingle(this.container, "button"); + this.onItemClick(event2, this.model[itemIndex]); + this.onBlur(event2); + buttonEl && focus(buttonEl); + }, "onEnterKey"), + onEscapeKey: /* @__PURE__ */ __name(function onEscapeKey4() { + this.hide(); + var buttonEl = findSingle(this.container, "button"); + buttonEl && focus(buttonEl); + }, "onEscapeKey"), + onArrowUp: /* @__PURE__ */ __name(function onArrowUp(event2) { + if (this.direction === "down") { + this.navigatePrevItem(event2); + } else { + this.navigateNextItem(event2); + } + }, "onArrowUp"), + onArrowDown: /* @__PURE__ */ __name(function onArrowDown(event2) { + if (this.direction === "down") { + this.navigateNextItem(event2); + } else { + this.navigatePrevItem(event2); + } + }, "onArrowDown"), + onArrowLeft: /* @__PURE__ */ __name(function onArrowLeft(event2) { + var leftValidDirections = ["left", "up-right", "down-left"]; + var rightValidDirections = ["right", "up-left", "down-right"]; + if (leftValidDirections.includes(this.direction)) { + this.navigateNextItem(event2); + } else if (rightValidDirections.includes(this.direction)) { + this.navigatePrevItem(event2); + } else { + this.navigatePrevItem(event2); + } + }, "onArrowLeft"), + onArrowRight: /* @__PURE__ */ __name(function onArrowRight(event2) { + var leftValidDirections = ["left", "up-right", "down-left"]; + var rightValidDirections = ["right", "up-left", "down-right"]; + if (leftValidDirections.includes(this.direction)) { + this.navigatePrevItem(event2); + } else if (rightValidDirections.includes(this.direction)) { + this.navigateNextItem(event2); + } else { + this.navigateNextItem(event2); + } + }, "onArrowRight"), + onEndKey: /* @__PURE__ */ __name(function onEndKey8(event2) { + event2.preventDefault(); + this.focusedOptionIndex = -1; + this.navigatePrevItem(event2); + }, "onEndKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey8(event2) { + event2.preventDefault(); + this.focusedOptionIndex = -1; + this.navigateNextItem(event2); + }, "onHomeKey"), + navigateNextItem: /* @__PURE__ */ __name(function navigateNextItem(event2) { + var optionIndex = this.findNextOptionIndex(this.focusedOptionIndex); + this.changeFocusedOptionIndex(optionIndex); + event2.preventDefault(); + }, "navigateNextItem"), + navigatePrevItem: /* @__PURE__ */ __name(function navigatePrevItem(event2) { + var optionIndex = this.findPrevOptionIndex(this.focusedOptionIndex); + this.changeFocusedOptionIndex(optionIndex); + event2.preventDefault(); + }, "navigatePrevItem"), + changeFocusedOptionIndex: /* @__PURE__ */ __name(function changeFocusedOptionIndex5(index) { + var items2 = find(this.container, '[data-pc-section="item"]'); + var filteredItems = _toConsumableArray$3(items2).filter(function(item8) { + return !hasClass(findSingle(item8, "a"), "p-disabled"); + }); + if (filteredItems[index]) { + this.focusedOptionIndex = filteredItems[index].getAttribute("id"); + var buttonEl = findSingle(filteredItems[index], '[type="button"]'); + buttonEl && focus(buttonEl); + } + }, "changeFocusedOptionIndex"), + findPrevOptionIndex: /* @__PURE__ */ __name(function findPrevOptionIndex5(index) { + var items2 = find(this.container, '[data-pc-section="item"]'); + var filteredItems = _toConsumableArray$3(items2).filter(function(item8) { + return !hasClass(findSingle(item8, "a"), "p-disabled"); + }); + var newIndex = index === -1 ? filteredItems[filteredItems.length - 1].id : index; + var matchedOptionIndex = filteredItems.findIndex(function(link) { + return link.getAttribute("id") === newIndex; + }); + matchedOptionIndex = index === -1 ? filteredItems.length - 1 : matchedOptionIndex - 1; + return matchedOptionIndex; + }, "findPrevOptionIndex"), + findNextOptionIndex: /* @__PURE__ */ __name(function findNextOptionIndex5(index) { + var items2 = find(this.container, '[data-pc-section="item"]'); + var filteredItems = _toConsumableArray$3(items2).filter(function(item8) { + return !hasClass(findSingle(item8, "a"), "p-disabled"); + }); + var newIndex = index === -1 ? filteredItems[0].id : index; + var matchedOptionIndex = filteredItems.findIndex(function(link) { + return link.getAttribute("id") === newIndex; + }); + matchedOptionIndex = index === -1 ? 0 : matchedOptionIndex + 1; + return matchedOptionIndex; + }, "findNextOptionIndex"), + calculatePointStyle: /* @__PURE__ */ __name(function calculatePointStyle(index) { + var type = this.type; + if (type !== "linear") { + var length = this.model.length; + var radius = this.radius || length * 20; + if (type === "circle") { + var step = 2 * Math_PI / length; + return { + left: "calc(".concat(radius * Math.cos(step * index), "px + ").concat($dt("item.diff.x", "0px").variable, ")"), + top: "calc(".concat(radius * Math.sin(step * index), "px + ").concat($dt("item.diff.y", "0px").variable, ")") + }; + } else if (type === "semi-circle") { + var direction = this.direction; + var _step = Math_PI / (length - 1); + var x = "calc(".concat(radius * Math.cos(_step * index), "px + ").concat($dt("item.diff.x", "0px").variable, ")"); + var y = "calc(".concat(radius * Math.sin(_step * index), "px + ").concat($dt("item.diff.y", "0px").variable, ")"); + if (direction === "up") { + return { + left: x, + bottom: y + }; + } else if (direction === "down") { + return { + left: x, + top: y + }; + } else if (direction === "left") { + return { + right: y, + top: x + }; + } else if (direction === "right") { + return { + left: y, + top: x + }; + } + } else if (type === "quarter-circle") { + var _direction = this.direction; + var _step2 = Math_PI / (2 * (length - 1)); + var _x = "calc(".concat(radius * Math.cos(_step2 * index), "px + ").concat($dt("item.diff.x", "0px").variable, ")"); + var _y = "calc(".concat(radius * Math.sin(_step2 * index), "px + ").concat($dt("item.diff.y", "0px").variable, ")"); + if (_direction === "up-left") { + return { + right: _x, + bottom: _y + }; + } else if (_direction === "up-right") { + return { + left: _x, + bottom: _y + }; + } else if (_direction === "down-left") { + return { + right: _y, + top: _x + }; + } else if (_direction === "down-right") { + return { + left: _y, + top: _x + }; + } + } + } + return {}; + }, "calculatePointStyle"), + getItemStyle: /* @__PURE__ */ __name(function getItemStyle(index) { + var transitionDelay = this.calculateTransitionDelay(index); + var pointStyle = this.calculatePointStyle(index); + return _objectSpread$7({ + transitionDelay: "".concat(transitionDelay, "ms") + }, pointStyle); + }, "getItemStyle"), + bindDocumentClickListener: /* @__PURE__ */ __name(function bindDocumentClickListener() { + var _this2 = this; + if (!this.documentClickListener) { + this.documentClickListener = function(event2) { + if (_this2.d_visible && _this2.isOutsideClicked(event2)) { + _this2.hide(); + } + _this2.isItemClicked = false; + }; + document.addEventListener("click", this.documentClickListener); + } + }, "bindDocumentClickListener"), + unbindDocumentClickListener: /* @__PURE__ */ __name(function unbindDocumentClickListener() { + if (this.documentClickListener) { + document.removeEventListener("click", this.documentClickListener); + this.documentClickListener = null; + } + }, "unbindDocumentClickListener"), + isOutsideClicked: /* @__PURE__ */ __name(function isOutsideClicked4(event2) { + return this.container && !(this.container.isSameNode(event2.target) || this.container.contains(event2.target) || this.isItemClicked); + }, "isOutsideClicked"), + isItemVisible: /* @__PURE__ */ __name(function isItemVisible6(item8) { + return typeof item8.visible === "function" ? item8.visible() : item8.visible !== false; + }, "isItemVisible"), + isItemActive: /* @__PURE__ */ __name(function isItemActive7(id4) { + return id4 === this.focusedOptionId; + }, "isItemActive"), + containerRef: /* @__PURE__ */ __name(function containerRef6(el) { + this.container = el; + }, "containerRef"), + listRef: /* @__PURE__ */ __name(function listRef3(el) { + this.list = el; + }, "listRef") + }, + computed: { + containerClass: /* @__PURE__ */ __name(function containerClass3() { + return [this.cx("root"), this["class"]]; + }, "containerClass"), + focusedOptionId: /* @__PURE__ */ __name(function focusedOptionId6() { + return this.focusedOptionIndex !== -1 ? this.focusedOptionIndex : null; + }, "focusedOptionId") + }, + components: { + Button: script$1e, + PlusIcon: script$1x + }, + directives: { + ripple: Ripple, + tooltip: Tooltip + } +}; +var _hoisted_1$a = ["id"]; +var _hoisted_2$7 = ["id", "data-p-active"]; +function render$b(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Button = resolveComponent("Button"); + var _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createElementBlock(Fragment, null, [createBaseVNode("div", mergeProps({ + ref: $options.containerRef, + "class": $options.containerClass, + style: [_ctx.style, _ctx.sx("root")] + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "button", { + visible: $data.d_visible, + toggleCallback: $options.onClick + }, function() { + return [createVNode(_component_Button, mergeProps({ + "class": [_ctx.cx("pcButton"), _ctx.buttonClass], + disabled: _ctx.disabled, + "aria-expanded": $data.d_visible, + "aria-haspopup": true, + "aria-controls": $data.id + "_list", + "aria-label": _ctx.ariaLabel, + "aria-labelledby": _ctx.ariaLabelledby, + unstyled: _ctx.unstyled, + onClick: _cache[0] || (_cache[0] = function($event) { + return $options.onClick($event); + }), + onKeydown: $options.onTogglerKeydown + }, _ctx.buttonProps, { + pt: _ctx.ptm("pcButton") + }), { + icon: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "icon", { + visible: $data.d_visible + }, function() { + return [$data.d_visible && !!_ctx.hideIcon ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.hideIcon ? "span" : "PlusIcon"), mergeProps({ + key: 0, + "class": [_ctx.hideIcon, slotProps["class"]] + }, _ctx.ptm("pcButton")["icon"], { + "data-pc-section": "icon" + }), null, 16, ["class"])) : (openBlock(), createBlock(resolveDynamicComponent(_ctx.showIcon ? "span" : "PlusIcon"), mergeProps({ + key: 1, + "class": [$data.d_visible && !!_ctx.hideIcon ? _ctx.hideIcon : _ctx.showIcon, slotProps["class"]] + }, _ctx.ptm("pcButton")["icon"], { + "data-pc-section": "icon" + }), null, 16, ["class"]))]; + })]; + }), + _: 3 + }, 16, ["class", "disabled", "aria-expanded", "aria-controls", "aria-label", "aria-labelledby", "unstyled", "onKeydown", "pt"])]; + }), createBaseVNode("ul", mergeProps({ + ref: $options.listRef, + id: $data.id + "_list", + "class": _ctx.cx("list"), + style: _ctx.sx("list"), + role: "menu", + tabindex: "-1", + onFocus: _cache[1] || (_cache[1] = function() { + return $options.onFocus && $options.onFocus.apply($options, arguments); + }), + onBlur: _cache[2] || (_cache[2] = function() { + return $options.onBlur && $options.onBlur.apply($options, arguments); + }), + onKeydown: _cache[3] || (_cache[3] = function() { + return $options.onKeyDown && $options.onKeyDown.apply($options, arguments); + }) + }, _ctx.ptm("list")), [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.model, function(item8, index) { + return openBlock(), createElementBlock(Fragment, { + key: index + }, [$options.isItemVisible(item8) ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + id: "".concat($data.id, "_").concat(index), + "class": _ctx.cx("item", { + id: "".concat($data.id, "_").concat(index) + }), + style: $options.getItemStyle(index), + role: "none", + "data-p-active": $options.isItemActive("".concat($data.id, "_").concat(index)), + ref_for: true + }, $options.getPTOptions("".concat($data.id, "_").concat(index), "item")), [!_ctx.$slots.item ? withDirectives((openBlock(), createBlock(_component_Button, mergeProps({ + key: 0, + tabindex: -1, + role: "menuitem", + "class": _ctx.cx("pcAction", { + item: item8 + }), + "aria-label": item8.label, + disabled: _ctx.disabled, + unstyled: _ctx.unstyled, + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onItemClick($event, item8); + }, "onClick"), + ref_for: true + }, _ctx.actionButtonProps, { + pt: $options.getPTOptions("".concat($data.id, "_").concat(index), "pcAction") + }), createSlots({ + _: 2 + }, [item8.icon ? { + name: "icon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "itemicon", { + item: item8, + "class": normalizeClass(slotProps["class"]) + }, function() { + return [createBaseVNode("span", mergeProps({ + "class": [item8.icon, slotProps["class"]], + ref_for: true + }, $options.getPTOptions("".concat($data.id, "_").concat(index), "actionIcon")), null, 16)]; + })]; + }), + key: "0" + } : void 0]), 1040, ["class", "aria-label", "disabled", "unstyled", "onClick", "pt"])), [[_directive_tooltip, { + value: item8.label, + disabled: !_ctx.tooltipOptions + }, _ctx.tooltipOptions]]) : (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.item), { + key: 1, + item: item8, + onClick: /* @__PURE__ */ __name(function onClick11(event2) { + return $options.onItemClick(event2, item8); + }, "onClick"), + toggleCallback: /* @__PURE__ */ __name(function toggleCallback(event2) { + return $options.onItemClick(event2, item8); + }, "toggleCallback") + }, null, 8, ["item", "onClick", "toggleCallback"]))], 16, _hoisted_2$7)) : createCommentVNode("", true)], 64); + }), 128))], 16, _hoisted_1$a)], 16), _ctx.mask ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": [_ctx.cx("mask"), _ctx.maskClass], + style: _ctx.maskStyle + }, _ctx.ptm("mask")), null, 16)) : createCommentVNode("", true)], 64); +} +__name(render$b, "render$b"); +script$c.render = render$b; +var classes$6 = { + root: /* @__PURE__ */ __name(function root29(_ref) { + var instance = _ref.instance; + return ["p-stepitem", { + "p-stepitem-active": instance.isActive + }]; + }, "root") +}; +var StepItemStyle = BaseStyle.extend({ + name: "stepitem", + classes: classes$6 +}); +var script$1$6 = { + name: "BaseStepItem", + "extends": script$1d, + props: { + value: { + type: [String, Number], + "default": void 0 + } + }, + style: StepItemStyle, + provide: /* @__PURE__ */ __name(function provide45() { + return { + $pcStepItem: this, + $parentInstance: this + }; + }, "provide") +}; +var script$b = { + name: "StepItem", + "extends": script$1$6, + inheritAttrs: false, + inject: ["$pcStepper"], + computed: { + isActive: /* @__PURE__ */ __name(function isActive() { + var _this$$pcStepper; + return ((_this$$pcStepper = this.$pcStepper) === null || _this$$pcStepper === void 0 ? void 0 : _this$$pcStepper.d_value) === this.value; + }, "isActive") + } +}; +var _hoisted_1$9 = ["data-p-active"]; +function render$a(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root"), + "data-p-active": $options.isActive + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1$9); +} +__name(render$a, "render$a"); +script$b.render = render$a; +var theme$5 = /* @__PURE__ */ __name(function theme35(_ref) { + var dt = _ref.dt; + return '\n.p-steps {\n position: relative;\n}\n\n.p-steps-list {\n padding: 0;\n margin: 0;\n list-style-type: none;\n display: flex;\n}\n\n.p-steps-item {\n position: relative;\n display: flex;\n justify-content: center;\n flex: 1 1 auto;\n}\n\n.p-steps-item.p-disabled,\n.p-steps-item.p-disabled * {\n opacity: 1;\n pointer-events: auto;\n user-select: auto;\n cursor: auto;\n}\n\n.p-steps-item:before {\n content: " ";\n border-top: 2px solid '.concat(dt("steps.separator.background"), ";\n width: 100%;\n top: 50%;\n left: 0;\n display: block;\n position: absolute;\n margin-top: calc(-1rem + 1px);\n}\n\n.p-steps-item:first-child::before {\n width: calc(50% + 1rem);\n transform: translateX(100%);\n}\n\n.p-steps-item:last-child::before {\n width: 50%;\n}\n\n.p-steps-item-link {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n overflow: hidden;\n text-decoration: none;\n transition: outline-color ").concat(dt("steps.transition.duration"), ", box-shadow ").concat(dt("steps.transition.duration"), ";\n border-radius: ").concat(dt("steps.item.link.border.radius"), ";\n outline-color: transparent;\n gap: ").concat(dt("steps.item.link.gap"), ";\n}\n\n.p-steps-item-link:not(.p-disabled):focus-visible {\n box-shadow: ").concat(dt("steps.item.link.focus.ring.shadow"), ";\n outline: ").concat(dt("steps.item.link.focus.ring.width"), " ").concat(dt("steps.item.link.focus.ring.style"), " ").concat(dt("steps.item.link.focus.ring.color"), ";\n outline-offset: ").concat(dt("steps.item.link.focus.ring.offset"), ";\n}\n\n.p-steps-item-label {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n color: ").concat(dt("steps.item.label.color"), ";\n display: block;\n font-weight: ").concat(dt("steps.item.label.font.weight"), ";\n}\n\n.p-steps-item-number {\n display: flex;\n align-items: center;\n justify-content: center;\n color: ").concat(dt("steps.item.number.color"), ";\n border: 2px solid ").concat(dt("steps.item.number.border.color"), ";\n background: ").concat(dt("steps.item.number.background"), ";\n min-width: ").concat(dt("steps.item.number.size"), ";\n height: ").concat(dt("steps.item.number.size"), ";\n line-height: ").concat(dt("steps.item.number.size"), ";\n font-size: ").concat(dt("steps.item.number.font.size"), ";\n z-index: 1;\n border-radius: ").concat(dt("steps.item.number.border.radius"), ";\n position: relative;\n font-weight: ").concat(dt("steps.item.number.font.weight"), ';\n}\n\n.p-steps-item-number::after {\n content: " ";\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: ').concat(dt("steps.item.number.border.radius"), ";\n box-shadow: ").concat(dt("steps.item.number.shadow"), ";\n}\n\n.p-steps:not(.p-readonly) .p-steps-item {\n cursor: pointer;\n}\n\n.p-steps-item-active .p-steps-item-number {\n background: ").concat(dt("steps.item.number.active.background"), ";\n border-color: ").concat(dt("steps.item.number.active.border.color"), ";\n color: ").concat(dt("steps.item.number.active.color"), ";\n}\n\n.p-steps-item-active .p-steps-item-label {\n color: ").concat(dt("steps.item.label.active.color"), ";\n}\n"); +}, "theme"); +var classes$5 = { + root: /* @__PURE__ */ __name(function root30(_ref2) { + var props = _ref2.props; + return ["p-steps p-component", { + "p-readonly": props.readonly + }]; + }, "root"), + list: "p-steps-list", + item: /* @__PURE__ */ __name(function item6(_ref3) { + var instance = _ref3.instance, _item = _ref3.item, index = _ref3.index; + return ["p-steps-item", { + "p-steps-item-active": instance.isActive(index), + "p-disabled": instance.isItemDisabled(_item, index) + }]; + }, "item"), + itemLink: "p-steps-item-link", + itemNumber: "p-steps-item-number", + itemLabel: "p-steps-item-label" +}; +var StepsStyle = BaseStyle.extend({ + name: "steps", + theme: theme$5, + classes: classes$5 +}); +var script$1$5 = { + name: "BaseSteps", + "extends": script$1d, + props: { + id: { + type: String + }, + model: { + type: Array, + "default": null + }, + readonly: { + type: Boolean, + "default": true + }, + activeStep: { + type: Number, + "default": 0 + } + }, + style: StepsStyle, + provide: /* @__PURE__ */ __name(function provide46() { + return { + $pcSteps: this, + $parentInstance: this + }; + }, "provide") +}; +var script$a = { + name: "Steps", + "extends": script$1$5, + inheritAttrs: false, + emits: ["update:activeStep", "step-change"], + data: /* @__PURE__ */ __name(function data33() { + return { + d_activeStep: this.activeStep + }; + }, "data"), + watch: { + activeStep: /* @__PURE__ */ __name(function activeStep(newValue) { + this.d_activeStep = newValue; + }, "activeStep") + }, + mounted: /* @__PURE__ */ __name(function mounted36() { + var firstItem = this.findFirstItem(); + firstItem && (firstItem.tabIndex = "0"); + }, "mounted"), + methods: { + getPTOptions: /* @__PURE__ */ __name(function getPTOptions11(key, item8, index) { + return this.ptm(key, { + context: { + item: item8, + index, + active: this.isActive(index), + disabled: this.isItemDisabled(item8, index) + } + }); + }, "getPTOptions"), + onItemClick: /* @__PURE__ */ __name(function onItemClick8(event2, item8, index) { + if (this.disabled(item8) || this.readonly) { + event2.preventDefault(); + return; + } + if (item8.command) { + item8.command({ + originalEvent: event2, + item: item8 + }); + } + if (index !== this.d_activeStep) { + this.d_activeStep = index; + this.$emit("update:activeStep", this.d_activeStep); + } + this.$emit("step-change", { + originalEvent: event2, + index + }); + }, "onItemClick"), + onItemKeydown: /* @__PURE__ */ __name(function onItemKeydown(event2, item8) { + switch (event2.code) { + case "ArrowRight": { + this.navigateToNextItem(event2.target); + event2.preventDefault(); + break; + } + case "ArrowLeft": { + this.navigateToPrevItem(event2.target); + event2.preventDefault(); + break; + } + case "Home": { + this.navigateToFirstItem(event2.target); + event2.preventDefault(); + break; + } + case "End": { + this.navigateToLastItem(event2.target); + event2.preventDefault(); + break; + } + case "Tab": + break; + case "Enter": + case "NumpadEnter": + case "Space": { + this.onItemClick(event2, item8); + event2.preventDefault(); + break; + } + } + }, "onItemKeydown"), + navigateToNextItem: /* @__PURE__ */ __name(function navigateToNextItem(target) { + var nextItem = this.findNextItem(target); + nextItem && this.setFocusToMenuitem(target, nextItem); + }, "navigateToNextItem"), + navigateToPrevItem: /* @__PURE__ */ __name(function navigateToPrevItem(target) { + var prevItem = this.findPrevItem(target); + prevItem && this.setFocusToMenuitem(target, prevItem); + }, "navigateToPrevItem"), + navigateToFirstItem: /* @__PURE__ */ __name(function navigateToFirstItem(target) { + var firstItem = this.findFirstItem(target); + firstItem && this.setFocusToMenuitem(target, firstItem); + }, "navigateToFirstItem"), + navigateToLastItem: /* @__PURE__ */ __name(function navigateToLastItem(target) { + var lastItem = this.findLastItem(target); + lastItem && this.setFocusToMenuitem(target, lastItem); + }, "navigateToLastItem"), + findNextItem: /* @__PURE__ */ __name(function findNextItem2(item8) { + var nextItem = item8.parentElement.nextElementSibling; + return nextItem ? nextItem.children[0] : null; + }, "findNextItem"), + findPrevItem: /* @__PURE__ */ __name(function findPrevItem2(item8) { + var prevItem = item8.parentElement.previousElementSibling; + return prevItem ? prevItem.children[0] : null; + }, "findPrevItem"), + findFirstItem: /* @__PURE__ */ __name(function findFirstItem2() { + var firstSibling = findSingle(this.$refs.list, '[data-pc-section="item"]'); + return firstSibling ? firstSibling.children[0] : null; + }, "findFirstItem"), + findLastItem: /* @__PURE__ */ __name(function findLastItem2() { + var siblings = find(this.$refs.list, '[data-pc-section="item"]'); + return siblings ? siblings[siblings.length - 1].children[0] : null; + }, "findLastItem"), + setFocusToMenuitem: /* @__PURE__ */ __name(function setFocusToMenuitem(target, focusableItem) { + target.tabIndex = "-1"; + focusableItem.tabIndex = "0"; + focusableItem.focus(); + }, "setFocusToMenuitem"), + isActive: /* @__PURE__ */ __name(function isActive2(index) { + return index === this.d_activeStep; + }, "isActive"), + isItemDisabled: /* @__PURE__ */ __name(function isItemDisabled6(item8, index) { + return this.disabled(item8) || this.readonly && !this.isActive(index); + }, "isItemDisabled"), + visible: /* @__PURE__ */ __name(function visible5(item8) { + return typeof item8.visible === "function" ? item8.visible() : item8.visible !== false; + }, "visible"), + disabled: /* @__PURE__ */ __name(function disabled5(item8) { + return typeof item8.disabled === "function" ? item8.disabled() : item8.disabled; + }, "disabled"), + label: /* @__PURE__ */ __name(function label8(item8) { + return typeof item8.label === "function" ? item8.label() : item8.label; + }, "label"), + getMenuItemProps: /* @__PURE__ */ __name(function getMenuItemProps7(item8, index) { + var _this = this; + return { + action: mergeProps({ + "class": this.cx("itemLink"), + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return _this.onItemClick($event, item8); + }, "onClick"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown15($event) { + return _this.onItemKeydown($event, item8); + }, "onKeyDown") + }, this.getPTOptions("itemLink", item8, index)), + step: mergeProps({ + "class": this.cx("itemNumber") + }, this.getPTOptions("itemNumber", item8, index)), + label: mergeProps({ + "class": this.cx("itemLabel") + }, this.getPTOptions("itemLabel", item8, index)) + }; + }, "getMenuItemProps") + } +}; +var _hoisted_1$8 = ["id"]; +var _hoisted_2$6 = ["aria-current", "onClick", "onKeydown", "data-p-active", "data-p-disabled"]; +function render$9(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("nav", mergeProps({ + id: _ctx.id, + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [createBaseVNode("ol", mergeProps({ + ref: "list", + "class": _ctx.cx("list") + }, _ctx.ptm("list")), [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.model, function(item8, index) { + return openBlock(), createElementBlock(Fragment, { + key: $options.label(item8) + "_" + index.toString() + }, [$options.visible(item8) ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + "class": [_ctx.cx("item", { + item: item8, + index + }), item8["class"]], + style: item8.style, + "aria-current": $options.isActive(index) ? "step" : void 0, + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onItemClick($event, item8, index); + }, "onClick"), + onKeydown: /* @__PURE__ */ __name(function onKeydown6($event) { + return $options.onItemKeydown($event, item8, index); + }, "onKeydown"), + ref_for: true + }, $options.getPTOptions("item", item8, index), { + "data-p-active": $options.isActive(index), + "data-p-disabled": $options.isItemDisabled(item8, index) + }), [!_ctx.$slots.item ? (openBlock(), createElementBlock("span", mergeProps({ + key: 0, + "class": _ctx.cx("itemLink"), + ref_for: true + }, $options.getPTOptions("itemLink", item8, index)), [createBaseVNode("span", mergeProps({ + "class": _ctx.cx("itemNumber"), + ref_for: true + }, $options.getPTOptions("itemNumber", item8, index)), toDisplayString(index + 1), 17), createBaseVNode("span", mergeProps({ + "class": _ctx.cx("itemLabel"), + ref_for: true + }, $options.getPTOptions("itemLabel", item8, index)), toDisplayString($options.label(item8)), 17)], 16)) : (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.item), { + key: 1, + item: item8, + index, + active: index === $data.d_activeStep, + label: $options.label(item8), + props: $options.getMenuItemProps(item8, index) + }, null, 8, ["item", "index", "active", "label", "props"]))], 16, _hoisted_2$6)) : createCommentVNode("", true)], 64); + }), 128))], 16)], 16, _hoisted_1$8); +} +__name(render$9, "render$9"); +script$a.render = render$9; +var StyleClassStyle = BaseStyle.extend({ + name: "styleclass-directive" +}); +var BaseStyleClass = BaseDirective.extend({ + style: StyleClassStyle +}); +var StyleClass = BaseStyleClass.extend("styleclass", { + mounted: /* @__PURE__ */ __name(function mounted37(el, binding) { + el.setAttribute("data-pd-styleclass", true); + this.bind(el, binding); + }, "mounted"), + unmounted: /* @__PURE__ */ __name(function unmounted5(el) { + this.unbind(el); + }, "unmounted"), + methods: { + bind: /* @__PURE__ */ __name(function bind(el, binding) { + var _this = this; + var target = this.resolveTarget(el, binding); + this.$el = target; + el.$_pstyleclass_clicklistener = function() { + if (binding.value.toggleClass) { + if (hasClass(target, binding.value.toggleClass)) removeClass(target, binding.value.toggleClass); + else addClass(target, binding.value.toggleClass); + } else { + if (target.offsetParent === null) _this.enter(target, el, binding); + else _this.leave(target, binding); + } + }; + el.addEventListener("click", el.$_pstyleclass_clicklistener); + }, "bind"), + unbind: /* @__PURE__ */ __name(function unbind(el) { + if (el.$_pstyleclass_clicklistener) { + el.removeEventListener("click", el.$_pstyleclass_clicklistener); + el.$_pstyleclass_clicklistener = null; + } + this.unbindDocumentListener(el); + }, "unbind"), + enter: /* @__PURE__ */ __name(function enter2(target, el, binding) { + if (binding.value.enterActiveClass) { + if (!target.$_pstyleclass_animating) { + target.$_pstyleclass_animating = true; + if (binding.value.enterActiveClass.includes("slidedown")) { + target.style.height = "0px"; + removeClass(target, binding.value.hiddenClass || binding.value.enterFromClass); + target.style.maxHeight = target.scrollHeight + "px"; + addClass(target, binding.value.hiddenClass || binding.value.enterActiveClass); + target.style.height = ""; + } + addClass(target, binding.value.enterActiveClass); + if (binding.value.enterFromClass) { + removeClass(target, binding.value.enterFromClass); + } + target.$p_styleclass_enterlistener = function() { + removeClass(target, binding.value.enterActiveClass); + if (binding.value.enterToClass) { + addClass(target, binding.value.enterToClass); + } + target.removeEventListener("animationend", target.$p_styleclass_enterlistener); + if (binding.value.enterActiveClass.includes("slidedown")) { + target.style.maxHeight = ""; + } + target.$_pstyleclass_animating = false; + }; + target.addEventListener("animationend", target.$p_styleclass_enterlistener); + } + } else { + if (binding.value.enterFromClass) { + removeClass(target, binding.value.enterFromClass); + } + if (binding.value.enterToClass) { + addClass(target, binding.value.enterToClass); + } + } + if (binding.value.hideOnOutsideClick) { + this.bindDocumentListener(target, el, binding); + } + }, "enter"), + leave: /* @__PURE__ */ __name(function leave2(target, binding) { + if (binding.value.leaveActiveClass) { + if (!target.$_pstyleclass_animating) { + target.$_pstyleclass_animating = true; + addClass(target, binding.value.leaveActiveClass); + if (binding.value.leaveFromClass) { + removeClass(target, binding.value.leaveFromClass); + } + target.$p_styleclass_leavelistener = function() { + removeClass(target, binding.value.leaveActiveClass); + if (binding.value.leaveToClass) { + addClass(target, binding.value.leaveToClass); + } + target.removeEventListener("animationend", target.$p_styleclass_leavelistener); + target.$_pstyleclass_animating = false; + }; + target.addEventListener("animationend", target.$p_styleclass_leavelistener); + } + } else { + if (binding.value.leaveFromClass) { + removeClass(target, binding.value.leaveFromClass); + } + if (binding.value.leaveToClass) { + addClass(target, binding.value.leaveToClass); + } + } + if (binding.value.hideOnOutsideClick) { + this.unbindDocumentListener(target); + } + }, "leave"), + resolveTarget: /* @__PURE__ */ __name(function resolveTarget(el, binding) { + switch (binding.value.selector) { + case "@next": + return el.nextElementSibling; + case "@prev": + return el.previousElementSibling; + case "@parent": + return el.parentElement; + case "@grandparent": + return el.parentElement.parentElement; + default: + return document.querySelector(binding.value.selector); + } + }, "resolveTarget"), + bindDocumentListener: /* @__PURE__ */ __name(function bindDocumentListener(target, el, binding) { + var _this2 = this; + if (!target.$p_styleclass_documentlistener) { + target.$p_styleclass_documentlistener = function(event2) { + if (!_this2.isVisible(target) || getComputedStyle(target).getPropertyValue("position") === "static") { + _this2.unbindDocumentListener(target); + } else if (_this2.isOutsideClick(event2, target, el)) { + _this2.leave(target, binding); + } + }; + target.ownerDocument.addEventListener("click", target.$p_styleclass_documentlistener); + } + }, "bindDocumentListener"), + unbindDocumentListener: /* @__PURE__ */ __name(function unbindDocumentListener(target) { + if (target.$p_styleclass_documentlistener) { + target.ownerDocument.removeEventListener("click", target.$p_styleclass_documentlistener); + target.$p_styleclass_documentlistener = null; + } + }, "unbindDocumentListener"), + isVisible: /* @__PURE__ */ __name(function isVisible(target) { + return target.offsetParent !== null; + }, "isVisible"), + isOutsideClick: /* @__PURE__ */ __name(function isOutsideClick(event2, target, el) { + return !el.isSameNode(event2.target) && !el.contains(event2.target) && !target.contains(event2.target); + }, "isOutsideClick") + } +}); +var theme$4 = /* @__PURE__ */ __name(function theme36(_ref) { + var dt = _ref.dt; + return "\n.p-tabmenu {\n overflow-x: auto;\n}\n\n.p-tabmenu-tablist {\n display: flex;\n margin: 0;\n padding: 0;\n list-style-type: none;\n background: ".concat(dt("tabmenu.tablist.background"), ";\n border-style: solid;\n border-color: ").concat(dt("tabmenu.tablist.border.color"), ";\n border-width: ").concat(dt("tabmenu.tablist.border.width"), ";\n position: relative;\n}\n\n.p-tabmenu-item-link {\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n text-decoration: none;\n position: relative;\n overflow: hidden;\n background: ").concat(dt("tabmenu.item.background"), ";\n border-style: solid;\n border-width: ").concat(dt("tabmenu.item.border.width"), ";\n border-color: ").concat(dt("tabmenu.item.border.color"), ";\n color: ").concat(dt("tabmenu.item.color"), ";\n padding: ").concat(dt("tabmenu.item.padding"), ";\n font-weight: ").concat(dt("tabmenu.item.font.weight"), ";\n transition: background ").concat(dt("tabmenu.transition.duration"), ", border-color ").concat(dt("tabmenu.transition.duration"), ", color ").concat(dt("tabmenu.transition.duration"), ", outline-color ").concat(dt("tabmenu.transition.duration"), ", box-shadow ").concat(dt("tabmenu.transition.duration"), ";\n margin: ").concat(dt("tabmenu.item.margin"), ";\n outline-color: transparent;\n gap: ").concat(dt("tabmenu.item.gap"), ";\n}\n\n.p-tabmenu-item-link:focus-visible {\n z-index: 1;\n box-shadow: ").concat(dt("tabmenu.item.focus.ring.shadow"), ";\n outline: ").concat(dt("tabmenu.item.focus.ring.width"), " ").concat(dt("tabmenu.item.focus.ring.style"), " ").concat(dt("tabmenu.item.focus.ring.color"), ";\n outline-offset: ").concat(dt("tabmenu.item.focus.ring.offset"), ";\n}\n\n.p-tabmenu-item-icon {\n color: ").concat(dt("tabmenu.item.icon.color"), ";\n transition: background ").concat(dt("tabmenu.transition.duration"), ", border-color ").concat(dt("tabmenu.transition.duration"), ", color ").concat(dt("tabmenu.transition.duration"), ", outline-color ").concat(dt("tabmenu.transition.duration"), ", box-shadow ").concat(dt("tabmenu.transition.duration"), ";\n}\n\n.p-tabmenu-item-label {\n line-height: 1;\n}\n\n.p-tabmenu-item:not(.p-tabmenu-item-active):not(.p-disabled):hover .p-tabmenu-item-link {\n background: ").concat(dt("tabmenu.item.hover.background"), ";\n border-color: ").concat(dt("tabmenu.item.hover.border.color"), ";\n color: ").concat(dt("tabmenu.item.hover.color"), ";\n}\n\n.p-tabmenu-item:not(.p-tabmenu-item-active):not(.p-disabled):hover .p-tabmenu-item-icon {\n color: ").concat(dt("tabmenu.item.icon.hover.color"), ";\n}\n\n.p-tabmenu-item-active .p-tabmenu-item-link {\n background: ").concat(dt("tabmenu.item.active.background"), ";\n border-color: ").concat(dt("tabmenu.item.active.border.color"), ";\n color: ").concat(dt("tabmenu.item.active.color"), ";\n}\n\n.p-tabmenu-item-active .p-tabmenu-item-icon {\n color: ").concat(dt("tabmenu.item.icon.active.color"), ";\n}\n\n.p-tabmenu-active-bar {\n z-index: 1;\n display: block;\n position: absolute;\n bottom: ").concat(dt("tabmenu.active.bar.bottom"), ";\n height: ").concat(dt("tabmenu.active.bar.height"), ";\n background: ").concat(dt("tabmenu.active.bar.background"), ";\n transition: 250ms cubic-bezier(0.35, 0, 0.25, 1);\n}\n\n.p-tabmenu::-webkit-scrollbar {\n display: none;\n}\n"); +}, "theme"); +var classes$4 = { + root: "p-tabmenu p-component", + tablist: "p-tabmenu-tablist", + item: /* @__PURE__ */ __name(function item7(_ref2) { + var instance = _ref2.instance, index = _ref2.index, _item = _ref2.item; + return ["p-tabmenu-item", { + "p-tabmenu-item-active": instance.d_activeIndex === index, + "p-disabled": instance.disabled(_item) + }]; + }, "item"), + itemLink: "p-tabmenu-item-link", + itemIcon: "p-tabmenu-item-icon", + itemLabel: "p-tabmenu-item-label", + activeBar: "p-tabmenu-active-bar" +}; +var TabMenuStyle = BaseStyle.extend({ + name: "tabmenu", + theme: theme$4, + classes: classes$4 +}); +var script$1$4 = { + name: "BaseTabMenu", + "extends": script$1d, + props: { + model: { + type: Array, + "default": null + }, + activeIndex: { + type: Number, + "default": 0 + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + } + }, + style: TabMenuStyle, + provide: /* @__PURE__ */ __name(function provide47() { + return { + $pcTabMenu: this, + $parentInstance: this + }; + }, "provide") +}; +var script$9 = { + name: "TabMenu", + "extends": script$1$4, + inheritAttrs: false, + emits: ["update:activeIndex", "tab-change"], + data: /* @__PURE__ */ __name(function data34() { + return { + d_activeIndex: this.activeIndex + }; + }, "data"), + watch: { + activeIndex: { + flush: "post", + handler: /* @__PURE__ */ __name(function handler3(newValue) { + this.d_activeIndex = newValue; + this.updateInkBar(); + }, "handler") + } + }, + mounted: /* @__PURE__ */ __name(function mounted38() { + var _this = this; + this.$nextTick(function() { + _this.updateInkBar(); + }); + var activeItem2 = this.findActiveItem(); + activeItem2 && (activeItem2.tabIndex = "0"); + }, "mounted"), + updated: /* @__PURE__ */ __name(function updated8() { + this.updateInkBar(); + }, "updated"), + methods: { + getPTOptions: /* @__PURE__ */ __name(function getPTOptions12(key, item8, index) { + return this.ptm(key, { + context: { + item: item8, + index + } + }); + }, "getPTOptions"), + onItemClick: /* @__PURE__ */ __name(function onItemClick9(event2, item8, index) { + if (this.disabled(item8)) { + event2.preventDefault(); + return; + } + if (item8.command) { + item8.command({ + originalEvent: event2, + item: item8 + }); + } + if (index !== this.d_activeIndex) { + this.d_activeIndex = index; + this.$emit("update:activeIndex", this.d_activeIndex); + } + this.$emit("tab-change", { + originalEvent: event2, + index + }); + }, "onItemClick"), + onKeydownItem: /* @__PURE__ */ __name(function onKeydownItem(event2, item8, index) { + switch (event2.code) { + case "ArrowRight": { + this.navigateToNextItem(event2.target); + event2.preventDefault(); + break; + } + case "ArrowLeft": { + this.navigateToPrevItem(event2.target); + event2.preventDefault(); + break; + } + case "Home": { + this.navigateToFirstItem(event2.target); + event2.preventDefault(); + break; + } + case "End": { + this.navigateToLastItem(event2.target); + event2.preventDefault(); + break; + } + case "Space": + case "NumpadEnter": + case "Enter": { + this.onItemClick(event2, item8, index); + event2.preventDefault(); + break; + } + case "Tab": { + this.onTabKey(); + break; + } + } + }, "onKeydownItem"), + navigateToNextItem: /* @__PURE__ */ __name(function navigateToNextItem2(target) { + var nextItem = this.findNextItem(target); + nextItem && this.setFocusToMenuitem(target, nextItem); + }, "navigateToNextItem"), + navigateToPrevItem: /* @__PURE__ */ __name(function navigateToPrevItem2(target) { + var prevItem = this.findPrevItem(target); + prevItem && this.setFocusToMenuitem(target, prevItem); + }, "navigateToPrevItem"), + navigateToFirstItem: /* @__PURE__ */ __name(function navigateToFirstItem2(target) { + var firstItem = this.findFirstItem(target); + firstItem && this.setFocusToMenuitem(target, firstItem); + }, "navigateToFirstItem"), + navigateToLastItem: /* @__PURE__ */ __name(function navigateToLastItem2(target) { + var lastItem = this.findLastItem(target); + lastItem && this.setFocusToMenuitem(target, lastItem); + }, "navigateToLastItem"), + findNextItem: /* @__PURE__ */ __name(function findNextItem3(item8) { + var nextItem = item8.parentElement.nextElementSibling; + return nextItem ? getAttribute(nextItem, "data-p-disabled") === true ? this.findNextItem(nextItem.children[0]) : nextItem.children[0] : null; + }, "findNextItem"), + findPrevItem: /* @__PURE__ */ __name(function findPrevItem3(item8) { + var prevItem = item8.parentElement.previousElementSibling; + return prevItem ? getAttribute(prevItem, "data-p-disabled") === true ? this.findPrevItem(prevItem.children[0]) : prevItem.children[0] : null; + }, "findPrevItem"), + findFirstItem: /* @__PURE__ */ __name(function findFirstItem3() { + var firstSibling = findSingle(this.$refs.nav, '[data-pc-section="item"][data-p-disabled="false"]'); + return firstSibling ? firstSibling.children[0] : null; + }, "findFirstItem"), + findLastItem: /* @__PURE__ */ __name(function findLastItem3() { + var siblings = find(this.$refs.nav, '[data-pc-section="item"][data-p-disabled="false"]'); + return siblings ? siblings[siblings.length - 1].children[0] : null; + }, "findLastItem"), + findActiveItem: /* @__PURE__ */ __name(function findActiveItem() { + var activeItem2 = findSingle(this.$refs.nav, '[data-pc-section="item"][data-p-disabled="false"][data-p-active="true"]'); + return activeItem2 ? activeItem2.children[0] : null; + }, "findActiveItem"), + setFocusToMenuitem: /* @__PURE__ */ __name(function setFocusToMenuitem2(target, focusableItem) { + target.tabIndex = "-1"; + focusableItem.tabIndex = "0"; + focusableItem.focus(); + }, "setFocusToMenuitem"), + onTabKey: /* @__PURE__ */ __name(function onTabKey4() { + var activeItem2 = findSingle(this.$refs.nav, '[data-pc-section="item"][data-p-disabled="false"][data-p-active="true"]'); + var focusedItem = findSingle(this.$refs.nav, '[data-pc-section="itemlink"][tabindex="0"]'); + if (focusedItem !== activeItem2.children[0]) { + activeItem2 && (activeItem2.children[0].tabIndex = "0"); + focusedItem.tabIndex = "-1"; + } + }, "onTabKey"), + visible: /* @__PURE__ */ __name(function visible6(item8) { + return typeof item8.visible === "function" ? item8.visible() : item8.visible !== false; + }, "visible"), + disabled: /* @__PURE__ */ __name(function disabled6(item8) { + return typeof item8.disabled === "function" ? item8.disabled() : item8.disabled === true; + }, "disabled"), + label: /* @__PURE__ */ __name(function label9(item8) { + return typeof item8.label === "function" ? item8.label() : item8.label; + }, "label"), + updateInkBar: /* @__PURE__ */ __name(function updateInkBar() { + var tabs2 = this.$refs.nav.children; + var inkHighlighted = false; + for (var i = 0; i < tabs2.length; i++) { + var tab = tabs2[i]; + if (getAttribute(tab, "data-p-active")) { + this.$refs.inkbar.style.width = getWidth(tab) + "px"; + this.$refs.inkbar.style.left = getOffset(tab).left - getOffset(this.$refs.nav).left + "px"; + inkHighlighted = true; + } + } + if (!inkHighlighted) { + this.$refs.inkbar.style.width = "0px"; + this.$refs.inkbar.style.left = "0px"; + } + }, "updateInkBar"), + getMenuItemProps: /* @__PURE__ */ __name(function getMenuItemProps8(item8, index) { + var _this2 = this; + return { + action: mergeProps({ + "class": this.cx("itemLink"), + tabindex: -1, + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return _this2.onItemClick($event, item8, index); + }, "onClick"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown15($event) { + return _this2.onKeydownItem($event, item8, index); + }, "onKeyDown") + }, this.getPTOptions("itemLink", item8, index)), + icon: mergeProps({ + "class": [this.cx("itemIcon"), item8.icon] + }, this.getPTOptions("itemIcon", item8, index)), + label: mergeProps({ + "class": this.cx("itemLabel") + }, this.getPTOptions("itemLabel", item8, index)) + }; + }, "getMenuItemProps") + }, + directives: { + ripple: Ripple + } +}; +var _hoisted_1$7 = ["aria-labelledby", "aria-label"]; +var _hoisted_2$5 = ["onClick", "onKeydown", "data-p-active", "data-p-disabled"]; +var _hoisted_3$5 = ["href", "target", "aria-label", "aria-disabled"]; +function render$8(_ctx, _cache, $props, $setup, $data, $options) { + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [createBaseVNode("ul", mergeProps({ + ref: "nav", + "class": _ctx.cx("tablist"), + role: "menubar", + "aria-labelledby": _ctx.ariaLabelledby, + "aria-label": _ctx.ariaLabel + }, _ctx.ptm("tablist")), [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.model, function(item8, i) { + return openBlock(), createElementBlock(Fragment, { + key: $options.label(item8) + "_" + i.toString() + }, [$options.visible(item8) ? (openBlock(), createElementBlock("li", mergeProps({ + key: 0, + ref_for: true, + ref: "tab", + "class": [_ctx.cx("item", { + item: item8, + index: i + }), item8["class"]], + role: "presentation", + onClick: /* @__PURE__ */ __name(function onClick11($event) { + return $options.onItemClick($event, item8, i); + }, "onClick"), + onKeydown: /* @__PURE__ */ __name(function onKeydown6($event) { + return $options.onKeydownItem($event, item8, i); + }, "onKeydown") + }, $options.getPTOptions("item", item8, i), { + "data-p-active": $data.d_activeIndex === i, + "data-p-disabled": $options.disabled(item8) + }), [!_ctx.$slots.item ? withDirectives((openBlock(), createElementBlock("a", mergeProps({ + key: 0, + ref_for: true, + ref: "tabLink", + role: "menuitem", + href: item8.url, + "class": _ctx.cx("itemLink"), + target: item8.target, + "aria-label": $options.label(item8), + "aria-disabled": $options.disabled(item8), + tabindex: -1 + }, $options.getPTOptions("itemLink", item8, i)), [_ctx.$slots.itemicon ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.itemicon), { + key: 0, + item: item8, + "class": normalizeClass(_ctx.cx("itemIcon")) + }, null, 8, ["item", "class"])) : item8.icon ? (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + "class": [_ctx.cx("itemIcon"), item8.icon], + ref_for: true + }, $options.getPTOptions("itemIcon", item8, i)), null, 16)) : createCommentVNode("", true), createBaseVNode("span", mergeProps({ + "class": _ctx.cx("itemLabel"), + ref_for: true + }, $options.getPTOptions("itemLabel", item8, i)), toDisplayString($options.label(item8)), 17)], 16, _hoisted_3$5)), [[_directive_ripple]]) : (openBlock(), createBlock(resolveDynamicComponent(_ctx.$slots.item), { + key: 1, + item: item8, + index: i, + active: i === $data.d_activeIndex, + label: $options.label(item8), + props: $options.getMenuItemProps(item8, i) + }, null, 8, ["item", "index", "active", "label", "props"]))], 16, _hoisted_2$5)) : createCommentVNode("", true)], 64); + }), 128)), createBaseVNode("li", mergeProps({ + ref: "inkbar", + role: "none", + "class": _ctx.cx("activeBar") + }, _ctx.ptm("activeBar")), null, 16)], 16, _hoisted_1$7)], 16); +} +__name(render$8, "render$8"); +script$9.render = render$8; +var TerminalService = EventBus(); +var theme$3 = /* @__PURE__ */ __name(function theme37(_ref) { + var dt = _ref.dt; + return "\n.p-terminal {\n height: ".concat(dt("terminal.height"), ";\n overflow: auto;\n background: ").concat(dt("terminal.background"), ";\n color: ").concat(dt("terminal.color"), ";\n border: 1px solid ").concat(dt("terminal.border.color"), ";\n padding: ").concat(dt("terminal.padding"), ";\n border-radius: ").concat(dt("terminal.border.radius"), ";\n}\n\n.p-terminal-prompt {\n display: flex;\n align-items: center;\n}\n\n.p-terminal-prompt-value {\n flex: 1 1 auto;\n border: 0 none;\n background: transparent;\n color: inherit;\n padding: 0;\n outline: 0 none;\n font-family: inherit;\n font-feature-settings: inherit;\n font-size: 1rem;\n}\n\n.p-terminal-prompt-label {\n margin-inline-end: ").concat(dt("terminal.prompt.gap"), ";\n}\n\n.p-terminal-input::-ms-clear {\n display: none;\n}\n\n.p-terminal-command-response {\n margin: ").concat(dt("terminal.command.response.margin"), ";\n}\n"); +}, "theme"); +var classes$3 = { + root: "p-terminal p-component", + welcomeMessage: "p-terminal-welcome-message", + commandList: "p-terminal-command-list", + command: "p-terminal-command", + commandValue: "p-terminal-command-value", + commandResponse: "p-terminal-command-response", + prompt: "p-terminal-prompt", + promptLabel: "p-terminal-prompt-label", + promptValue: "p-terminal-prompt-value" +}; +var TerminalStyle = BaseStyle.extend({ + name: "terminal", + theme: theme$3, + classes: classes$3 +}); +var script$1$3 = { + name: "BaseTerminal", + "extends": script$1d, + props: { + welcomeMessage: { + type: String, + "default": null + }, + prompt: { + type: String, + "default": null + } + }, + style: TerminalStyle, + provide: /* @__PURE__ */ __name(function provide48() { + return { + $pcTerminal: this, + $parentInstance: this + }; + }, "provide") +}; +var script$8 = { + name: "Terminal", + "extends": script$1$3, + inheritAttrs: false, + data: /* @__PURE__ */ __name(function data35() { + return { + commandText: null, + commands: [] + }; + }, "data"), + mounted: /* @__PURE__ */ __name(function mounted39() { + TerminalService.on("response", this.responseListener); + this.$refs.input.focus(); + }, "mounted"), + updated: /* @__PURE__ */ __name(function updated9() { + this.$el.scrollTop = this.$el.scrollHeight; + }, "updated"), + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount16() { + TerminalService.off("response", this.responseListener); + }, "beforeUnmount"), + methods: { + onClick: /* @__PURE__ */ __name(function onClick7() { + this.$refs.input.focus(); + }, "onClick"), + onKeydown: /* @__PURE__ */ __name(function onKeydown5(event2) { + if (event2.key === "Enter" && this.commandText) { + this.commands.push({ + text: this.commandText + }); + TerminalService.emit("command", this.commandText); + this.commandText = ""; + } + }, "onKeydown"), + responseListener: /* @__PURE__ */ __name(function responseListener(response) { + this.commands[this.commands.length - 1].response = response; + }, "responseListener") + } +}; +function render$7(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root"), + onClick: _cache[2] || (_cache[2] = function() { + return $options.onClick && $options.onClick.apply($options, arguments); + }) + }, _ctx.ptmi("root")), [_ctx.welcomeMessage ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("welcomeMessage") + }, _ctx.ptm("welcomeMessage")), toDisplayString(_ctx.welcomeMessage), 17)) : createCommentVNode("", true), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("commandList") + }, _ctx.ptm("content")), [(openBlock(true), createElementBlock(Fragment, null, renderList($data.commands, function(command, i) { + return openBlock(), createElementBlock("div", mergeProps({ + key: command.text + i.toString(), + "class": _ctx.cx("command"), + ref_for: true + }, _ctx.ptm("commands")), [createBaseVNode("span", mergeProps({ + "class": _ctx.cx("promptLabel"), + ref_for: true + }, _ctx.ptm("prompt")), toDisplayString(_ctx.prompt), 17), createBaseVNode("span", mergeProps({ + "class": _ctx.cx("commandValue"), + ref_for: true + }, _ctx.ptm("command")), toDisplayString(command.text), 17), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("commandResponse"), + "aria-live": "polite", + ref_for: true + }, _ctx.ptm("response")), toDisplayString(command.response), 17)], 16); + }), 128))], 16), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("prompt") + }, _ctx.ptm("container")), [createBaseVNode("span", mergeProps({ + "class": _ctx.cx("promptLabel") + }, _ctx.ptm("prompt")), toDisplayString(_ctx.prompt), 17), withDirectives(createBaseVNode("input", mergeProps({ + ref: "input", + "onUpdate:modelValue": _cache[0] || (_cache[0] = function($event) { + return $data.commandText = $event; + }), + "class": _ctx.cx("promptValue"), + type: "text", + autocomplete: "off", + onKeydown: _cache[1] || (_cache[1] = function() { + return $options.onKeydown && $options.onKeydown.apply($options, arguments); + }) + }, _ctx.ptm("commandText")), null, 16), [[vModelText, $data.commandText]])], 16)], 16); +} +__name(render$7, "render$7"); +script$8.render = render$7; +var theme$2 = /* @__PURE__ */ __name(function theme38(_ref) { + var dt = _ref.dt; + return "\n.p-timeline {\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n direction: ltr;\n}\n\n.p-timeline-left .p-timeline-event-opposite {\n text-align: right;\n}\n\n.p-timeline-left .p-timeline-event-content {\n text-align: left;\n}\n\n.p-timeline-right .p-timeline-event {\n flex-direction: row-reverse;\n}\n\n.p-timeline-right .p-timeline-event-opposite {\n text-align: left;\n}\n\n.p-timeline-right .p-timeline-event-content {\n text-align: right;\n}\n\n.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) {\n flex-direction: row-reverse;\n}\n\n.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(odd) .p-timeline-event-opposite {\n text-align: right;\n}\n\n.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(odd) .p-timeline-event-content {\n text-align: left;\n}\n\n.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) .p-timeline-event-opposite {\n text-align: left;\n}\n\n.p-timeline-vertical.p-timeline-alternate .p-timeline-event:nth-child(even) .p-timeline-event-content {\n text-align: right;\n}\n\n.p-timeline-vertical .p-timeline-event-opposite,\n.p-timeline-vertical .p-timeline-event-content {\n padding: ".concat(dt("timeline.vertical.event.content.padding"), ";\n}\n\n.p-timeline-vertical .p-timeline-event-connector {\n width: ").concat(dt("timeline.event.connector.size"), ";\n}\n\n.p-timeline-event {\n display: flex;\n position: relative;\n min-height: ").concat(dt("timeline.event.min.height"), ";\n}\n\n.p-timeline-event:last-child {\n min-height: 0;\n}\n\n.p-timeline-event-opposite {\n flex: 1;\n}\n\n.p-timeline-event-content {\n flex: 1;\n}\n\n.p-timeline-event-separator {\n flex: 0;\n display: flex;\n align-items: center;\n flex-direction: column;\n}\n\n.p-timeline-event-marker {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n align-self: baseline;\n border-width: ").concat(dt("timeline.event.marker.border.width"), ";\n border-style: solid;\n border-color: ").concat(dt("timeline.event.marker.border.color"), ";\n border-radius: ").concat(dt("timeline.event.marker.border.radius"), ";\n width: ").concat(dt("timeline.event.marker.size"), ";\n height: ").concat(dt("timeline.event.marker.size"), ";\n background: ").concat(dt("timeline.event.marker.background"), ';\n}\n\n.p-timeline-event-marker::before {\n content: " ";\n border-radius: ').concat(dt("timeline.event.marker.content.border.radius"), ";\n width: ").concat(dt("timeline.event.marker.content.size"), ";\n height:").concat(dt("timeline.event.marker.content.size"), ";\n background: ").concat(dt("timeline.event.marker.content.background"), ';\n}\n\n.p-timeline-event-marker::after {\n content: " ";\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: ').concat(dt("timeline.event.marker.border.radius"), ";\n box-shadow: ").concat(dt("timeline.event.marker.content.inset.shadow"), ";\n}\n\n.p-timeline-event-connector {\n flex-grow: 1;\n background: ").concat(dt("timeline.event.connector.color"), ";\n}\n\n.p-timeline-horizontal {\n flex-direction: row;\n}\n\n.p-timeline-horizontal .p-timeline-event {\n flex-direction: column;\n flex: 1;\n}\n\n.p-timeline-horizontal .p-timeline-event:last-child {\n flex: 0;\n}\n\n.p-timeline-horizontal .p-timeline-event-separator {\n flex-direction: row;\n}\n\n.p-timeline-horizontal .p-timeline-event-connector {\n width: 100%;\n height: ").concat(dt("timeline.event.connector.size"), ";\n}\n\n.p-timeline-horizontal .p-timeline-event-opposite,\n.p-timeline-horizontal .p-timeline-event-content {\n padding: ").concat(dt("timeline.horizontal.event.content.padding"), ";\n}\n\n.p-timeline-horizontal.p-timeline-alternate .p-timeline-event:nth-child(even) {\n flex-direction: column-reverse;\n}\n\n.p-timeline-bottom .p-timeline-event {\n flex-direction: column-reverse;\n}\n"); +}, "theme"); +var classes$2 = { + root: /* @__PURE__ */ __name(function root31(_ref2) { + var props = _ref2.props; + return ["p-timeline p-component", "p-timeline-" + props.align, "p-timeline-" + props.layout]; + }, "root"), + event: "p-timeline-event", + eventOpposite: "p-timeline-event-opposite", + eventSeparator: "p-timeline-event-separator", + eventMarker: "p-timeline-event-marker", + eventConnector: "p-timeline-event-connector", + eventContent: "p-timeline-event-content" +}; +var TimelineStyle = BaseStyle.extend({ + name: "timeline", + theme: theme$2, + classes: classes$2 +}); +var script$1$2 = { + name: "BaseTimeline", + "extends": script$1d, + props: { + value: null, + align: { + mode: String, + "default": "left" + }, + layout: { + mode: String, + "default": "vertical" + }, + dataKey: null + }, + style: TimelineStyle, + provide: /* @__PURE__ */ __name(function provide49() { + return { + $pcTimeline: this, + $parentInstance: this + }; + }, "provide") +}; +var script$7 = { + name: "Timeline", + "extends": script$1$2, + inheritAttrs: false, + methods: { + getKey: /* @__PURE__ */ __name(function getKey3(item8, index) { + return this.dataKey ? resolveFieldData(item8, this.dataKey) : index; + }, "getKey"), + getPTOptions: /* @__PURE__ */ __name(function getPTOptions13(key, index) { + return this.ptm(key, { + context: { + index, + count: this.value.length + } + }); + }, "getPTOptions") + } +}; +function render$6(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root") + }, _ctx.ptmi("root")), [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.value, function(item8, index) { + return openBlock(), createElementBlock("div", mergeProps({ + key: $options.getKey(item8, index), + "class": _ctx.cx("event"), + ref_for: true + }, $options.getPTOptions("event", index)), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("eventOpposite", { + index + }), + ref_for: true + }, $options.getPTOptions("eventOpposite", index)), [renderSlot(_ctx.$slots, "opposite", { + item: item8, + index + })], 16), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("eventSeparator"), + ref_for: true + }, $options.getPTOptions("eventSeparator", index)), [renderSlot(_ctx.$slots, "marker", { + item: item8, + index + }, function() { + return [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("eventMarker"), + ref_for: true + }, $options.getPTOptions("eventMarker", index)), null, 16)]; + }), index !== _ctx.value.length - 1 ? renderSlot(_ctx.$slots, "connector", { + key: 0, + item: item8, + index + }, function() { + return [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("eventConnector"), + ref_for: true + }, $options.getPTOptions("eventConnector", index)), null, 16)]; + }) : createCommentVNode("", true)], 16), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("eventContent"), + ref_for: true + }, $options.getPTOptions("eventContent", index)), [renderSlot(_ctx.$slots, "content", { + item: item8, + index + })], 16)], 16); + }), 128))], 16); +} +__name(render$6, "render$6"); +script$7.render = render$6; +var theme$1 = /* @__PURE__ */ __name(function theme39(_ref) { + var dt = _ref.dt; + return "\n.p-treeselect {\n display: inline-flex;\n cursor: pointer;\n position: relative;\n user-select: none;\n background: ".concat(dt("treeselect.background"), ";\n border: 1px solid ").concat(dt("treeselect.border.color"), ";\n transition: background ").concat(dt("treeselect.transition.duration"), ", color ").concat(dt("treeselect.transition.duration"), ", border-color ").concat(dt("treeselect.transition.duration"), ", outline-color ").concat(dt("treeselect.transition.duration"), ", box-shadow ").concat(dt("treeselect.transition.duration"), ";\n border-radius: ").concat(dt("treeselect.border.radius"), ";\n outline-color: transparent;\n box-shadow: ").concat(dt("treeselect.shadow"), ";\n}\n\n.p-treeselect:not(.p-disabled):hover {\n border-color: ").concat(dt("treeselect.hover.border.color"), ";\n}\n\n.p-treeselect:not(.p-disabled).p-focus {\n border-color: ").concat(dt("treeselect.focus.border.color"), ";\n box-shadow: ").concat(dt("treeselect.focus.ring.shadow"), ";\n outline: ").concat(dt("treeselect.focus.ring.width"), " ").concat(dt("treeselect.focus.ring.style"), " ").concat(dt("treeselect.focus.ring.color"), ";\n outline-offset: ").concat(dt("treeselect.focus.ring.offset"), ";\n}\n\n.p-treeselect.p-variant-filled {\n background: ").concat(dt("treeselect.filled.background"), ";\n}\n\n.p-treeselect.p-variant-filled:not(.p-disabled):hover {\n background: ").concat(dt("treeselect.filled.hover.background"), ";\n}\n\n.p-treeselect.p-variant-filled.p-focus {\n background: ").concat(dt("treeselect.filled.focus.background"), ";\n}\n\n.p-treeselect.p-invalid {\n border-color: ").concat(dt("treeselect.invalid.border.color"), ";\n}\n\n.p-treeselect.p-disabled {\n opacity: 1;\n background: ").concat(dt("treeselect.disabled.background"), ";\n}\n\n.p-treeselect-clear-icon {\n position: absolute;\n top: 50%;\n margin-top: -0.5rem;\n color: ").concat(dt("treeselect.clear.icon.color"), ";\n inset-inline-end: ").concat(dt("treeselect.dropdown.width"), ";\n}\n\n.p-treeselect-dropdown {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: transparent;\n color: ").concat(dt("treeselect.dropdown.color"), ";\n width: ").concat(dt("treeselect.dropdown.width"), ";\n border-start-end-radius: ").concat(dt("border.radius.md"), ";\n border-end-end-radius: ").concat(dt("border.radius.md"), ";\n}\n\n.p-treeselect-label-container {\n overflow: hidden;\n flex: 1 1 auto;\n cursor: pointer;\n}\n\n.p-treeselect-label {\n display: flex;\n align-items: center;\n gap: calc(").concat(dt("treeselect.padding.y"), " / 2);\n white-space: nowrap;\n cursor: pointer;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: ").concat(dt("treeselect.padding.y"), " ").concat(dt("treeselect.padding.x"), ";\n color: ").concat(dt("treeselect.color"), ";\n}\n\n.p-treeselect-label.p-placeholder {\n color: ").concat(dt("treeselect.placeholder.color"), ";\n}\n\n.p-treeselect.p-invalid .p-treeselect-label.p-placeholder {\n color: ").concat(dt("treeselect.invalid.placeholder.color"), ";\n}\n\n.p-treeselect.p-disabled .p-treeselect-label {\n color: ").concat(dt("treeselect.disabled.color"), ";\n}\n\n.p-treeselect-label-empty {\n overflow: hidden;\n visibility: hidden;\n}\n\n.p-treeselect .p-treeselect-overlay {\n min-width: 100%;\n}\n\n.p-treeselect-overlay {\n position: absolute;\n top: 0;\n left: 0;\n background: ").concat(dt("treeselect.overlay.background"), ";\n color: ").concat(dt("treeselect.overlay.color"), ";\n border: 1px solid ").concat(dt("treeselect.overlay.border.color"), ";\n border-radius: ").concat(dt("treeselect.overlay.border.radius"), ";\n box-shadow: ").concat(dt("treeselect.overlay.shadow"), ";\n overflow: hidden;\n}\n\n.p-treeselect-tree-container {\n overflow: auto;\n}\n\n.p-treeselect-empty-message {\n padding: ").concat(dt("treeselect.empty.message.padding"), ";\n background: transparent;\n}\n\n.p-treeselect-fluid {\n display: flex;\n}\n\n.p-treeselect-overlay .p-tree {\n padding: ").concat(dt("treeselect.tree.padding"), ";\n}\n\n.p-treeselect-overlay .p-tree-loading {\n min-height: 3rem;\n}\n\n.p-treeselect-label .p-chip {\n padding-block-start: calc(").concat(dt("treeselect.padding.y"), " / 2);\n padding-block-end: calc(").concat(dt("treeselect.padding.y"), " / 2);\n border-radius: ").concat(dt("treeselect.chip.border.radius"), ";\n}\n\n.p-treeselect-label:has(.p-chip) {\n padding: calc(").concat(dt("treeselect.padding.y"), " / 2) calc(").concat(dt("treeselect.padding.x"), " / 2);\n}\n\n.p-treeselect-sm .p-treeselect-label {\n font-size: ").concat(dt("treeselect.sm.font.size"), ";\n padding-block: ").concat(dt("treeselect.sm.padding.y"), ";\n padding-inline: ").concat(dt("treeselect.sm.padding.x"), ";\n}\n\n.p-treeselect-sm .p-treeselect-dropdown .p-icon {\n font-size: ").concat(dt("treeselect.sm.font.size"), ";\n width: ").concat(dt("treeselect.sm.font.size"), ";\n height: ").concat(dt("treeselect.sm.font.size"), ";\n}\n\n.p-treeselect-lg .p-treeselect-label {\n font-size: ").concat(dt("treeselect.lg.font.size"), ";\n padding-block: ").concat(dt("treeselect.lg.padding.y"), ";\n padding-inline: ").concat(dt("treeselect.lg.padding.x"), ";\n}\n\n.p-treeselect-lg .p-treeselect-dropdown .p-icon {\n font-size: ").concat(dt("treeselect.lg.font.size"), ";\n width: ").concat(dt("treeselect.lg.font.size"), ";\n height: ").concat(dt("treeselect.lg.font.size"), ";\n}\n"); +}, "theme"); +var inlineStyles$1 = { + root: /* @__PURE__ */ __name(function root32(_ref2) { + var props = _ref2.props; + return { + position: props.appendTo === "self" ? "relative" : void 0 + }; + }, "root") +}; +var classes$1 = { + root: /* @__PURE__ */ __name(function root33(_ref3) { + var instance = _ref3.instance, props = _ref3.props; + return ["p-treeselect p-component p-inputwrapper", { + "p-treeselect-display-chip": props.display === "chip", + "p-disabled": props.disabled, + "p-invalid": instance.$invalid, + "p-focus": instance.focused, + "p-variant-filled": instance.$variant === "filled", + "p-inputwrapper-filled": instance.$filled, + "p-inputwrapper-focus": instance.focused || instance.overlayVisible, + "p-treeselect-open": instance.overlayVisible, + "p-treeselect-fluid": instance.$fluid, + "p-treeselect-sm p-inputfield-sm": props.size === "small", + "p-treeselect-lg p-inputfield-lg": props.size === "large" + }]; + }, "root"), + labelContainer: "p-treeselect-label-container", + label: /* @__PURE__ */ __name(function label10(_ref4) { + var instance = _ref4.instance, props = _ref4.props; + return ["p-treeselect-label", { + "p-placeholder": instance.label === props.placeholder, + "p-treeselect-label-empty": !props.placeholder && instance.emptyValue + }]; + }, "label"), + clearIcon: "p-treeselect-clear-icon", + chip: "p-treeselect-chip-item", + pcChip: "p-treeselect-chip", + dropdown: "p-treeselect-dropdown", + dropdownIcon: "p-treeselect-dropdown-icon", + panel: "p-treeselect-overlay p-component", + treeContainer: "p-treeselect-tree-container", + emptyMessage: "p-treeselect-empty-message" +}; +var TreeSelectStyle = BaseStyle.extend({ + name: "treeselect", + theme: theme$1, + classes: classes$1, + inlineStyles: inlineStyles$1 +}); +var script$1$1 = { + name: "BaseTreeSelect", + "extends": script$1n, + props: { + options: Array, + scrollHeight: { + type: String, + "default": "20rem" + }, + placeholder: { + type: String, + "default": null + }, + tabindex: { + type: Number, + "default": null + }, + selectionMode: { + type: String, + "default": "single" + }, + selectedItemsLabel: { + type: String, + "default": null + }, + maxSelectedLabels: { + type: Number, + "default": null + }, + appendTo: { + type: [String, Object], + "default": "body" + }, + emptyMessage: { + type: String, + "default": null + }, + display: { + type: String, + "default": "comma" + }, + metaKeySelection: { + type: Boolean, + "default": false + }, + loading: { + type: Boolean, + "default": false + }, + loadingIcon: { + type: String, + "default": void 0 + }, + loadingMode: { + type: String, + "default": "mask" + }, + showClear: { + type: Boolean, + "default": false + }, + clearIcon: { + type: String, + "default": void 0 + }, + filter: { + type: Boolean, + "default": false + }, + filterBy: { + type: [String, Function], + "default": "label" + }, + filterMode: { + type: String, + "default": "lenient" + }, + filterPlaceholder: { + type: String, + "default": null + }, + filterLocale: { + type: String, + "default": void 0 + }, + inputId: { + type: String, + "default": null + }, + inputClass: { + type: [String, Object], + "default": null + }, + inputStyle: { + type: Object, + "default": null + }, + inputProps: { + type: null, + "default": null + }, + panelClass: { + type: [String, Object], + "default": null + }, + panelProps: { + type: null, + "default": null + }, + ariaLabelledby: { + type: String, + "default": null + }, + ariaLabel: { + type: String, + "default": null + }, + expandedKeys: { + type: null, + "default": null + } + }, + style: TreeSelectStyle, + provide: /* @__PURE__ */ __name(function provide50() { + return { + $pcTreeSelect: this, + $parentInstance: this + }; + }, "provide") +}; +function _typeof$1$1(o) { + "@babel/helpers - typeof"; + return _typeof$1$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$1$1(o); +} +__name(_typeof$1$1, "_typeof$1$1"); +function ownKeys$1$1(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$1$1, "ownKeys$1$1"); +function _objectSpread$1$1(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$1$1(Object(t2), true).forEach(function(r2) { + _defineProperty$1$1(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$1$1(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$1$1, "_objectSpread$1$1"); +function _defineProperty$1$1(e, r, t2) { + return (r = _toPropertyKey$1$1(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$1$1, "_defineProperty$1$1"); +function _toPropertyKey$1$1(t2) { + var i = _toPrimitive$1$1(t2, "string"); + return "symbol" == _typeof$1$1(i) ? i : i + ""; +} +__name(_toPropertyKey$1$1, "_toPropertyKey$1$1"); +function _toPrimitive$1$1(t2, r) { + if ("object" != _typeof$1$1(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$1$1(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$1$1, "_toPrimitive$1$1"); +function _createForOfIteratorHelper$2(r, e) { + var t2 = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (!t2) { + if (Array.isArray(r) || (t2 = _unsupportedIterableToArray$2(r)) || e) { + t2 && (r = t2); + var _n = 0, F = /* @__PURE__ */ __name(function F2() { + }, "F"); + return { s: F, n: /* @__PURE__ */ __name(function n() { + return _n >= r.length ? { done: true } : { done: false, value: r[_n++] }; + }, "n"), e: /* @__PURE__ */ __name(function e2(r2) { + throw r2; + }, "e"), f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var o, a = true, u = false; + return { s: /* @__PURE__ */ __name(function s() { + t2 = t2.call(r); + }, "s"), n: /* @__PURE__ */ __name(function n() { + var r2 = t2.next(); + return a = r2.done, r2; + }, "n"), e: /* @__PURE__ */ __name(function e2(r2) { + u = true, o = r2; + }, "e"), f: /* @__PURE__ */ __name(function f() { + try { + a || null == t2["return"] || t2["return"](); + } finally { + if (u) throw o; + } + }, "f") }; +} +__name(_createForOfIteratorHelper$2, "_createForOfIteratorHelper$2"); +function _toConsumableArray$2(r) { + return _arrayWithoutHoles$2(r) || _iterableToArray$2(r) || _unsupportedIterableToArray$2(r) || _nonIterableSpread$2(); +} +__name(_toConsumableArray$2, "_toConsumableArray$2"); +function _nonIterableSpread$2() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$2, "_nonIterableSpread$2"); +function _unsupportedIterableToArray$2(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$2(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$2(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$2, "_unsupportedIterableToArray$2"); +function _iterableToArray$2(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$2, "_iterableToArray$2"); +function _arrayWithoutHoles$2(r) { + if (Array.isArray(r)) return _arrayLikeToArray$2(r); +} +__name(_arrayWithoutHoles$2, "_arrayWithoutHoles$2"); +function _arrayLikeToArray$2(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$2, "_arrayLikeToArray$2"); +var script$6 = { + name: "TreeSelect", + "extends": script$1$1, + inheritAttrs: false, + emits: ["before-show", "before-hide", "change", "show", "hide", "node-select", "node-unselect", "node-expand", "node-collapse", "focus", "blur", "update:expandedKeys"], + inject: { + $pcFluid: { + "default": null + } + }, + data: /* @__PURE__ */ __name(function data36() { + return { + id: this.$attrs.id, + focused: false, + overlayVisible: false, + d_expandedKeys: this.expandedKeys || {} + }; + }, "data"), + watch: { + "$attrs.id": /* @__PURE__ */ __name(function $attrsId13(newValue) { + this.id = newValue || UniqueComponentId(); + }, "$attrsId"), + modelValue: { + handler: /* @__PURE__ */ __name(function handler4() { + if (!this.selfChange) { + this.updateTreeState(); + } + this.selfChange = false; + }, "handler"), + immediate: true + }, + options: /* @__PURE__ */ __name(function options3() { + this.updateTreeState(); + }, "options"), + expandedKeys: /* @__PURE__ */ __name(function expandedKeys2(value2) { + this.d_expandedKeys = value2; + }, "expandedKeys") + }, + outsideClickListener: null, + resizeListener: null, + scrollHandler: null, + overlay: null, + selfChange: false, + selfClick: false, + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount17() { + this.unbindOutsideClickListener(); + this.unbindResizeListener(); + if (this.scrollHandler) { + this.scrollHandler.destroy(); + this.scrollHandler = null; + } + if (this.overlay) { + ZIndex.clear(this.overlay); + this.overlay = null; + } + }, "beforeUnmount"), + mounted: /* @__PURE__ */ __name(function mounted40() { + this.id = this.id || UniqueComponentId(); + this.updateTreeState(); + }, "mounted"), + methods: { + show: /* @__PURE__ */ __name(function show6() { + this.$emit("before-show"); + this.overlayVisible = true; + }, "show"), + hide: /* @__PURE__ */ __name(function hide7() { + this.$emit("before-hide"); + this.overlayVisible = false; + this.$refs.focusInput.focus(); + }, "hide"), + onFocus: /* @__PURE__ */ __name(function onFocus14(event2) { + this.focused = true; + this.$emit("focus", event2); + }, "onFocus"), + onBlur: /* @__PURE__ */ __name(function onBlur14(event2) { + var _this$formField$onBlu, _this$formField; + this.focused = false; + this.$emit("blur", event2); + (_this$formField$onBlu = (_this$formField = this.formField).onBlur) === null || _this$formField$onBlu === void 0 || _this$formField$onBlu.call(_this$formField); + }, "onBlur"), + onClick: /* @__PURE__ */ __name(function onClick8(event2) { + if (this.disabled) { + return; + } + if (event2.target.tagName === "INPUT" || event2.target.getAttribute("data-pc-section") === "clearicon" || event2.target.closest('[data-pc-section="clearicon"]')) { + return; + } else if (!this.overlay || !this.overlay.contains(event2.target)) { + if (this.overlayVisible) this.hide(); + else this.show(); + focus(this.$refs.focusInput); + } + }, "onClick"), + onClearClick: /* @__PURE__ */ __name(function onClearClick3() { + this.onSelectionChange(null); + }, "onClearClick"), + onSelectionChange: /* @__PURE__ */ __name(function onSelectionChange(keys) { + this.selfChange = true; + this.writeValue(keys); + this.$emit("change", keys); + }, "onSelectionChange"), + onNodeSelect: /* @__PURE__ */ __name(function onNodeSelect(node2) { + this.$emit("node-select", node2); + if (this.selectionMode === "single") { + this.hide(); + } + }, "onNodeSelect"), + onNodeUnselect: /* @__PURE__ */ __name(function onNodeUnselect(node2) { + this.$emit("node-unselect", node2); + }, "onNodeUnselect"), + onNodeToggle: /* @__PURE__ */ __name(function onNodeToggle2(keys) { + this.d_expandedKeys = keys; + this.$emit("update:expandedKeys", this.d_expandedKeys); + }, "onNodeToggle"), + getSelectedItemsLabel: /* @__PURE__ */ __name(function getSelectedItemsLabel2() { + var pattern = /{(.*?)}/; + var selectedItemsLabel = this.selectedItemsLabel || this.$primevue.config.locale.selectionMessage; + if (pattern.test(selectedItemsLabel)) { + return selectedItemsLabel.replace(selectedItemsLabel.match(pattern)[0], Object.keys(this.d_value).length + ""); + } + return selectedItemsLabel; + }, "getSelectedItemsLabel"), + onFirstHiddenFocus: /* @__PURE__ */ __name(function onFirstHiddenFocus2(event2) { + var focusableEl = event2.relatedTarget === this.$refs.focusInput ? getFirstFocusableElement(this.overlay, ':not([data-p-hidden-focusable="true"])') : this.$refs.focusInput; + focus(focusableEl); + }, "onFirstHiddenFocus"), + onLastHiddenFocus: /* @__PURE__ */ __name(function onLastHiddenFocus2(event2) { + var focusableEl = event2.relatedTarget === this.$refs.focusInput ? getLastFocusableElement(this.overlay, ':not([data-p-hidden-focusable="true"])') : this.$refs.focusInput; + focus(focusableEl); + }, "onLastHiddenFocus"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown12(event2) { + switch (event2.code) { + case "ArrowDown": + this.onArrowDownKey(event2); + break; + case "Space": + case "Enter": + case "NumpadEnter": + this.onEnterKey(event2); + break; + case "Escape": + this.onEscapeKey(event2); + break; + case "Tab": + this.onTabKey(event2); + break; + } + }, "onKeyDown"), + onArrowDownKey: /* @__PURE__ */ __name(function onArrowDownKey8(event2) { + var _this = this; + if (this.overlayVisible) return; + this.show(); + this.$nextTick(function() { + var treeNodeEl = find(_this.$refs.tree.$el, '[data-pc-section="treeitem"]'); + var focusedElement = _toConsumableArray$2(treeNodeEl).find(function(item8) { + return item8.getAttribute("tabindex") === "0"; + }); + focus(focusedElement); + }); + event2.preventDefault(); + }, "onArrowDownKey"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey8(event2) { + if (this.overlayVisible) { + this.hide(); + } else { + this.onArrowDownKey(event2); + } + event2.preventDefault(); + }, "onEnterKey"), + onEscapeKey: /* @__PURE__ */ __name(function onEscapeKey5(event2) { + if (this.overlayVisible) { + this.hide(); + event2.preventDefault(); + } + }, "onEscapeKey"), + onTabKey: /* @__PURE__ */ __name(function onTabKey5(event2) { + var pressedInInputText = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false; + if (!pressedInInputText) { + if (this.overlayVisible && this.hasFocusableElements()) { + focus(this.$refs.firstHiddenFocusableElementOnOverlay); + event2.preventDefault(); + } + } + }, "onTabKey"), + hasFocusableElements: /* @__PURE__ */ __name(function hasFocusableElements2() { + return getFocusableElements(this.overlay, ':not([data-p-hidden-focusable="true"])').length > 0; + }, "hasFocusableElements"), + onOverlayEnter: /* @__PURE__ */ __name(function onOverlayEnter5(el) { + ZIndex.set("overlay", el, this.$primevue.config.zIndex.overlay); + addStyle(el, { + position: "absolute", + top: "0", + left: "0" + }); + this.alignOverlay(); + this.focus(); + }, "onOverlayEnter"), + onOverlayAfterEnter: /* @__PURE__ */ __name(function onOverlayAfterEnter3() { + this.bindOutsideClickListener(); + this.bindScrollListener(); + this.bindResizeListener(); + this.scrollValueInView(); + this.$emit("show"); + }, "onOverlayAfterEnter"), + onOverlayLeave: /* @__PURE__ */ __name(function onOverlayLeave5() { + this.unbindOutsideClickListener(); + this.unbindScrollListener(); + this.unbindResizeListener(); + this.$emit("hide"); + this.overlay = null; + }, "onOverlayLeave"), + onOverlayAfterLeave: /* @__PURE__ */ __name(function onOverlayAfterLeave5(el) { + ZIndex.clear(el); + }, "onOverlayAfterLeave"), + focus: /* @__PURE__ */ __name(function focus3() { + var focusableElements = getFocusableElements(this.overlay); + if (focusableElements && focusableElements.length > 0) { + focusableElements[0].focus(); + } + }, "focus"), + alignOverlay: /* @__PURE__ */ __name(function alignOverlay6() { + if (this.appendTo === "self") { + relativePosition(this.overlay, this.$el); + } else { + this.overlay.style.minWidth = getOuterWidth(this.$el) + "px"; + absolutePosition(this.overlay, this.$el); + } + }, "alignOverlay"), + bindOutsideClickListener: /* @__PURE__ */ __name(function bindOutsideClickListener7() { + var _this2 = this; + if (!this.outsideClickListener) { + this.outsideClickListener = function(event2) { + if (_this2.overlayVisible && !_this2.selfClick && _this2.isOutsideClicked(event2)) { + _this2.hide(); + } + _this2.selfClick = false; + }; + document.addEventListener("click", this.outsideClickListener); + } + }, "bindOutsideClickListener"), + unbindOutsideClickListener: /* @__PURE__ */ __name(function unbindOutsideClickListener7() { + if (this.outsideClickListener) { + document.removeEventListener("click", this.outsideClickListener); + this.outsideClickListener = null; + } + }, "unbindOutsideClickListener"), + bindScrollListener: /* @__PURE__ */ __name(function bindScrollListener7() { + var _this3 = this; + if (!this.scrollHandler) { + this.scrollHandler = new ConnectedOverlayScrollHandler(this.$refs.container, function() { + if (_this3.overlayVisible) { + _this3.hide(); + } + }); + } + this.scrollHandler.bindScrollListener(); + }, "bindScrollListener"), + unbindScrollListener: /* @__PURE__ */ __name(function unbindScrollListener7() { + if (this.scrollHandler) { + this.scrollHandler.unbindScrollListener(); + } + }, "unbindScrollListener"), + bindResizeListener: /* @__PURE__ */ __name(function bindResizeListener7() { + var _this4 = this; + if (!this.resizeListener) { + this.resizeListener = function() { + if (_this4.overlayVisible && !isTouchDevice()) { + _this4.hide(); + } + }; + window.addEventListener("resize", this.resizeListener); + } + }, "bindResizeListener"), + unbindResizeListener: /* @__PURE__ */ __name(function unbindResizeListener7() { + if (this.resizeListener) { + window.removeEventListener("resize", this.resizeListener); + this.resizeListener = null; + } + }, "unbindResizeListener"), + isOutsideClicked: /* @__PURE__ */ __name(function isOutsideClicked5(event2) { + return !(this.$el.isSameNode(event2.target) || this.$el.contains(event2.target) || this.overlay && this.overlay.contains(event2.target)); + }, "isOutsideClicked"), + overlayRef: /* @__PURE__ */ __name(function overlayRef5(el) { + this.overlay = el; + }, "overlayRef"), + onOverlayClick: /* @__PURE__ */ __name(function onOverlayClick6(event2) { + OverlayEventBus.emit("overlay-click", { + originalEvent: event2, + target: this.$el + }); + this.selfClick = true; + }, "onOverlayClick"), + onOverlayKeydown: /* @__PURE__ */ __name(function onOverlayKeydown(event2) { + if (event2.code === "Escape") this.hide(); + }, "onOverlayKeydown"), + findSelectedNodes: /* @__PURE__ */ __name(function findSelectedNodes(node2, keys, selectedNodes2) { + if (node2) { + if (this.isSelected(node2, keys)) { + selectedNodes2.push(node2); + delete keys[node2.key]; + } + if (Object.keys(keys).length && node2.children) { + var _iterator = _createForOfIteratorHelper$2(node2.children), _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + var childNode = _step.value; + this.findSelectedNodes(childNode, keys, selectedNodes2); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + } else { + var _iterator2 = _createForOfIteratorHelper$2(this.options), _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { + var _childNode = _step2.value; + this.findSelectedNodes(_childNode, keys, selectedNodes2); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + }, "findSelectedNodes"), + isSelected: /* @__PURE__ */ __name(function isSelected5(node2, keys) { + return this.selectionMode === "checkbox" ? keys[node2.key] && keys[node2.key].checked : keys[node2.key]; + }, "isSelected"), + updateTreeState: /* @__PURE__ */ __name(function updateTreeState() { + var keys = _objectSpread$1$1({}, this.d_value); + if (keys && this.options) { + this.updateTreeBranchState(null, null, keys); + } + }, "updateTreeState"), + updateTreeBranchState: /* @__PURE__ */ __name(function updateTreeBranchState(node2, path, keys) { + if (node2) { + if (this.isSelected(node2, keys)) { + this.expandPath(path); + delete keys[node2.key]; + } + if (Object.keys(keys).length && node2.children) { + var _iterator3 = _createForOfIteratorHelper$2(node2.children), _step3; + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { + var childNode = _step3.value; + path.push(node2.key); + this.updateTreeBranchState(childNode, path, keys); + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + } + } else { + var _iterator4 = _createForOfIteratorHelper$2(this.options), _step4; + try { + for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) { + var _childNode2 = _step4.value; + this.updateTreeBranchState(_childNode2, [], keys); + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); + } + } + }, "updateTreeBranchState"), + expandPath: /* @__PURE__ */ __name(function expandPath(path) { + if (path.length > 0) { + var _iterator5 = _createForOfIteratorHelper$2(path), _step5; + try { + for (_iterator5.s(); !(_step5 = _iterator5.n()).done; ) { + var key = _step5.value; + this.d_expandedKeys[key] = true; + } + } catch (err) { + _iterator5.e(err); + } finally { + _iterator5.f(); + } + this.d_expandedKeys = _objectSpread$1$1({}, this.d_expandedKeys); + this.$emit("update:expandedKeys", this.d_expandedKeys); + } + }, "expandPath"), + scrollValueInView: /* @__PURE__ */ __name(function scrollValueInView() { + if (this.overlay) { + var selectedItem = findSingle(this.overlay, '[data-p-selected="true"]'); + if (selectedItem) { + selectedItem.scrollIntoView({ + block: "nearest", + inline: "start" + }); + } + } + }, "scrollValueInView") + }, + computed: { + selectedNodes: /* @__PURE__ */ __name(function selectedNodes() { + var selectedNodes2 = []; + if (this.d_value && this.options) { + var keys = _objectSpread$1$1({}, this.d_value); + this.findSelectedNodes(null, keys, selectedNodes2); + } + return selectedNodes2; + }, "selectedNodes"), + label: /* @__PURE__ */ __name(function label11() { + var value2 = this.selectedNodes; + var label12; + if (value2.length) { + if (isNotEmpty(this.maxSelectedLabels) && value2.length > this.maxSelectedLabels) { + label12 = this.getSelectedItemsLabel(); + } else { + label12 = value2.map(function(node2) { + return node2.label; + }).join(", "); + } + } else { + label12 = this.placeholder; + } + return label12; + }, "label"), + chipSelectedItems: /* @__PURE__ */ __name(function chipSelectedItems2() { + return isNotEmpty(this.maxSelectedLabels) && this.d_value && Object.keys(this.d_value).length > this.maxSelectedLabels; + }, "chipSelectedItems"), + emptyMessageText: /* @__PURE__ */ __name(function emptyMessageText4() { + return this.emptyMessage || this.$primevue.config.locale.emptyMessage; + }, "emptyMessageText"), + emptyValue: /* @__PURE__ */ __name(function emptyValue() { + return !this.$filled; + }, "emptyValue"), + emptyOptions: /* @__PURE__ */ __name(function emptyOptions() { + return !this.options || this.options.length === 0; + }, "emptyOptions"), + listId: /* @__PURE__ */ __name(function listId() { + return this.id + "_list"; + }, "listId"), + hasFluid: /* @__PURE__ */ __name(function hasFluid2() { + return isEmpty(this.fluid) ? !!this.$pcFluid : this.fluid; + }, "hasFluid"), + isClearIconVisible: /* @__PURE__ */ __name(function isClearIconVisible3() { + return this.showClear && this.d_value != null && isNotEmpty(this.options); + }, "isClearIconVisible") + }, + components: { + TSTree: script$1U, + Chip: script$1t, + Portal: script$1f, + ChevronDownIcon: script$1k, + TimesIcon: script$1g + }, + directives: { + ripple: Ripple + } +}; +function _typeof$6(o) { + "@babel/helpers - typeof"; + return _typeof$6 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$6(o); +} +__name(_typeof$6, "_typeof$6"); +function ownKeys$6(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$6, "ownKeys$6"); +function _objectSpread$6(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$6(Object(t2), true).forEach(function(r2) { + _defineProperty$6(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$6(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$6, "_objectSpread$6"); +function _defineProperty$6(e, r, t2) { + return (r = _toPropertyKey$6(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$6, "_defineProperty$6"); +function _toPropertyKey$6(t2) { + var i = _toPrimitive$6(t2, "string"); + return "symbol" == _typeof$6(i) ? i : i + ""; +} +__name(_toPropertyKey$6, "_toPropertyKey$6"); +function _toPrimitive$6(t2, r) { + if ("object" != _typeof$6(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$6(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$6, "_toPrimitive$6"); +var _hoisted_1$6 = ["id", "disabled", "tabindex", "aria-labelledby", "aria-label", "aria-expanded", "aria-controls"]; +var _hoisted_2$4 = { + key: 0 +}; +var _hoisted_3$4 = ["aria-expanded"]; +function render$5(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Chip = resolveComponent("Chip"); + var _component_TSTree = resolveComponent("TSTree"); + var _component_Portal = resolveComponent("Portal"); + return openBlock(), createElementBlock("div", mergeProps({ + ref: "container", + "class": _ctx.cx("root"), + style: _ctx.sx("root"), + onClick: _cache[10] || (_cache[10] = function() { + return $options.onClick && $options.onClick.apply($options, arguments); + }) + }, _ctx.ptmi("root")), [createBaseVNode("div", mergeProps({ + "class": "p-hidden-accessible" + }, _ctx.ptm("hiddenInputContainer"), { + "data-p-hidden-accessible": true + }), [createBaseVNode("input", mergeProps({ + ref: "focusInput", + id: _ctx.inputId, + type: "text", + role: "combobox", + "class": _ctx.inputClass, + style: _ctx.inputStyle, + readonly: "", + disabled: _ctx.disabled, + tabindex: !_ctx.disabled ? _ctx.tabindex : -1, + "aria-labelledby": _ctx.ariaLabelledby, + "aria-label": _ctx.ariaLabel, + "aria-haspopup": "tree", + "aria-expanded": $data.overlayVisible, + "aria-controls": $options.listId, + onFocus: _cache[0] || (_cache[0] = function($event) { + return $options.onFocus($event); + }), + onBlur: _cache[1] || (_cache[1] = function($event) { + return $options.onBlur($event); + }), + onKeydown: _cache[2] || (_cache[2] = function($event) { + return $options.onKeyDown($event); + }) + }, _objectSpread$6(_objectSpread$6({}, _ctx.inputProps), _ctx.ptm("hiddenInput"))), null, 16, _hoisted_1$6)], 16), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("labelContainer") + }, _ctx.ptm("labelContainer")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("label") + }, _ctx.ptm("label")), [renderSlot(_ctx.$slots, "value", { + value: $options.selectedNodes, + placeholder: _ctx.placeholder + }, function() { + return [_ctx.display === "comma" ? (openBlock(), createElementBlock(Fragment, { + key: 0 + }, [createTextVNode(toDisplayString($options.label || "empty"), 1)], 64)) : _ctx.display === "chip" ? (openBlock(), createElementBlock(Fragment, { + key: 1 + }, [$options.chipSelectedItems ? (openBlock(), createElementBlock("span", _hoisted_2$4, toDisplayString($options.label), 1)) : (openBlock(), createElementBlock(Fragment, { + key: 1 + }, [(openBlock(true), createElementBlock(Fragment, null, renderList($options.selectedNodes, function(node2) { + return openBlock(), createElementBlock("div", mergeProps({ + key: node2.key, + "class": _ctx.cx("chipItem"), + ref_for: true + }, _ctx.ptm("chipItem")), [createVNode(_component_Chip, { + "class": normalizeClass(_ctx.cx("pcChip")), + label: node2.label, + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcChip") + }, null, 8, ["class", "label", "unstyled", "pt"])], 16); + }), 128)), $options.emptyValue ? (openBlock(), createElementBlock(Fragment, { + key: 0 + }, [createTextVNode(toDisplayString(_ctx.placeholder || "empty"), 1)], 64)) : createCommentVNode("", true)], 64))], 64)) : createCommentVNode("", true)]; + })], 16)], 16), $options.isClearIconVisible ? renderSlot(_ctx.$slots, "clearicon", { + key: 0, + "class": normalizeClass(_ctx.cx("clearIcon")), + clearCallback: $options.onClearClick + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.clearIcon ? "i" : "TimesIcon"), mergeProps({ + ref: "clearIcon", + "class": [_ctx.cx("clearIcon"), _ctx.clearIcon], + onClick: $options.onClearClick + }, _ctx.ptm("clearIcon"), { + "data-pc-section": "clearicon" + }), null, 16, ["class", "onClick"]))]; + }) : createCommentVNode("", true), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("dropdown"), + role: "button", + "aria-haspopup": "tree", + "aria-expanded": $data.overlayVisible + }, _ctx.ptm("dropdown")), [renderSlot(_ctx.$slots, _ctx.$slots.dropdownicon ? "dropdownicon" : "triggericon", { + "class": normalizeClass(_ctx.cx("dropdownIcon")) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent("ChevronDownIcon"), mergeProps({ + "class": _ctx.cx("dropdownIcon") + }, _ctx.ptm("dropdownIcon")), null, 16, ["class"]))]; + })], 16, _hoisted_3$4), createVNode(_component_Portal, { + appendTo: _ctx.appendTo + }, { + "default": withCtx(function() { + return [createVNode(Transition, mergeProps({ + name: "p-connected-overlay", + onEnter: $options.onOverlayEnter, + onAfterEnter: $options.onOverlayAfterEnter, + onLeave: $options.onOverlayLeave, + onAfterLeave: $options.onOverlayAfterLeave + }, _ctx.ptm("transition")), { + "default": withCtx(function() { + return [$data.overlayVisible ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + ref: $options.overlayRef, + onClick: _cache[8] || (_cache[8] = function() { + return $options.onOverlayClick && $options.onOverlayClick.apply($options, arguments); + }), + "class": [_ctx.cx("panel"), _ctx.panelClass], + onKeydown: _cache[9] || (_cache[9] = function() { + return $options.onOverlayKeydown && $options.onOverlayKeydown.apply($options, arguments); + }) + }, _objectSpread$6(_objectSpread$6({}, _ctx.panelProps), _ctx.ptm("panel"))), [createBaseVNode("span", mergeProps({ + ref: "firstHiddenFocusableElementOnOverlay", + role: "presentation", + "class": "p-hidden-accessible p-hidden-focusable", + tabindex: 0, + onFocus: _cache[3] || (_cache[3] = function() { + return $options.onFirstHiddenFocus && $options.onFirstHiddenFocus.apply($options, arguments); + }) + }, _ctx.ptm("hiddenFirstFocusableEl"), { + "data-p-hidden-accessible": true, + "data-p-hidden-focusable": true + }), null, 16), renderSlot(_ctx.$slots, "header", { + value: _ctx.d_value, + options: _ctx.options + }), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("treeContainer"), + style: { + "max-height": _ctx.scrollHeight + } + }, _ctx.ptm("treeContainer")), [createVNode(_component_TSTree, { + ref: "tree", + id: $options.listId, + value: _ctx.options, + selectionMode: _ctx.selectionMode, + loading: _ctx.loading, + loadingIcon: _ctx.loadingIcon, + loadingMode: _ctx.loadingMode, + filter: _ctx.filter, + filterBy: _ctx.filterBy, + filterMode: _ctx.filterMode, + filterPlaceholder: _ctx.filterPlaceholder, + filterLocale: _ctx.filterLocale, + "onUpdate:selectionKeys": $options.onSelectionChange, + selectionKeys: _ctx.d_value, + expandedKeys: $data.d_expandedKeys, + "onUpdate:expandedKeys": $options.onNodeToggle, + metaKeySelection: _ctx.metaKeySelection, + onNodeExpand: _cache[4] || (_cache[4] = function($event) { + return _ctx.$emit("node-expand", $event); + }), + onNodeCollapse: _cache[5] || (_cache[5] = function($event) { + return _ctx.$emit("node-collapse", $event); + }), + onNodeSelect: $options.onNodeSelect, + onNodeUnselect: $options.onNodeUnselect, + onClick: _cache[6] || (_cache[6] = withModifiers(function() { + }, ["stop"])), + level: 0, + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcTree") + }, createSlots({ + _: 2 + }, [_ctx.$slots.option ? { + name: "default", + fn: withCtx(function(optionSlotProps) { + return [renderSlot(_ctx.$slots, "option", { + node: optionSlotProps.node, + expanded: optionSlotProps.expanded, + selected: optionSlotProps.selected + })]; + }), + key: "0" + } : void 0, _ctx.$slots.itemtoggleicon ? { + name: "toggleicon", + fn: withCtx(function(iconSlotProps) { + return [renderSlot(_ctx.$slots, "itemtoggleicon", { + node: iconSlotProps.node, + expanded: iconSlotProps.expanded, + "class": normalizeClass(iconSlotProps["class"]) + })]; + }), + key: "1" + } : _ctx.$slots.itemtogglericon ? { + name: "togglericon", + fn: withCtx(function(iconSlotProps) { + return [renderSlot(_ctx.$slots, "itemtogglericon", { + node: iconSlotProps.node, + expanded: iconSlotProps.expanded, + "class": normalizeClass(iconSlotProps["class"]) + })]; + }), + key: "2" + } : void 0, _ctx.$slots.itemcheckboxicon ? { + name: "checkboxicon", + fn: withCtx(function(iconSlotProps) { + return [renderSlot(_ctx.$slots, "itemcheckboxicon", { + checked: iconSlotProps.checked, + partialChecked: iconSlotProps.partialChecked, + "class": normalizeClass(iconSlotProps["class"]) + })]; + }), + key: "3" + } : void 0]), 1032, ["id", "value", "selectionMode", "loading", "loadingIcon", "loadingMode", "filter", "filterBy", "filterMode", "filterPlaceholder", "filterLocale", "onUpdate:selectionKeys", "selectionKeys", "expandedKeys", "onUpdate:expandedKeys", "metaKeySelection", "onNodeSelect", "onNodeUnselect", "unstyled", "pt"]), $options.emptyOptions && !_ctx.loading ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("emptyMessage") + }, _ctx.ptm("emptyMessage")), [renderSlot(_ctx.$slots, "empty", {}, function() { + return [createTextVNode(toDisplayString($options.emptyMessageText), 1)]; + })], 16)) : createCommentVNode("", true)], 16), renderSlot(_ctx.$slots, "footer", { + value: _ctx.d_value, + options: _ctx.options + }), createBaseVNode("span", mergeProps({ + ref: "lastHiddenFocusableElementOnOverlay", + role: "presentation", + "class": "p-hidden-accessible p-hidden-focusable", + tabindex: 0, + onFocus: _cache[7] || (_cache[7] = function() { + return $options.onLastHiddenFocus && $options.onLastHiddenFocus.apply($options, arguments); + }) + }, _ctx.ptm("hiddenLastFocusableEl"), { + "data-p-hidden-accessible": true, + "data-p-hidden-focusable": true + }), null, 16)], 16)) : createCommentVNode("", true)]; + }), + _: 3 + }, 16, ["onEnter", "onAfterEnter", "onLeave", "onAfterLeave"])]; + }), + _: 3 + }, 8, ["appendTo"])], 16); +} +__name(render$5, "render$5"); +script$6.render = render$5; +var theme40 = /* @__PURE__ */ __name(function theme41(_ref) { + var dt = _ref.dt; + return "\n.p-treetable {\n position: relative;\n}\n\n.p-treetable-table {\n border-spacing: 0;\n border-collapse: separate;\n width: 100%;\n}\n\n.p-treetable-scrollable > .p-treetable-table-container {\n position: relative;\n}\n\n.p-treetable-scrollable-table > .p-treetable-thead {\n inset-block-start: 0;\n z-index: 1;\n}\n\n.p-treetable-scrollable-table > .p-treetable-frozen-tbody {\n position: sticky;\n z-index: 1;\n}\n\n.p-treetable-scrollable-table > .p-treetable-tfoot {\n inset-block-end: 0;\n z-index: 1;\n}\n\n.p-treetable-scrollable .p-treetable-frozen-column {\n position: sticky;\n background: ".concat(dt("treetable.header.cell.background"), ";\n}\n\n.p-treetable-scrollable th.p-treetable-frozen-column {\n z-index: 1;\n}\n\n.p-treetable-scrollable > .p-treetable-table-container > .p-treetable-table > .p-treetable-thead {\n background: ").concat(dt("treetable.header.cell.background"), ";\n}\n\n.p-treetable-scrollable > .p-treetable-table-container > .p-treetable-table > .p-treetable-tfoot {\n background: ").concat(dt("treetable.footer.cell.background"), ";\n}\n\n.p-treetable-flex-scrollable {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.p-treetable-flex-scrollable > .p-treetable-table-container {\n display: flex;\n flex-direction: column;\n flex: 1;\n height: 100%;\n}\n\n.p-treetable-scrollable-table > .p-treetable-tbody > .p-treetable-row-group-header {\n position: sticky;\n z-index: 1;\n}\n\n.p-treetable-resizable-table > .p-treetable-thead > tr > th,\n.p-treetable-resizable-table > .p-treetable-tfoot > tr > td,\n.p-treetable-resizable-table > .p-treetable-tbody > tr > td {\n overflow: hidden;\n white-space: nowrap;\n}\n\n.p-treetable-resizable-table > .p-treetable-thead > tr > th.p-treetable-resizable-column:not(.p-treetable-frozen-column) {\n background-clip: padding-box;\n position: relative;\n}\n\n.p-treetable-resizable-table-fit > .p-treetable-thead > tr > th.p-treetable-resizable-column:last-child .p-treetable-column-resizer {\n display: none;\n}\n\n.p-treetable-column-resizer {\n display: block;\n position: absolute;\n inset-block-start: 0;\n inset-inline-end: 0;\n margin: 0;\n width: ").concat(dt("treetable.column.resizer.width"), ";\n height: 100%;\n padding: 0;\n cursor: col-resize;\n border: 1px solid transparent;\n}\n\n.p-treetable-column-header-content {\n display: flex;\n align-items: center;\n gap: ").concat(dt("treetable.header.cell.gap"), ";\n}\n\n.p-treetable-column-resize-indicator {\n width: ").concat(dt("treetable.resize.indicator.width"), ";\n position: absolute;\n z-index: 10;\n display: none;\n background: ").concat(dt("treetable.resize.indicator.color"), ";\n}\n\n.p-treetable-mask {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n}\n\n.p-treetable-paginator-top {\n border-color: ").concat(dt("treetable.paginator.top.border.color"), ";\n border-style: solid;\n border-width: ").concat(dt("treetable.paginator.top.border.width"), ";\n}\n\n.p-treetable-paginator-bottom {\n border-color: ").concat(dt("treetable.paginator.bottom.border.color"), ";\n border-style: solid;\n border-width: ").concat(dt("treetable.paginator.bottom.border.width"), ";\n}\n\n.p-treetable-header {\n background: ").concat(dt("treetable.header.background"), ";\n color: ").concat(dt("treetable.header.color"), ";\n border-color: ").concat(dt("treetable.header.border.color"), ";\n border-style: solid;\n border-width: ").concat(dt("treetable.header.border.width"), ";\n padding: ").concat(dt("treetable.header.padding"), ";\n}\n\n.p-treetable-footer {\n background: ").concat(dt("treetable.footer.background"), ";\n color: ").concat(dt("treetable.footer.color"), ";\n border-color: ").concat(dt("treetable.footer.border.color"), ";\n border-style: solid;\n border-width: ").concat(dt("treetable.footer.border.width"), ";\n padding: ").concat(dt("treetable.footer.padding"), ";\n}\n\n.p-treetable-header-cell {\n padding: ").concat(dt("treetable.header.cell.padding"), ";\n background: ").concat(dt("treetable.header.cell.background"), ";\n border-color: ").concat(dt("treetable.header.cell.border.color"), ";\n border-style: solid;\n border-width: 0 0 1px 0;\n color: ").concat(dt("treetable.header.cell.color"), ";\n font-weight: normal;\n text-align: start;\n transition: background ").concat(dt("treetable.transition.duration"), ", color ").concat(dt("treetable.transition.duration"), ", border-color ").concat(dt("treetable.transition.duration"), ",\n outline-color ").concat(dt("treetable.transition.duration"), ", box-shadow ").concat(dt("treetable.transition.duration"), ";\n}\n\n.p-treetable-column-title {\n font-weight: ").concat(dt("treetable.column.title.font.weight"), ";\n}\n\n.p-treetable-tbody > tr {\n outline-color: transparent;\n background: ").concat(dt("treetable.row.background"), ";\n color: ").concat(dt("treetable.row.color"), ";\n transition: background ").concat(dt("treetable.transition.duration"), ", color ").concat(dt("treetable.transition.duration"), ", border-color ").concat(dt("treetable.transition.duration"), ",\n outline-color ").concat(dt("treetable.transition.duration"), ", box-shadow ").concat(dt("treetable.transition.duration"), ";\n}\n\n.p-treetable-tbody > tr > td {\n text-align: start;\n border-color: ").concat(dt("treetable.body.cell.border.color"), ";\n border-style: solid;\n border-width: 0 0 1px 0;\n padding: ").concat(dt("treetable.body.cell.padding"), ";\n}\n\n.p-treetable-hoverable .p-treetable-tbody > tr:not(.p-treetable-row-selected):hover {\n background: ").concat(dt("treetable.row.hover.background"), ";\n color: ").concat(dt("treetable.row.hover.color"), ";\n}\n\n.p-treetable-tbody > tr.p-treetable-row-selected {\n background: ").concat(dt("treetable.row.selected.background"), ";\n color: ").concat(dt("treetable.row.selected.color"), ";\n}\n\n.p-treetable-tbody > tr:has(+ .p-treetable-row-selected) > td {\n border-block-end-color: ").concat(dt("treetable.body.cell.selected.border.color"), ";\n}\n\n.p-treetable-tbody > tr.p-treetable-row-selected > td {\n border-block-end-color: ").concat(dt("treetable.body.cell.selected.border.color"), ";\n}\n\n.p-treetable-tbody > tr:focus-visible,\n.p-treetable-tbody > tr.p-treetable-contextmenu-row-selected {\n box-shadow: ").concat(dt("treetable.row.focus.ring.shadow"), ";\n outline: ").concat(dt("treetable.row.focus.ring.width"), " ").concat(dt("treetable.row.focus.ring.style"), " ").concat(dt("treetable.row.focus.ring.color"), ";\n outline-offset: ").concat(dt("treetable.row.focus.ring.offset"), ";\n}\n\n.p-treetable-tfoot > tr > td {\n text-align: start;\n padding: ").concat(dt("treetable.footer.cell.padding"), ";\n border-color: ").concat(dt("treetable.footer.cell.border.color"), ";\n border-style: solid;\n border-width: 0 0 1px 0;\n color: ").concat(dt("treetable.footer.cell.color"), ";\n background: ").concat(dt("treetable.footer.cell.background"), ";\n}\n\n.p-treetable-column-footer {\n font-weight: ").concat(dt("treetable.column.footer.font.weight"), ";\n}\n\n.p-treetable-sortable-column {\n cursor: pointer;\n user-select: none;\n outline-color: transparent;\n}\n\n.p-treetable-column-title,\n.p-treetable-sort-icon,\n.p-treetable-sort-badge {\n vertical-align: middle;\n}\n\n.p-treetable-sort-icon {\n color: ").concat(dt("treetable.sort.icon.color"), ";\n font-size: ").concat(dt("treetable.sort.icon.size"), ";\n width: ").concat(dt("treetable.sort.icon.size"), ";\n height: ").concat(dt("treetable.sort.icon.size"), ";\n transition: color ").concat(dt("treetable.transition.duration"), ";\n}\n\n.p-treetable-sortable-column:not(.p-treetable-column-sorted):hover {\n background: ").concat(dt("treetable.header.cell.hover.background"), ";\n color: ").concat(dt("treetable.header.cell.hover.color"), ";\n}\n\n.p-treetable-sortable-column:not(.p-treetable-column-sorted):hover .p-treetable-sort-icon {\n color: ").concat(dt("treetable.sort.icon.hover.color"), ";\n}\n\n.p-treetable-column-sorted {\n background: ").concat(dt("treetable.header.cell.selected.background"), ";\n color: ").concat(dt("treetable.header.cell.selected.color"), ";\n}\n\n.p-treetable-column-sorted .p-treetable-sort-icon {\n color: ").concat(dt("treetable.header.cell.selected.color"), ";\n}\n\n.p-treetable-sortable-column:focus-visible {\n box-shadow: ").concat(dt("treetable.header.cell.focus.ring.shadow"), ";\n outline: ").concat(dt("treetable.header.cell.focus.ring.width"), " ").concat(dt("treetable.header.cell.focus.ring.style"), " ").concat(dt("treetable.header.cell.focus.ring.color"), ";\n outline-offset: ").concat(dt("treetable.header.cell.focus.ring.offset"), ";\n}\n\n.p-treetable-hoverable .p-treetable-selectable-row {\n cursor: pointer;\n}\n\n.p-treetable-loading-icon {\n font-size: ").concat(dt("treetable.loading.icon.size"), ";\n width: ").concat(dt("treetable.loading.icon.size"), ";\n height: ").concat(dt("treetable.loading.icon.size"), ";\n}\n\n.p-treetable-gridlines .p-treetable-header {\n border-width: 1px 1px 0 1px;\n}\n\n.p-treetable-gridlines .p-treetable-footer {\n border-width: 0 1px 1px 1px;\n}\n\n.p-treetable-gridlines .p-treetable-paginator-top {\n border-width: 1px 1px 0 1px;\n}\n\n.p-treetable-gridlines .p-treetable-paginator-bottom {\n border-width: 0 1px 1px 1px;\n}\n\n.p-treetable-gridlines .p-treetable-thead > tr > th {\n border-width: 1px 0 1px 1px;\n}\n\n.p-treetable-gridlines .p-treetable-thead > tr > th:last-child {\n border-width: 1px;\n}\n\n.p-treetable-gridlines .p-treetable-tbody > tr > td {\n border-width: 1px 0 0 1px;\n}\n\n.p-treetable-gridlines .p-treetable-tbody > tr > td:last-child {\n border-width: 1px 1px 0 1px;\n}\n\n.p-treetable-gridlines .p-treetable-tbody > tr:last-child > td {\n border-width: 1px 0 1px 1px;\n}\n\n.p-treetable-gridlines .p-treetable-tbody > tr:last-child > td:last-child {\n border-width: 1px;\n}\n\n.p-treetable-gridlines .p-treetable-tfoot > tr > td {\n border-width: 1px 0 1px 1px;\n}\n\n.p-treetable-gridlines .p-treetable-tfoot > tr > td:last-child {\n border-width: 1px 1px 1px 1px;\n}\n\n.p-treetable.p-treetable-gridlines .p-treetable-thead + .p-treetable-tfoot > tr > td {\n border-width: 0 0 1px 1px;\n}\n\n.p-treetable.p-treetable-gridlines .p-treetable-thead + .p-treetable-tfoot > tr > td:last-child {\n border-width: 0 1px 1px 1px;\n}\n\n.p-treetable.p-treetable-gridlines:has(.p-treetable-thead):has(.p-treetable-tbody) .p-treetable-tbody > tr > td {\n border-width: 0 0 1px 1px;\n}\n\n.p-treetable.p-treetable-gridlines:has(.p-treetable-thead):has(.p-treetable-tbody) .p-treetable-tbody > tr > td:last-child {\n border-width: 0 1px 1px 1px;\n}\n\n.p-treetable.p-treetable-gridlines:has(.p-treetable-tbody):has(.p-treetable-tfoot) .p-treetable-tbody > tr:last-child > td {\n border-width: 0 0 0 1px;\n}\n\n.p-treetable.p-treetable-gridlines:has(.p-treetable-tbody):has(.p-treetable-tfoot) .p-treetable-tbody > tr:last-child > td:last-child {\n border-width: 0 1px 0 1px;\n}\n\n.p-treetable.p-treetable-sm .p-treetable-header {\n padding: 0.375rem 0.5rem;\n}\n\n.p-treetable.p-treetable-sm .p-treetable-thead > tr > th {\n padding: 0.375rem 0.5rem;\n}\n\n.p-treetable.p-treetable-sm .p-treetable-tbody > tr > td {\n padding: 0.375rem 0.5rem;\n}\n\n.p-treetable.p-treetable-sm .p-treetable-tfoot > tr > td {\n padding: 0.375rem 0.5rem;\n}\n\n.p-treetable.p-treetable-sm .p-treetable-footer {\n padding: 0.375rem 0.5rem;\n}\n\n.p-treetable.p-treetable-lg .p-treetable-header {\n padding: 0.9375rem 1.25rem;\n}\n\n.p-treetable.p-treetable-lg .p-treetable-thead > tr > th {\n padding: 0.9375rem 1.25rem;\n}\n\n.p-treetable.p-treetable-lg .p-treetable-tbody > tr > td {\n padding: 0.9375rem 1.25rem;\n}\n\n.p-treetable.p-treetable-lg .p-treetable-tfoot > tr > td {\n padding: 0.9375rem 1.25rem;\n}\n\n.p-treetable.p-treetable-lg .p-treetable-footer {\n padding: 0.9375rem 1.25rem;\n}\n\n.p-treetable-body-cell-content {\n display: flex;\n align-items: center;\n gap: ").concat(dt("treetable.body.cell.gap"), ";\n}\n\n.p-treetable-tbody > tr.p-treetable-row-selected .p-treetable-node-toggle-button {\n color: inherit;\n}\n\n.p-treetable-node-toggle-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n position: relative;\n width: ").concat(dt("treetable.node.toggle.button.size"), ";\n height: ").concat(dt("treetable.node.toggle.button.size"), ";\n color: ").concat(dt("treetable.node.toggle.button.color"), ";\n border: 0 none;\n background: transparent;\n cursor: pointer;\n border-radius: ").concat(dt("treetable.node.toggle.button.border.radius"), ";\n transition: background ").concat(dt("treetable.transition.duration"), ", color ").concat(dt("treetable.transition.duration"), ", border-color ").concat(dt("treetable.transition.duration"), ",\n outline-color ").concat(dt("treetable.transition.duration"), ", box-shadow ").concat(dt("treetable.transition.duration"), ";\n outline-color: transparent;\n user-select: none;\n}\n\n.p-treetable-node-toggle-button:enabled:hover {\n color: ").concat(dt("treetable.node.toggle.button.hover.color"), ";\n background: ").concat(dt("treetable.node.toggle.button.hover.background"), ";\n}\n\n.p-treetable-tbody > tr.p-treetable-row-selected .p-treetable-node-toggle-button:hover {\n background: ").concat(dt("treetable.node.toggle.button.selected.hover.background"), ";\n color: ").concat(dt("treetable.node.toggle.button.selected.hover.color"), ";\n}\n\n.p-treetable-node-toggle-button:focus-visible {\n box-shadow: ").concat(dt("treetable.node.toggle.button.focus.ring.shadow"), ";\n outline: ").concat(dt("treetable.node.toggle.button.focus.ring.width"), " ").concat(dt("treetable.node.toggle.button.focus.ring.style"), " ").concat(dt("treetable.node.toggle.button.focus.ring.color"), ";\n outline-offset: ").concat(dt("treetable.node.toggle.button.focus.ring.offset"), ";\n}\n\n.p-treetable-node-toggle-icon:dir(rtl) {\n transform: rotate(180deg);\n}\n"); +}, "theme"); +var classes = { + root: /* @__PURE__ */ __name(function root34(_ref2) { + var instance = _ref2.instance, props = _ref2.props; + return ["p-treetable p-component", { + "p-treetable-hoverable": props.rowHover || instance.rowSelectionMode, + "p-treetable-resizable": props.resizableColumns, + "p-treetable-resizable-fit": props.resizableColumns && props.columnResizeMode === "fit", + "p-treetable-scrollable": props.scrollable, + "p-treetable-flex-scrollable": props.scrollable && props.scrollHeight === "flex", + "p-treetable-gridlines": props.showGridlines, + "p-treetable-sm": props.size === "small", + "p-treetable-lg": props.size === "large" + }]; + }, "root"), + loading: "p-treetable-loading", + //TODO: required? + mask: "p-treetable-mask p-overlay-mask", + loadingIcon: "p-treetable-loading-icon", + header: "p-treetable-header", + paginator: /* @__PURE__ */ __name(function paginator(_ref3) { + var position = _ref3.position; + return "p-treetable-paginator-" + position; + }, "paginator"), + tableContainer: "p-treetable-table-container", + table: /* @__PURE__ */ __name(function table(_ref4) { + var props = _ref4.props; + return ["p-treetable-table", { + "p-treetable-scrollable-table": props.scrollable, + "p-treetable-resizable-table": props.resizableColumns, + "p-treetable-resizable-table-fit": props.resizableColumns && props.columnResizeMode === "fit" + }]; + }, "table"), + thead: "p-treetable-thead", + headerCell: /* @__PURE__ */ __name(function headerCell(_ref5) { + var instance = _ref5.instance, props = _ref5.props, context = _ref5.context; + return ["p-treetable-header-cell", { + "p-treetable-sortable-column": instance.columnProp("sortable"), + "p-treetable-resizable-column": props.resizableColumns, + "p-treetable-column-sorted": context === null || context === void 0 ? void 0 : context.sorted, + "p-treetable-frozen-column": instance.columnProp("frozen") + }]; + }, "headerCell"), + columnResizer: "p-treetable-column-resizer", + columnHeaderContent: "p-treetable-column-header-content", + columnTitle: "p-treetable-column-title", + sortIcon: "p-treetable-sort-icon", + pcSortBadge: "p-treetable-sort-badge", + tbody: "p-treetable-tbody", + row: /* @__PURE__ */ __name(function row(_ref6) { + var props = _ref6.props, instance = _ref6.instance; + return [{ + "p-treetable-row-selected": instance.selected, + "p-treetable-contextmenu-row-selected": props.contextMenuSelection && instance.isSelectedWithContextMenu + }]; + }, "row"), + bodyCell: /* @__PURE__ */ __name(function bodyCell(_ref7) { + var instance = _ref7.instance; + return [{ + "p-treetable-frozen-column": instance.columnProp("frozen") + }]; + }, "bodyCell"), + bodyCellContent: /* @__PURE__ */ __name(function bodyCellContent(_ref8) { + var instance = _ref8.instance; + return ["p-treetable-body-cell-content", { + "p-treetable-body-cell-content-expander": instance.columnProp("expander") + }]; + }, "bodyCellContent"), + nodeToggleButton: "p-treetable-node-toggle-button", + nodeToggleIcon: "p-treetable-node-toggle-icon", + pcNodeCheckbox: "p-treetable-node-checkbox", + emptyMessage: "p-treetable-empty-message", + tfoot: "p-treetable-tfoot", + footerCell: /* @__PURE__ */ __name(function footerCell(_ref9) { + var instance = _ref9.instance; + return [{ + "p-treetable-frozen-column": instance.columnProp("frozen") + }]; + }, "footerCell"), + footer: "p-treetable-footer", + columnResizeIndicator: "p-treetable-column-resize-indicator" +}; +var inlineStyles = { + tableContainer: { + overflow: "auto" + }, + thead: { + position: "sticky" + }, + tfoot: { + position: "sticky" + } +}; +var TreeTableStyle = BaseStyle.extend({ + name: "treetable", + theme: theme40, + classes, + inlineStyles +}); +var script$5 = { + name: "BaseTreeTable", + "extends": script$1d, + props: { + value: { + type: null, + "default": null + }, + dataKey: { + type: [String, Function], + "default": "key" + }, + expandedKeys: { + type: null, + "default": null + }, + selectionKeys: { + type: null, + "default": null + }, + selectionMode: { + type: String, + "default": null + }, + metaKeySelection: { + type: Boolean, + "default": false + }, + contextMenu: { + type: Boolean, + "default": false + }, + contextMenuSelection: { + type: Object, + "default": null + }, + rows: { + type: Number, + "default": 0 + }, + first: { + type: Number, + "default": 0 + }, + totalRecords: { + type: Number, + "default": 0 + }, + paginator: { + type: Boolean, + "default": false + }, + paginatorPosition: { + type: String, + "default": "bottom" + }, + alwaysShowPaginator: { + type: Boolean, + "default": true + }, + paginatorTemplate: { + type: String, + "default": "FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink RowsPerPageDropdown" + }, + pageLinkSize: { + type: Number, + "default": 5 + }, + rowsPerPageOptions: { + type: Array, + "default": null + }, + currentPageReportTemplate: { + type: String, + "default": "({currentPage} of {totalPages})" + }, + lazy: { + type: Boolean, + "default": false + }, + loading: { + type: Boolean, + "default": false + }, + loadingIcon: { + type: String, + "default": void 0 + }, + loadingMode: { + type: String, + "default": "mask" + }, + rowHover: { + type: Boolean, + "default": false + }, + autoLayout: { + type: Boolean, + "default": false + }, + sortField: { + type: [String, Function], + "default": null + }, + sortOrder: { + type: Number, + "default": null + }, + defaultSortOrder: { + type: Number, + "default": 1 + }, + multiSortMeta: { + type: Array, + "default": null + }, + sortMode: { + type: String, + "default": "single" + }, + removableSort: { + type: Boolean, + "default": false + }, + filters: { + type: Object, + "default": null + }, + filterMode: { + type: String, + "default": "lenient" + }, + filterLocale: { + type: String, + "default": void 0 + }, + resizableColumns: { + type: Boolean, + "default": false + }, + columnResizeMode: { + type: String, + "default": "fit" + }, + indentation: { + type: Number, + "default": 1 + }, + showGridlines: { + type: Boolean, + "default": false + }, + scrollable: { + type: Boolean, + "default": false + }, + scrollHeight: { + type: String, + "default": null + }, + size: { + type: String, + "default": null + }, + tableStyle: { + type: null, + "default": null + }, + tableClass: { + type: [String, Object], + "default": null + }, + tableProps: { + type: Object, + "default": null + } + }, + style: TreeTableStyle, + provide: /* @__PURE__ */ __name(function provide51() { + return { + $pcTreeTable: this, + $parentInstance: this + }; + }, "provide") +}; +var script$4 = { + name: "FooterCell", + hostName: "TreeTable", + "extends": script$1d, + props: { + column: { + type: Object, + "default": null + }, + index: { + type: Number, + "default": null + } + }, + data: /* @__PURE__ */ __name(function data37() { + return { + styleObject: {} + }; + }, "data"), + mounted: /* @__PURE__ */ __name(function mounted41() { + if (this.columnProp("frozen")) { + this.updateStickyPosition(); + } + }, "mounted"), + updated: /* @__PURE__ */ __name(function updated10() { + if (this.columnProp("frozen")) { + this.updateStickyPosition(); + } + }, "updated"), + methods: { + columnProp: /* @__PURE__ */ __name(function columnProp(prop) { + return getVNodeProp(this.column, prop); + }, "columnProp"), + getColumnPT: /* @__PURE__ */ __name(function getColumnPT(key) { + var _this$$parentInstance; + var columnMetaData = { + props: this.column.props, + parent: { + instance: this, + props: this.$props, + state: this.$data + }, + context: { + index: this.index, + frozen: this.columnProp("frozen"), + size: (_this$$parentInstance = this.$parentInstance) === null || _this$$parentInstance === void 0 ? void 0 : _this$$parentInstance.size + } + }; + return mergeProps(this.ptm("column.".concat(key), { + column: columnMetaData + }), this.ptm("column.".concat(key), columnMetaData), this.ptmo(this.getColumnProp(), key, columnMetaData)); + }, "getColumnPT"), + getColumnProp: /* @__PURE__ */ __name(function getColumnProp() { + return this.column.props && this.column.props.pt ? this.column.props.pt : void 0; + }, "getColumnProp"), + updateStickyPosition: /* @__PURE__ */ __name(function updateStickyPosition() { + if (this.columnProp("frozen")) { + var align = this.columnProp("alignFrozen"); + if (align === "right") { + var pos = 0; + var next = getNextElementSibling(this.$el, '[data-p-frozen-column="true"]'); + if (next) { + pos = getOuterWidth(next) + parseFloat(next.style.right || 0); + } + this.styleObject.insetInlineEnd = pos + "px"; + } else { + var _pos = 0; + var prev = getPreviousElementSibling(this.$el, '[data-p-frozen-column="true"]'); + if (prev) { + _pos = getOuterWidth(prev) + parseFloat(prev.style.left || 0); + } + this.styleObject.insetInlineStart = _pos + "px"; + } + } + }, "updateStickyPosition") + }, + computed: { + containerClass: /* @__PURE__ */ __name(function containerClass4() { + return [this.columnProp("footerClass"), this.columnProp("class"), this.cx("footerCell")]; + }, "containerClass"), + containerStyle: /* @__PURE__ */ __name(function containerStyle2() { + var bodyStyle = this.columnProp("footerStyle"); + var columnStyle = this.columnProp("style"); + return this.columnProp("frozen") ? [columnStyle, bodyStyle, this.styleObject] : [columnStyle, bodyStyle]; + }, "containerStyle") + } +}; +function _typeof$5(o) { + "@babel/helpers - typeof"; + return _typeof$5 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$5(o); +} +__name(_typeof$5, "_typeof$5"); +function ownKeys$5(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$5, "ownKeys$5"); +function _objectSpread$5(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$5(Object(t2), true).forEach(function(r2) { + _defineProperty$5(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$5(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$5, "_objectSpread$5"); +function _defineProperty$5(e, r, t2) { + return (r = _toPropertyKey$5(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$5, "_defineProperty$5"); +function _toPropertyKey$5(t2) { + var i = _toPrimitive$5(t2, "string"); + return "symbol" == _typeof$5(i) ? i : i + ""; +} +__name(_toPropertyKey$5, "_toPropertyKey$5"); +function _toPrimitive$5(t2, r) { + if ("object" != _typeof$5(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$5(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$5, "_toPrimitive$5"); +var _hoisted_1$4 = ["data-p-frozen-column"]; +function render$4(_ctx, _cache, $props, $setup, $data, $options) { + return openBlock(), createElementBlock("td", mergeProps({ + style: $options.containerStyle, + "class": $options.containerClass, + role: "cell" + }, _objectSpread$5(_objectSpread$5({}, $options.getColumnPT("root")), $options.getColumnPT("footerCell")), { + "data-p-frozen-column": $options.columnProp("frozen") + }), [$props.column.children && $props.column.children.footer ? (openBlock(), createBlock(resolveDynamicComponent($props.column.children.footer), { + key: 0, + column: $props.column + }, null, 8, ["column"])) : createCommentVNode("", true), $options.columnProp("footer") ? (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + "class": _ctx.cx("columnFooter") + }, $options.getColumnPT("columnFooter")), toDisplayString($options.columnProp("footer")), 17)) : createCommentVNode("", true)], 16, _hoisted_1$4); +} +__name(render$4, "render$4"); +script$4.render = render$4; +var script$3 = { + name: "HeaderCell", + hostName: "TreeTable", + "extends": script$1d, + emits: ["column-click", "column-resizestart"], + props: { + column: { + type: Object, + "default": null + }, + resizableColumns: { + type: Boolean, + "default": false + }, + sortField: { + type: [String, Function], + "default": null + }, + sortOrder: { + type: Number, + "default": null + }, + multiSortMeta: { + type: Array, + "default": null + }, + sortMode: { + type: String, + "default": "single" + }, + index: { + type: Number, + "default": null + } + }, + data: /* @__PURE__ */ __name(function data38() { + return { + styleObject: {} + }; + }, "data"), + mounted: /* @__PURE__ */ __name(function mounted42() { + if (this.columnProp("frozen")) { + this.updateStickyPosition(); + } + }, "mounted"), + updated: /* @__PURE__ */ __name(function updated11() { + if (this.columnProp("frozen")) { + this.updateStickyPosition(); + } + }, "updated"), + methods: { + columnProp: /* @__PURE__ */ __name(function columnProp2(prop) { + return getVNodeProp(this.column, prop); + }, "columnProp"), + getColumnPT: /* @__PURE__ */ __name(function getColumnPT2(key) { + var _this$$parentInstance; + var columnMetaData = { + props: this.column.props, + parent: { + instance: this, + props: this.$props, + state: this.$data + }, + context: { + index: this.index, + sorted: this.isColumnSorted(), + frozen: this.$parentInstance.scrollable && this.columnProp("frozen"), + resizable: this.resizableColumns, + scrollable: this.$parentInstance.scrollable, + showGridlines: this.$parentInstance.showGridlines, + size: (_this$$parentInstance = this.$parentInstance) === null || _this$$parentInstance === void 0 ? void 0 : _this$$parentInstance.size + } + }; + return mergeProps(this.ptm("column.".concat(key), { + column: columnMetaData + }), this.ptm("column.".concat(key), columnMetaData), this.ptmo(this.getColumnProp(), key, columnMetaData)); + }, "getColumnPT"), + getColumnProp: /* @__PURE__ */ __name(function getColumnProp2() { + return this.column.props && this.column.props.pt ? this.column.props.pt : void 0; + }, "getColumnProp"), + updateStickyPosition: /* @__PURE__ */ __name(function updateStickyPosition2() { + if (this.columnProp("frozen")) { + var align = this.columnProp("alignFrozen"); + if (align === "right") { + var pos = 0; + var next = getNextElementSibling(this.$el, '[data-p-frozen-column="true"]'); + if (next) { + pos = getOuterWidth(next) + parseFloat(next.style.right || 0); + } + this.styleObject.insetInlineEnd = pos + "px"; + } else { + var _pos = 0; + var prev = getPreviousElementSibling(this.$el, '[data-p-frozen-column="true"]'); + if (prev) { + _pos = getOuterWidth(prev) + parseFloat(prev.style.left || 0); + } + this.styleObject.insetInlineStart = _pos + "px"; + } + var filterRow = this.$el.parentElement.nextElementSibling; + if (filterRow) { + var index = getIndex(this.$el); + filterRow.children[index].style.left = this.styleObject.left; + filterRow.children[index].style.right = this.styleObject.right; + } + } + }, "updateStickyPosition"), + onClick: /* @__PURE__ */ __name(function onClick9(event2) { + this.$emit("column-click", { + originalEvent: event2, + column: this.column + }); + }, "onClick"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown13(event2) { + if ((event2.code === "Enter" || event2.code === "NumpadEnter" || event2.code === "Space") && event2.currentTarget.nodeName === "TH" && getAttribute(event2.currentTarget, "data-p-sortable-column")) { + this.$emit("column-click", { + originalEvent: event2, + column: this.column + }); + event2.preventDefault(); + } + }, "onKeyDown"), + onResizeStart: /* @__PURE__ */ __name(function onResizeStart(event2) { + this.$emit("column-resizestart", event2); + }, "onResizeStart"), + getMultiSortMetaIndex: /* @__PURE__ */ __name(function getMultiSortMetaIndex() { + var index = -1; + for (var i = 0; i < this.multiSortMeta.length; i++) { + var meta = this.multiSortMeta[i]; + if (meta.field === this.columnProp("field") || meta.field === this.columnProp("sortField")) { + index = i; + break; + } + } + return index; + }, "getMultiSortMetaIndex"), + isMultiSorted: /* @__PURE__ */ __name(function isMultiSorted() { + return this.columnProp("sortable") && this.getMultiSortMetaIndex() > -1; + }, "isMultiSorted"), + isColumnSorted: /* @__PURE__ */ __name(function isColumnSorted() { + return this.sortMode === "single" ? this.sortField && (this.sortField === this.columnProp("field") || this.sortField === this.columnProp("sortField")) : this.isMultiSorted(); + }, "isColumnSorted") + }, + computed: { + containerClass: /* @__PURE__ */ __name(function containerClass5() { + return [this.columnProp("headerClass"), this.columnProp("class"), this.cx("headerCell")]; + }, "containerClass"), + containerStyle: /* @__PURE__ */ __name(function containerStyle3() { + var headerStyle = this.columnProp("headerStyle"); + var columnStyle = this.columnProp("style"); + return this.columnProp("frozen") ? [columnStyle, headerStyle, this.styleObject] : [columnStyle, headerStyle]; + }, "containerStyle"), + sortState: /* @__PURE__ */ __name(function sortState() { + var sorted2 = false; + var sortOrder3 = null; + if (this.sortMode === "single") { + sorted2 = this.sortField && (this.sortField === this.columnProp("field") || this.sortField === this.columnProp("sortField")); + sortOrder3 = sorted2 ? this.sortOrder : 0; + } else if (this.sortMode === "multiple") { + var metaIndex = this.getMultiSortMetaIndex(); + if (metaIndex > -1) { + sorted2 = true; + sortOrder3 = this.multiSortMeta[metaIndex].order; + } + } + return { + sorted: sorted2, + sortOrder: sortOrder3 + }; + }, "sortState"), + sortableColumnIcon: /* @__PURE__ */ __name(function sortableColumnIcon() { + var _this$sortState = this.sortState, sorted2 = _this$sortState.sorted, sortOrder3 = _this$sortState.sortOrder; + if (!sorted2) return script$1V; + else if (sorted2 && sortOrder3 > 0) return script$1W; + else if (sorted2 && sortOrder3 < 0) return script$1X; + return null; + }, "sortableColumnIcon"), + ariaSort: /* @__PURE__ */ __name(function ariaSort() { + if (this.columnProp("sortable")) { + var _this$sortState2 = this.sortState, sorted2 = _this$sortState2.sorted, sortOrder3 = _this$sortState2.sortOrder; + if (sorted2 && sortOrder3 < 0) return "descending"; + else if (sorted2 && sortOrder3 > 0) return "ascending"; + else return "none"; + } else { + return null; + } + }, "ariaSort") + }, + components: { + Badge: script$1z, + SortAltIcon: script$1V, + SortAmountUpAltIcon: script$1W, + SortAmountDownIcon: script$1X + } +}; +function _typeof$4(o) { + "@babel/helpers - typeof"; + return _typeof$4 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$4(o); +} +__name(_typeof$4, "_typeof$4"); +function ownKeys$4(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$4, "ownKeys$4"); +function _objectSpread$4(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$4(Object(t2), true).forEach(function(r2) { + _defineProperty$4(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$4(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$4, "_objectSpread$4"); +function _defineProperty$4(e, r, t2) { + return (r = _toPropertyKey$4(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$4, "_defineProperty$4"); +function _toPropertyKey$4(t2) { + var i = _toPrimitive$4(t2, "string"); + return "symbol" == _typeof$4(i) ? i : i + ""; +} +__name(_toPropertyKey$4, "_toPropertyKey$4"); +function _toPrimitive$4(t2, r) { + if ("object" != _typeof$4(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$4(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$4, "_toPrimitive$4"); +var _hoisted_1$3$1 = ["tabindex", "aria-sort", "data-p-sortable-column", "data-p-resizable-column", "data-p-sorted", "data-p-frozen-column"]; +function render$3(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Badge = resolveComponent("Badge"); + return openBlock(), createElementBlock("th", mergeProps({ + "class": $options.containerClass, + style: [$options.containerStyle], + onClick: _cache[1] || (_cache[1] = function() { + return $options.onClick && $options.onClick.apply($options, arguments); + }), + onKeydown: _cache[2] || (_cache[2] = function() { + return $options.onKeyDown && $options.onKeyDown.apply($options, arguments); + }), + tabindex: $options.columnProp("sortable") ? "0" : null, + "aria-sort": $options.ariaSort, + role: "columnheader" + }, _objectSpread$4(_objectSpread$4({}, $options.getColumnPT("root")), $options.getColumnPT("headerCell")), { + "data-p-sortable-column": $options.columnProp("sortable"), + "data-p-resizable-column": $props.resizableColumns, + "data-p-sorted": $options.isColumnSorted(), + "data-p-frozen-column": $options.columnProp("frozen") + }), [$props.resizableColumns && !$options.columnProp("frozen") ? (openBlock(), createElementBlock("span", mergeProps({ + key: 0, + "class": _ctx.cx("columnResizer"), + onMousedown: _cache[0] || (_cache[0] = function() { + return $options.onResizeStart && $options.onResizeStart.apply($options, arguments); + }) + }, $options.getColumnPT("columnResizer")), null, 16)) : createCommentVNode("", true), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("columnHeaderContent") + }, $options.getColumnPT("columnHeaderContent")), [$props.column.children && $props.column.children.header ? (openBlock(), createBlock(resolveDynamicComponent($props.column.children.header), { + key: 0, + column: $props.column + }, null, 8, ["column"])) : createCommentVNode("", true), $options.columnProp("header") ? (openBlock(), createElementBlock("span", mergeProps({ + key: 1, + "class": _ctx.cx("columnTitle") + }, $options.getColumnPT("columnTitle")), toDisplayString($options.columnProp("header")), 17)) : createCommentVNode("", true), $options.columnProp("sortable") ? (openBlock(), createElementBlock("span", normalizeProps(mergeProps({ + key: 2 + }, $options.getColumnPT("sort"))), [(openBlock(), createBlock(resolveDynamicComponent($props.column.children && $props.column.children.sorticon || $options.sortableColumnIcon), mergeProps({ + sorted: $options.sortState.sorted, + sortOrder: $options.sortState.sortOrder, + "class": _ctx.cx("sortIcon") + }, $options.getColumnPT("sortIcon")), null, 16, ["sorted", "sortOrder", "class"]))], 16)) : createCommentVNode("", true), $options.isMultiSorted() ? (openBlock(), createBlock(_component_Badge, mergeProps({ + key: 3, + "class": _ctx.cx("pcSortBadge") + }, $options.getColumnPT("pcSortBadge"), { + value: $options.getMultiSortMetaIndex() + 1, + size: "small" + }), null, 16, ["class", "value"])) : createCommentVNode("", true)], 16)], 16, _hoisted_1$3$1); +} +__name(render$3, "render$3"); +script$3.render = render$3; +var script$2 = { + name: "BodyCell", + hostName: "TreeTable", + "extends": script$1d, + emits: ["node-toggle", "checkbox-toggle"], + props: { + node: { + type: Object, + "default": null + }, + column: { + type: Object, + "default": null + }, + level: { + type: Number, + "default": 0 + }, + indentation: { + type: Number, + "default": 1 + }, + leaf: { + type: Boolean, + "default": false + }, + expanded: { + type: Boolean, + "default": false + }, + selectionMode: { + type: String, + "default": null + }, + checked: { + type: Boolean, + "default": false + }, + partialChecked: { + type: Boolean, + "default": false + }, + templates: { + type: Object, + "default": null + }, + index: { + type: Number, + "default": null + }, + loadingMode: { + type: String, + "default": "mask" + } + }, + data: /* @__PURE__ */ __name(function data39() { + return { + styleObject: {} + }; + }, "data"), + mounted: /* @__PURE__ */ __name(function mounted43() { + if (this.columnProp("frozen")) { + this.updateStickyPosition(); + } + }, "mounted"), + updated: /* @__PURE__ */ __name(function updated12() { + if (this.columnProp("frozen")) { + this.updateStickyPosition(); + } + }, "updated"), + methods: { + toggle: /* @__PURE__ */ __name(function toggle4() { + this.$emit("node-toggle", this.node); + }, "toggle"), + columnProp: /* @__PURE__ */ __name(function columnProp3(prop) { + return getVNodeProp(this.column, prop); + }, "columnProp"), + getColumnPT: /* @__PURE__ */ __name(function getColumnPT3(key) { + var _this$$parentInstance; + var columnMetaData = { + props: this.column.props, + parent: { + instance: this, + props: this.$props, + state: this.$data + }, + context: { + index: this.index, + selectable: this.$parentInstance.rowHover || this.$parentInstance.rowSelectionMode, + selected: this.$parent.selected, + frozen: this.columnProp("frozen"), + scrollable: this.$parentInstance.scrollable, + showGridlines: this.$parentInstance.showGridlines, + size: (_this$$parentInstance = this.$parentInstance) === null || _this$$parentInstance === void 0 ? void 0 : _this$$parentInstance.size + } + }; + return mergeProps(this.ptm("column.".concat(key), { + column: columnMetaData + }), this.ptm("column.".concat(key), columnMetaData), this.ptmo(this.getColumnProp(), key, columnMetaData)); + }, "getColumnPT"), + getColumnProp: /* @__PURE__ */ __name(function getColumnProp3() { + return this.column.props && this.column.props.pt ? this.column.props.pt : void 0; + }, "getColumnProp"), + getColumnCheckboxPT: /* @__PURE__ */ __name(function getColumnCheckboxPT(key) { + var columnMetaData = { + props: this.column.props, + parent: { + instance: this, + props: this.$props, + state: this.$data + }, + context: { + checked: this.checked, + partialChecked: this.partialChecked + } + }; + return mergeProps(this.ptm("column.".concat(key), { + column: columnMetaData + }), this.ptm("column.".concat(key), columnMetaData), this.ptmo(this.getColumnProp(), key, columnMetaData)); + }, "getColumnCheckboxPT"), + updateStickyPosition: /* @__PURE__ */ __name(function updateStickyPosition3() { + if (this.columnProp("frozen")) { + var align = this.columnProp("alignFrozen"); + if (align === "right") { + var pos = 0; + var next = getNextElementSibling(this.$el, '[data-p-frozen-column="true"]'); + if (next) { + pos = getOuterWidth(next) + parseFloat(next.style.right || 0); + } + this.styleObject.insetInlineEnd = pos + "px"; + } else { + var _pos = 0; + var prev = getPreviousElementSibling(this.$el, '[data-p-frozen-column="true"]'); + if (prev) { + _pos = getOuterWidth(prev) + parseFloat(prev.style.left || 0); + } + this.styleObject.insetInlineStart = _pos + "px"; + } + } + }, "updateStickyPosition"), + resolveFieldData: /* @__PURE__ */ __name(function resolveFieldData$1(rowData, field) { + return resolveFieldData(rowData, field); + }, "resolveFieldData$1"), + toggleCheckbox: /* @__PURE__ */ __name(function toggleCheckbox() { + this.$emit("checkbox-toggle"); + }, "toggleCheckbox") + }, + computed: { + containerClass: /* @__PURE__ */ __name(function containerClass6() { + return [this.columnProp("bodyClass"), this.columnProp("class"), this.cx("bodyCell")]; + }, "containerClass"), + containerStyle: /* @__PURE__ */ __name(function containerStyle4() { + var bodyStyle = this.columnProp("bodyStyle"); + var columnStyle = this.columnProp("style"); + return this.columnProp("frozen") ? [columnStyle, bodyStyle, this.styleObject] : [columnStyle, bodyStyle]; + }, "containerStyle"), + togglerStyle: /* @__PURE__ */ __name(function togglerStyle() { + return { + marginLeft: this.level * this.indentation + "rem", + visibility: this.leaf ? "hidden" : "visible" + }; + }, "togglerStyle"), + checkboxSelectionMode: /* @__PURE__ */ __name(function checkboxSelectionMode() { + return this.selectionMode === "checkbox"; + }, "checkboxSelectionMode") + }, + components: { + Checkbox: script$1J, + ChevronRightIcon: script$1l, + ChevronDownIcon: script$1k, + CheckIcon: script$1D, + MinusIcon: script$1y, + SpinnerIcon: script$1r + }, + directives: { + ripple: Ripple + } +}; +function _typeof$3(o) { + "@babel/helpers - typeof"; + return _typeof$3 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$3(o); +} +__name(_typeof$3, "_typeof$3"); +function ownKeys$3(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$3, "ownKeys$3"); +function _objectSpread$3(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$3(Object(t2), true).forEach(function(r2) { + _defineProperty$3(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$3(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$3, "_objectSpread$3"); +function _defineProperty$3(e, r, t2) { + return (r = _toPropertyKey$3(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$3, "_defineProperty$3"); +function _toPropertyKey$3(t2) { + var i = _toPrimitive$3(t2, "string"); + return "symbol" == _typeof$3(i) ? i : i + ""; +} +__name(_toPropertyKey$3, "_toPropertyKey$3"); +function _toPrimitive$3(t2, r) { + if ("object" != _typeof$3(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$3(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$3, "_toPrimitive$3"); +var _hoisted_1$2$1 = ["data-p-frozen-column"]; +function render$2(_ctx, _cache, $props, $setup, $data, $options) { + var _component_SpinnerIcon = resolveComponent("SpinnerIcon"); + var _component_Checkbox = resolveComponent("Checkbox"); + var _directive_ripple = resolveDirective("ripple"); + return openBlock(), createElementBlock("td", mergeProps({ + style: $options.containerStyle, + "class": $options.containerClass, + role: "cell" + }, _objectSpread$3(_objectSpread$3({}, $options.getColumnPT("root")), $options.getColumnPT("bodyCell")), { + "data-p-frozen-column": $options.columnProp("frozen") + }), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("bodyCellContent") + }, $options.getColumnPT("bodyCellContent")), [$options.columnProp("expander") ? withDirectives((openBlock(), createElementBlock("button", mergeProps({ + key: 0, + type: "button", + "class": _ctx.cx("nodeToggleButton"), + onClick: _cache[0] || (_cache[0] = function() { + return $options.toggle && $options.toggle.apply($options, arguments); + }), + style: $options.togglerStyle, + tabindex: "-1" + }, $options.getColumnPT("nodeToggleButton"), { + "data-pc-group-section": "rowactionbutton" + }), [$props.node.loading && $props.loadingMode === "icon" ? (openBlock(), createElementBlock(Fragment, { + key: 0 + }, [$props.templates["nodetoggleicon"] ? (openBlock(), createBlock(resolveDynamicComponent($props.templates["nodetoggleicon"]), { + key: 0 + })) : createCommentVNode("", true), $props.templates["nodetogglericon"] ? (openBlock(), createBlock(resolveDynamicComponent($props.templates["nodetogglericon"]), { + key: 1 + })) : (openBlock(), createBlock(_component_SpinnerIcon, mergeProps({ + key: 2, + spin: "" + }, _ctx.ptm("nodetoggleicon")), null, 16))], 64)) : (openBlock(), createElementBlock(Fragment, { + key: 1 + }, [$props.column.children && $props.column.children.rowtoggleicon ? (openBlock(), createBlock(resolveDynamicComponent($props.column.children.rowtoggleicon), { + key: 0, + node: $props.node, + expanded: $props.expanded, + "class": normalizeClass(_ctx.cx("nodeToggleIcon")) + }, null, 8, ["node", "expanded", "class"])) : createCommentVNode("", true), $props.column.children && $props.column.children.rowtogglericon ? (openBlock(), createBlock(resolveDynamicComponent($props.column.children.rowtogglericon), { + key: 1, + node: $props.node, + expanded: $props.expanded, + "class": normalizeClass(_ctx.cx("nodeToggleIcon")) + }, null, 8, ["node", "expanded", "class"])) : $props.expanded ? (openBlock(), createBlock(resolveDynamicComponent($props.node.expandedIcon ? "span" : "ChevronDownIcon"), mergeProps({ + key: 2, + "class": _ctx.cx("nodeToggleIcon") + }, $options.getColumnPT("nodeToggleIcon")), null, 16, ["class"])) : (openBlock(), createBlock(resolveDynamicComponent($props.node.collapsedIcon ? "span" : "ChevronRightIcon"), mergeProps({ + key: 3, + "class": _ctx.cx("nodeToggleIcon") + }, $options.getColumnPT("nodeToggleIcon")), null, 16, ["class"]))], 64))], 16)), [[_directive_ripple]]) : createCommentVNode("", true), $options.checkboxSelectionMode && $options.columnProp("expander") ? (openBlock(), createBlock(_component_Checkbox, { + key: 1, + modelValue: $props.checked, + binary: true, + "class": normalizeClass(_ctx.cx("pcNodeCheckbox")), + disabled: $props.node.selectable === false, + onChange: $options.toggleCheckbox, + tabindex: -1, + indeterminate: $props.partialChecked, + unstyled: _ctx.unstyled, + pt: $options.getColumnCheckboxPT("pcNodeCheckbox"), + "data-p-partialchecked": $props.partialChecked + }, { + icon: withCtx(function(slotProps) { + return [$props.templates["checkboxicon"] ? (openBlock(), createBlock(resolveDynamicComponent($props.templates["checkboxicon"]), { + key: 0, + checked: slotProps.checked, + partialChecked: $props.partialChecked, + "class": normalizeClass(slotProps["class"]) + }, null, 8, ["checked", "partialChecked", "class"])) : createCommentVNode("", true)]; + }), + _: 1 + }, 8, ["modelValue", "class", "disabled", "onChange", "indeterminate", "unstyled", "pt", "data-p-partialchecked"])) : createCommentVNode("", true), $props.column.children && $props.column.children.body ? (openBlock(), createBlock(resolveDynamicComponent($props.column.children.body), { + key: 2, + node: $props.node, + column: $props.column + }, null, 8, ["node", "column"])) : (openBlock(), createElementBlock(Fragment, { + key: 3 + }, [createTextVNode(toDisplayString($options.resolveFieldData($props.node.data, $options.columnProp("field"))), 1)], 64))], 16)], 16, _hoisted_1$2$1); +} +__name(render$2, "render$2"); +script$2.render = render$2; +function _typeof$2(o) { + "@babel/helpers - typeof"; + return _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$2(o); +} +__name(_typeof$2, "_typeof$2"); +function _createForOfIteratorHelper$1(r, e) { + var t2 = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (!t2) { + if (Array.isArray(r) || (t2 = _unsupportedIterableToArray$1(r)) || e) { + t2 && (r = t2); + var _n = 0, F = /* @__PURE__ */ __name(function F2() { + }, "F"); + return { s: F, n: /* @__PURE__ */ __name(function n() { + return _n >= r.length ? { done: true } : { done: false, value: r[_n++] }; + }, "n"), e: /* @__PURE__ */ __name(function e2(r2) { + throw r2; + }, "e"), f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var o, a = true, u = false; + return { s: /* @__PURE__ */ __name(function s() { + t2 = t2.call(r); + }, "s"), n: /* @__PURE__ */ __name(function n() { + var r2 = t2.next(); + return a = r2.done, r2; + }, "n"), e: /* @__PURE__ */ __name(function e2(r2) { + u = true, o = r2; + }, "e"), f: /* @__PURE__ */ __name(function f() { + try { + a || null == t2["return"] || t2["return"](); + } finally { + if (u) throw o; + } + }, "f") }; +} +__name(_createForOfIteratorHelper$1, "_createForOfIteratorHelper$1"); +function ownKeys$2(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$2, "ownKeys$2"); +function _objectSpread$2(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$2(Object(t2), true).forEach(function(r2) { + _defineProperty$2(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$2(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$2, "_objectSpread$2"); +function _defineProperty$2(e, r, t2) { + return (r = _toPropertyKey$2(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$2, "_defineProperty$2"); +function _toPropertyKey$2(t2) { + var i = _toPrimitive$2(t2, "string"); + return "symbol" == _typeof$2(i) ? i : i + ""; +} +__name(_toPropertyKey$2, "_toPropertyKey$2"); +function _toPrimitive$2(t2, r) { + if ("object" != _typeof$2(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$2(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$2, "_toPrimitive$2"); +function _toConsumableArray$1(r) { + return _arrayWithoutHoles$1(r) || _iterableToArray$1(r) || _unsupportedIterableToArray$1(r) || _nonIterableSpread$1(); +} +__name(_toConsumableArray$1, "_toConsumableArray$1"); +function _nonIterableSpread$1() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread$1, "_nonIterableSpread$1"); +function _unsupportedIterableToArray$1(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray$1(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray$1(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray$1, "_unsupportedIterableToArray$1"); +function _iterableToArray$1(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray$1, "_iterableToArray$1"); +function _arrayWithoutHoles$1(r) { + if (Array.isArray(r)) return _arrayLikeToArray$1(r); +} +__name(_arrayWithoutHoles$1, "_arrayWithoutHoles$1"); +function _arrayLikeToArray$1(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray$1, "_arrayLikeToArray$1"); +var script$1 = { + name: "TreeTableRow", + hostName: "TreeTable", + "extends": script$1d, + emits: ["node-click", "node-toggle", "checkbox-change", "nodeClick", "nodeToggle", "checkboxChange", "row-rightclick", "rowRightclick"], + props: { + node: { + type: null, + "default": null + }, + dataKey: { + type: [String, Function], + "default": "key" + }, + parentNode: { + type: null, + "default": null + }, + columns: { + type: null, + "default": null + }, + expandedKeys: { + type: null, + "default": null + }, + selectionKeys: { + type: null, + "default": null + }, + selectionMode: { + type: String, + "default": null + }, + level: { + type: Number, + "default": 0 + }, + indentation: { + type: Number, + "default": 1 + }, + tabindex: { + type: Number, + "default": -1 + }, + ariaSetSize: { + type: Number, + "default": null + }, + ariaPosInset: { + type: Number, + "default": null + }, + loadingMode: { + type: String, + "default": "mask" + }, + templates: { + type: Object, + "default": null + }, + contextMenu: { + type: Boolean, + "default": false + }, + contextMenuSelection: { + type: Object, + "default": null + } + }, + nodeTouched: false, + methods: { + columnProp: /* @__PURE__ */ __name(function columnProp4(col, prop) { + return getVNodeProp(col, prop); + }, "columnProp"), + toggle: /* @__PURE__ */ __name(function toggle5() { + this.$emit("node-toggle", this.node); + }, "toggle"), + onClick: /* @__PURE__ */ __name(function onClick10(event2) { + if (isClickable(event2.target) || getAttribute(event2.target, "data-pc-section") === "nodetogglebutton" || getAttribute(event2.target, "data-pc-section") === "nodetoggleicon" || event2.target.tagName === "path") { + return; + } + this.setTabIndexForSelectionMode(event2, this.nodeTouched); + this.$emit("node-click", { + originalEvent: event2, + nodeTouched: this.nodeTouched, + node: this.node + }); + this.nodeTouched = false; + }, "onClick"), + onRowRightClick: /* @__PURE__ */ __name(function onRowRightClick(event2) { + this.$emit("row-rightclick", { + originalEvent: event2, + node: this.node + }); + }, "onRowRightClick"), + onTouchEnd: /* @__PURE__ */ __name(function onTouchEnd2() { + this.nodeTouched = true; + }, "onTouchEnd"), + nodeKey: /* @__PURE__ */ __name(function nodeKey(node2) { + return resolveFieldData(node2, this.dataKey); + }, "nodeKey"), + onKeyDown: /* @__PURE__ */ __name(function onKeyDown14(event2, item8) { + switch (event2.code) { + case "ArrowDown": + this.onArrowDownKey(event2); + break; + case "ArrowUp": + this.onArrowUpKey(event2); + break; + case "ArrowLeft": + this.onArrowLeftKey(event2); + break; + case "ArrowRight": + this.onArrowRightKey(event2); + break; + case "Home": + this.onHomeKey(event2); + break; + case "End": + this.onEndKey(event2); + break; + case "Enter": + case "NumpadEnter": + case "Space": + if (!isClickable(event2.target)) { + this.onEnterKey(event2, item8); + } + break; + case "Tab": + this.onTabKey(event2); + break; + } + }, "onKeyDown"), + onArrowDownKey: /* @__PURE__ */ __name(function onArrowDownKey9(event2) { + var nextElementSibling = event2.currentTarget.nextElementSibling; + nextElementSibling && this.focusRowChange(event2.currentTarget, nextElementSibling); + event2.preventDefault(); + }, "onArrowDownKey"), + onArrowUpKey: /* @__PURE__ */ __name(function onArrowUpKey8(event2) { + var previousElementSibling = event2.currentTarget.previousElementSibling; + previousElementSibling && this.focusRowChange(event2.currentTarget, previousElementSibling); + event2.preventDefault(); + }, "onArrowUpKey"), + onArrowRightKey: /* @__PURE__ */ __name(function onArrowRightKey4(event2) { + var _this = this; + var ishiddenIcon = findSingle(event2.currentTarget, "button").style.visibility === "hidden"; + var togglerElement = findSingle(this.$refs.node, '[data-pc-section="nodetogglebutton"]'); + if (ishiddenIcon) return; + !this.expanded && togglerElement.click(); + this.$nextTick(function() { + _this.onArrowDownKey(event2); + }); + event2.preventDefault(); + }, "onArrowRightKey"), + onArrowLeftKey: /* @__PURE__ */ __name(function onArrowLeftKey5(event2) { + if (this.level === 0 && !this.expanded) { + return; + } + var currentTarget = event2.currentTarget; + var ishiddenIcon = findSingle(currentTarget, "button").style.visibility === "hidden"; + var togglerElement = findSingle(currentTarget, '[data-pc-section="nodetogglebutton"]'); + if (this.expanded && !ishiddenIcon) { + togglerElement.click(); + return; + } + var target = this.findBeforeClickableNode(currentTarget); + target && this.focusRowChange(currentTarget, target); + }, "onArrowLeftKey"), + onHomeKey: /* @__PURE__ */ __name(function onHomeKey9(event2) { + var findFirstElement = findSingle(event2.currentTarget.parentElement, 'tr[aria-level="'.concat(this.level + 1, '"]')); + findFirstElement && focus(findFirstElement); + event2.preventDefault(); + }, "onHomeKey"), + onEndKey: /* @__PURE__ */ __name(function onEndKey9(event2) { + var nodes = find(event2.currentTarget.parentElement, 'tr[aria-level="'.concat(this.level + 1, '"]')); + var findFirstElement = nodes[nodes.length - 1]; + focus(findFirstElement); + event2.preventDefault(); + }, "onEndKey"), + onEnterKey: /* @__PURE__ */ __name(function onEnterKey9(event2) { + event2.preventDefault(); + this.setTabIndexForSelectionMode(event2, this.nodeTouched); + if (this.selectionMode === "checkbox") { + this.toggleCheckbox(); + return; + } + this.$emit("node-click", { + originalEvent: event2, + nodeTouched: this.nodeTouched, + node: this.node + }); + this.nodeTouched = false; + }, "onEnterKey"), + onTabKey: /* @__PURE__ */ __name(function onTabKey6() { + var rows3 = _toConsumableArray$1(find(this.$refs.node.parentElement, "tr")); + var hasSelectedRow = rows3.some(function(row2) { + return getAttribute(row2, "data-p-selected") || row2.getAttribute("aria-checked") === "true"; + }); + rows3.forEach(function(row2) { + row2.tabIndex = -1; + }); + if (hasSelectedRow) { + var selectedNodes2 = rows3.filter(function(node2) { + return getAttribute(node2, "data-p-selected") || node2.getAttribute("aria-checked") === "true"; + }); + selectedNodes2[0].tabIndex = 0; + return; + } + rows3[0].tabIndex = 0; + }, "onTabKey"), + focusRowChange: /* @__PURE__ */ __name(function focusRowChange(firstFocusableRow, currentFocusedRow) { + firstFocusableRow.tabIndex = "-1"; + currentFocusedRow.tabIndex = "0"; + focus(currentFocusedRow); + }, "focusRowChange"), + findBeforeClickableNode: /* @__PURE__ */ __name(function findBeforeClickableNode(node2) { + var prevNode = node2.previousElementSibling; + if (prevNode) { + var prevNodeButton = prevNode.querySelector("button"); + if (prevNodeButton && prevNodeButton.style.visibility !== "hidden") { + return prevNode; + } + return this.findBeforeClickableNode(prevNode); + } + return null; + }, "findBeforeClickableNode"), + toggleCheckbox: /* @__PURE__ */ __name(function toggleCheckbox2() { + var _selectionKeys = this.selectionKeys ? _objectSpread$2({}, this.selectionKeys) : {}; + var _check = !this.checked; + this.propagateDown(this.node, _check, _selectionKeys); + this.$emit("checkbox-change", { + node: this.node, + check: _check, + selectionKeys: _selectionKeys + }); + }, "toggleCheckbox"), + propagateDown: /* @__PURE__ */ __name(function propagateDown(node2, check, selectionKeys) { + if (check) selectionKeys[this.nodeKey(node2)] = { + checked: true, + partialChecked: false + }; + else delete selectionKeys[this.nodeKey(node2)]; + if (node2.children && node2.children.length) { + var _iterator = _createForOfIteratorHelper$1(node2.children), _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + var child = _step.value; + this.propagateDown(child, check, selectionKeys); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + }, "propagateDown"), + propagateUp: /* @__PURE__ */ __name(function propagateUp(event2) { + var check = event2.check; + var _selectionKeys = _objectSpread$2({}, event2.selectionKeys); + var checkedChildCount = 0; + var childPartialSelected = false; + var _iterator2 = _createForOfIteratorHelper$1(this.node.children), _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { + var child = _step2.value; + if (_selectionKeys[this.nodeKey(child)] && _selectionKeys[this.nodeKey(child)].checked) checkedChildCount++; + else if (_selectionKeys[this.nodeKey(child)] && _selectionKeys[this.nodeKey(child)].partialChecked) childPartialSelected = true; + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + if (check && checkedChildCount === this.node.children.length) { + _selectionKeys[this.nodeKey(this.node)] = { + checked: true, + partialChecked: false + }; + } else { + if (!check) { + delete _selectionKeys[this.nodeKey(this.node)]; + } + if (childPartialSelected || checkedChildCount > 0 && checkedChildCount !== this.node.children.length) _selectionKeys[this.nodeKey(this.node)] = { + checked: false, + partialChecked: true + }; + else _selectionKeys[this.nodeKey(this.node)] = { + checked: false, + partialChecked: false + }; + } + this.$emit("checkbox-change", { + node: event2.node, + check: event2.check, + selectionKeys: _selectionKeys + }); + }, "propagateUp"), + onCheckboxChange: /* @__PURE__ */ __name(function onCheckboxChange(event2) { + var check = event2.check; + var _selectionKeys = _objectSpread$2({}, event2.selectionKeys); + var checkedChildCount = 0; + var childPartialSelected = false; + var _iterator3 = _createForOfIteratorHelper$1(this.node.children), _step3; + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { + var child = _step3.value; + if (_selectionKeys[this.nodeKey(child)] && _selectionKeys[this.nodeKey(child)].checked) checkedChildCount++; + else if (_selectionKeys[this.nodeKey(child)] && _selectionKeys[this.nodeKey(child)].partialChecked) childPartialSelected = true; + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + if (check && checkedChildCount === this.node.children.length) { + _selectionKeys[this.nodeKey(this.node)] = { + checked: true, + partialChecked: false + }; + } else { + if (!check) { + delete _selectionKeys[this.nodeKey(this.node)]; + } + if (childPartialSelected || checkedChildCount > 0 && checkedChildCount !== this.node.children.length) _selectionKeys[this.nodeKey(this.node)] = { + checked: false, + partialChecked: true + }; + else _selectionKeys[this.nodeKey(this.node)] = { + checked: false, + partialChecked: false + }; + } + this.$emit("checkbox-change", { + node: event2.node, + check: event2.check, + selectionKeys: _selectionKeys + }); + }, "onCheckboxChange"), + setTabIndexForSelectionMode: /* @__PURE__ */ __name(function setTabIndexForSelectionMode(event2, nodeTouched) { + if (this.selectionMode !== null) { + var elements = _toConsumableArray$1(find(this.$refs.node.parentElement, "tr")); + event2.currentTarget.tabIndex = nodeTouched === false ? -1 : 0; + if (elements.every(function(element) { + return element.tabIndex === -1; + })) { + elements[0].tabIndex = 0; + } + } + }, "setTabIndexForSelectionMode") + }, + computed: { + containerClass: /* @__PURE__ */ __name(function containerClass7() { + return [this.node.styleClass, this.cx("row")]; + }, "containerClass"), + expanded: /* @__PURE__ */ __name(function expanded2() { + return this.expandedKeys && this.expandedKeys[this.nodeKey(this.node)] === true; + }, "expanded"), + leaf: /* @__PURE__ */ __name(function leaf2() { + return this.node.leaf === false ? false : !(this.node.children && this.node.children.length); + }, "leaf"), + selected: /* @__PURE__ */ __name(function selected2() { + return this.selectionMode && this.selectionKeys ? this.selectionKeys[this.nodeKey(this.node)] === true : false; + }, "selected"), + isSelectedWithContextMenu: /* @__PURE__ */ __name(function isSelectedWithContextMenu() { + if (this.node && this.contextMenuSelection) { + return equals(this.node, this.contextMenuSelection, this.dataKey); + } + return false; + }, "isSelectedWithContextMenu"), + checked: /* @__PURE__ */ __name(function checked() { + return this.selectionKeys ? this.selectionKeys[this.nodeKey(this.node)] && this.selectionKeys[this.nodeKey(this.node)].checked : false; + }, "checked"), + partialChecked: /* @__PURE__ */ __name(function partialChecked() { + return this.selectionKeys ? this.selectionKeys[this.nodeKey(this.node)] && this.selectionKeys[this.nodeKey(this.node)].partialChecked : false; + }, "partialChecked"), + getAriaSelected: /* @__PURE__ */ __name(function getAriaSelected() { + return this.selectionMode === "single" || this.selectionMode === "multiple" ? this.selected : null; + }, "getAriaSelected"), + ptmOptions: /* @__PURE__ */ __name(function ptmOptions2() { + return { + context: { + selectable: this.$parentInstance.rowHover || this.$parentInstance.rowSelectionMode, + selected: this.selected, + scrollable: this.$parentInstance.scrollable + } + }; + }, "ptmOptions") + }, + components: { + TTBodyCell: script$2 + } +}; +var _hoisted_1$1$1 = ["tabindex", "aria-expanded", "aria-level", "aria-setsize", "aria-posinset", "aria-selected", "aria-checked", "data-p-selected", "data-p-selected-contextmenu"]; +function render$1(_ctx, _cache, $props, $setup, $data, $options) { + var _component_TTBodyCell = resolveComponent("TTBodyCell"); + var _component_TreeTableRow = resolveComponent("TreeTableRow", true); + return openBlock(), createElementBlock(Fragment, null, [createBaseVNode("tr", mergeProps({ + ref: "node", + "class": $options.containerClass, + style: $props.node.style, + tabindex: $props.tabindex, + role: "row", + "aria-expanded": $props.node.children && $props.node.children.length ? $options.expanded : void 0, + "aria-level": $props.level + 1, + "aria-setsize": $props.ariaSetSize, + "aria-posinset": $props.ariaPosInset, + "aria-selected": $options.getAriaSelected, + "aria-checked": $options.checked || void 0, + onClick: _cache[1] || (_cache[1] = function() { + return $options.onClick && $options.onClick.apply($options, arguments); + }), + onKeydown: _cache[2] || (_cache[2] = function() { + return $options.onKeyDown && $options.onKeyDown.apply($options, arguments); + }), + onTouchend: _cache[3] || (_cache[3] = function() { + return $options.onTouchEnd && $options.onTouchEnd.apply($options, arguments); + }), + onContextmenu: _cache[4] || (_cache[4] = function() { + return $options.onRowRightClick && $options.onRowRightClick.apply($options, arguments); + }) + }, _ctx.ptm("row", $options.ptmOptions), { + "data-p-selected": $options.selected, + "data-p-selected-contextmenu": $props.contextMenuSelection && $options.isSelectedWithContextMenu + }), [(openBlock(true), createElementBlock(Fragment, null, renderList($props.columns, function(col, i) { + return openBlock(), createElementBlock(Fragment, { + key: $options.columnProp(col, "columnKey") || $options.columnProp(col, "field") || i + }, [!$options.columnProp(col, "hidden") ? (openBlock(), createBlock(_component_TTBodyCell, { + key: 0, + column: col, + node: $props.node, + level: $props.level, + leaf: $options.leaf, + indentation: $props.indentation, + expanded: $options.expanded, + selectionMode: $props.selectionMode, + checked: $options.checked, + partialChecked: $options.partialChecked, + templates: $props.templates, + onNodeToggle: _cache[0] || (_cache[0] = function($event) { + return _ctx.$emit("node-toggle", $event); + }), + onCheckboxToggle: $options.toggleCheckbox, + index: i, + loadingMode: $props.loadingMode, + unstyled: _ctx.unstyled, + pt: _ctx.pt + }, null, 8, ["column", "node", "level", "leaf", "indentation", "expanded", "selectionMode", "checked", "partialChecked", "templates", "onCheckboxToggle", "index", "loadingMode", "unstyled", "pt"])) : createCommentVNode("", true)], 64); + }), 128))], 16, _hoisted_1$1$1), $options.expanded && $props.node.children && $props.node.children.length ? (openBlock(true), createElementBlock(Fragment, { + key: 0 + }, renderList($props.node.children, function(childNode) { + return openBlock(), createBlock(_component_TreeTableRow, { + key: $options.nodeKey(childNode), + dataKey: $props.dataKey, + columns: $props.columns, + node: childNode, + parentNode: $props.node, + level: $props.level + 1, + expandedKeys: $props.expandedKeys, + selectionMode: $props.selectionMode, + selectionKeys: $props.selectionKeys, + contextMenu: $props.contextMenu, + contextMenuSelection: $props.contextMenuSelection, + indentation: $props.indentation, + ariaPosInset: $props.node.children.indexOf(childNode) + 1, + ariaSetSize: $props.node.children.length, + templates: $props.templates, + onNodeToggle: _cache[5] || (_cache[5] = function($event) { + return _ctx.$emit("node-toggle", $event); + }), + onNodeClick: _cache[6] || (_cache[6] = function($event) { + return _ctx.$emit("node-click", $event); + }), + onRowRightclick: _cache[7] || (_cache[7] = function($event) { + return _ctx.$emit("row-rightclick", $event); + }), + onCheckboxChange: $options.onCheckboxChange, + unstyled: _ctx.unstyled, + pt: _ctx.pt + }, null, 8, ["dataKey", "columns", "node", "parentNode", "level", "expandedKeys", "selectionMode", "selectionKeys", "contextMenu", "contextMenuSelection", "indentation", "ariaPosInset", "ariaSetSize", "templates", "onCheckboxChange", "unstyled", "pt"]); + }), 128)) : createCommentVNode("", true)], 64); +} +__name(render$1, "render$1"); +script$1.render = render$1; +function _typeof$1(o) { + "@babel/helpers - typeof"; + return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof$1(o); +} +__name(_typeof$1, "_typeof$1"); +function _createForOfIteratorHelper(r, e) { + var t2 = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (!t2) { + if (Array.isArray(r) || (t2 = _unsupportedIterableToArray(r)) || e) { + t2 && (r = t2); + var _n = 0, F = /* @__PURE__ */ __name(function F2() { + }, "F"); + return { s: F, n: /* @__PURE__ */ __name(function n() { + return _n >= r.length ? { done: true } : { done: false, value: r[_n++] }; + }, "n"), e: /* @__PURE__ */ __name(function e2(r2) { + throw r2; + }, "e"), f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var o, a = true, u = false; + return { s: /* @__PURE__ */ __name(function s() { + t2 = t2.call(r); + }, "s"), n: /* @__PURE__ */ __name(function n() { + var r2 = t2.next(); + return a = r2.done, r2; + }, "n"), e: /* @__PURE__ */ __name(function e2(r2) { + u = true, o = r2; + }, "e"), f: /* @__PURE__ */ __name(function f() { + try { + a || null == t2["return"] || t2["return"](); + } finally { + if (u) throw o; + } + }, "f") }; +} +__name(_createForOfIteratorHelper, "_createForOfIteratorHelper"); +function ownKeys$1(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys$1, "ownKeys$1"); +function _objectSpread$1(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys$1(Object(t2), true).forEach(function(r2) { + _defineProperty$1(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys$1(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread$1, "_objectSpread$1"); +function _defineProperty$1(e, r, t2) { + return (r = _toPropertyKey$1(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty$1, "_defineProperty$1"); +function _toPropertyKey$1(t2) { + var i = _toPrimitive$1(t2, "string"); + return "symbol" == _typeof$1(i) ? i : i + ""; +} +__name(_toPropertyKey$1, "_toPropertyKey$1"); +function _toPrimitive$1(t2, r) { + if ("object" != _typeof$1(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof$1(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive$1, "_toPrimitive$1"); +function _toConsumableArray(r) { + return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); +} +__name(_toConsumableArray, "_toConsumableArray"); +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} +__name(_nonIterableSpread, "_nonIterableSpread"); +function _unsupportedIterableToArray(r, a) { + if (r) { + if ("string" == typeof r) return _arrayLikeToArray(r, a); + var t2 = {}.toString.call(r).slice(8, -1); + return "Object" === t2 && r.constructor && (t2 = r.constructor.name), "Map" === t2 || "Set" === t2 ? Array.from(r) : "Arguments" === t2 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2) ? _arrayLikeToArray(r, a) : void 0; + } +} +__name(_unsupportedIterableToArray, "_unsupportedIterableToArray"); +function _iterableToArray(r) { + if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); +} +__name(_iterableToArray, "_iterableToArray"); +function _arrayWithoutHoles(r) { + if (Array.isArray(r)) return _arrayLikeToArray(r); +} +__name(_arrayWithoutHoles, "_arrayWithoutHoles"); +function _arrayLikeToArray(r, a) { + (null == a || a > r.length) && (a = r.length); + for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; + return n; +} +__name(_arrayLikeToArray, "_arrayLikeToArray"); +var script = { + name: "TreeTable", + "extends": script$5, + inheritAttrs: false, + emits: ["node-expand", "node-collapse", "update:expandedKeys", "update:selectionKeys", "node-select", "node-unselect", "update:first", "update:rows", "page", "update:sortField", "update:sortOrder", "update:multiSortMeta", "sort", "filter", "column-resize-end", "update:contextMenuSelection", "row-contextmenu"], + provide: /* @__PURE__ */ __name(function provide52() { + return { + $columns: this.d_columns + }; + }, "provide"), + data: /* @__PURE__ */ __name(function data40() { + return { + d_expandedKeys: this.expandedKeys || {}, + d_first: this.first, + d_rows: this.rows, + d_sortField: this.sortField, + d_sortOrder: this.sortOrder, + d_multiSortMeta: this.multiSortMeta ? _toConsumableArray(this.multiSortMeta) : [], + hasASelectedNode: false, + d_columns: new _default({ + type: "Column" + }) + }; + }, "data"), + documentColumnResizeListener: null, + documentColumnResizeEndListener: null, + lastResizeHelperX: null, + resizeColumnElement: null, + watch: { + expandedKeys: /* @__PURE__ */ __name(function expandedKeys3(newValue) { + this.d_expandedKeys = newValue; + }, "expandedKeys"), + first: /* @__PURE__ */ __name(function first2(newValue) { + this.d_first = newValue; + }, "first"), + rows: /* @__PURE__ */ __name(function rows2(newValue) { + this.d_rows = newValue; + }, "rows"), + sortField: /* @__PURE__ */ __name(function sortField2(newValue) { + this.d_sortField = newValue; + }, "sortField"), + sortOrder: /* @__PURE__ */ __name(function sortOrder2(newValue) { + this.d_sortOrder = newValue; + }, "sortOrder"), + multiSortMeta: /* @__PURE__ */ __name(function multiSortMeta(newValue) { + this.d_multiSortMeta = newValue; + }, "multiSortMeta") + }, + beforeUnmount: /* @__PURE__ */ __name(function beforeUnmount18() { + this.destroyStyleElement(); + this.d_columns.clear(); + }, "beforeUnmount"), + methods: { + columnProp: /* @__PURE__ */ __name(function columnProp5(col, prop) { + return getVNodeProp(col, prop); + }, "columnProp"), + ptHeaderCellOptions: /* @__PURE__ */ __name(function ptHeaderCellOptions(column2) { + return { + context: { + frozen: this.columnProp(column2, "frozen") + } + }; + }, "ptHeaderCellOptions"), + onNodeToggle: /* @__PURE__ */ __name(function onNodeToggle3(node2) { + var key = this.nodeKey(node2); + if (this.d_expandedKeys[key]) { + delete this.d_expandedKeys[key]; + this.$emit("node-collapse", node2); + } else { + this.d_expandedKeys[key] = true; + this.$emit("node-expand", node2); + } + this.d_expandedKeys = _objectSpread$1({}, this.d_expandedKeys); + this.$emit("update:expandedKeys", this.d_expandedKeys); + }, "onNodeToggle"), + onNodeClick: /* @__PURE__ */ __name(function onNodeClick3(event2) { + if (this.rowSelectionMode && event2.node.selectable !== false) { + var metaSelection = event2.nodeTouched ? false : this.metaKeySelection; + var _selectionKeys = metaSelection ? this.handleSelectionWithMetaKey(event2) : this.handleSelectionWithoutMetaKey(event2); + this.$emit("update:selectionKeys", _selectionKeys); + } + }, "onNodeClick"), + nodeKey: /* @__PURE__ */ __name(function nodeKey2(node2) { + return resolveFieldData(node2, this.dataKey); + }, "nodeKey"), + handleSelectionWithMetaKey: /* @__PURE__ */ __name(function handleSelectionWithMetaKey(event2) { + var originalEvent = event2.originalEvent; + var node2 = event2.node; + var nodeKey3 = this.nodeKey(node2); + var metaKey = originalEvent.metaKey || originalEvent.ctrlKey; + var selected3 = this.isNodeSelected(node2); + var _selectionKeys; + if (selected3 && metaKey) { + if (this.isSingleSelectionMode()) { + _selectionKeys = {}; + } else { + _selectionKeys = _objectSpread$1({}, this.selectionKeys); + delete _selectionKeys[nodeKey3]; + } + this.$emit("node-unselect", node2); + } else { + if (this.isSingleSelectionMode()) { + _selectionKeys = {}; + } else if (this.isMultipleSelectionMode()) { + _selectionKeys = !metaKey ? {} : this.selectionKeys ? _objectSpread$1({}, this.selectionKeys) : {}; + } + _selectionKeys[nodeKey3] = true; + this.$emit("node-select", node2); + } + return _selectionKeys; + }, "handleSelectionWithMetaKey"), + handleSelectionWithoutMetaKey: /* @__PURE__ */ __name(function handleSelectionWithoutMetaKey(event2) { + var node2 = event2.node; + var nodeKey3 = this.nodeKey(node2); + var selected3 = this.isNodeSelected(node2); + var _selectionKeys; + if (this.isSingleSelectionMode()) { + if (selected3) { + _selectionKeys = {}; + this.$emit("node-unselect", node2); + } else { + _selectionKeys = {}; + _selectionKeys[nodeKey3] = true; + this.$emit("node-select", node2); + } + } else { + if (selected3) { + _selectionKeys = _objectSpread$1({}, this.selectionKeys); + delete _selectionKeys[nodeKey3]; + this.$emit("node-unselect", node2); + } else { + _selectionKeys = this.selectionKeys ? _objectSpread$1({}, this.selectionKeys) : {}; + _selectionKeys[nodeKey3] = true; + this.$emit("node-select", node2); + } + } + return _selectionKeys; + }, "handleSelectionWithoutMetaKey"), + onCheckboxChange: /* @__PURE__ */ __name(function onCheckboxChange2(event2) { + this.$emit("update:selectionKeys", event2.selectionKeys); + if (event2.check) this.$emit("node-select", event2.node); + else this.$emit("node-unselect", event2.node); + }, "onCheckboxChange"), + onRowRightClick: /* @__PURE__ */ __name(function onRowRightClick2(event2) { + if (this.contextMenu) { + clearSelection(); + event2.originalEvent.target.focus(); + } + this.$emit("update:contextMenuSelection", event2.node); + this.$emit("row-contextmenu", event2); + }, "onRowRightClick"), + isSingleSelectionMode: /* @__PURE__ */ __name(function isSingleSelectionMode() { + return this.selectionMode === "single"; + }, "isSingleSelectionMode"), + isMultipleSelectionMode: /* @__PURE__ */ __name(function isMultipleSelectionMode() { + return this.selectionMode === "multiple"; + }, "isMultipleSelectionMode"), + onPage: /* @__PURE__ */ __name(function onPage2(event2) { + this.d_first = event2.first; + this.d_rows = event2.rows; + var pageEvent = this.createLazyLoadEvent(event2); + pageEvent.pageCount = event2.pageCount; + pageEvent.page = event2.page; + this.d_expandedKeys = {}; + this.$emit("update:expandedKeys", this.d_expandedKeys); + this.$emit("update:first", this.d_first); + this.$emit("update:rows", this.d_rows); + this.$emit("page", pageEvent); + }, "onPage"), + resetPage: /* @__PURE__ */ __name(function resetPage2() { + this.d_first = 0; + this.$emit("update:first", this.d_first); + }, "resetPage"), + getFilterColumnHeaderClass: /* @__PURE__ */ __name(function getFilterColumnHeaderClass(column2) { + return [this.cx("headerCell", { + column: column2 + }), this.columnProp(column2, "filterHeaderClass")]; + }, "getFilterColumnHeaderClass"), + onColumnHeaderClick: /* @__PURE__ */ __name(function onColumnHeaderClick(e) { + var event2 = e.originalEvent; + var column2 = e.column; + if (this.columnProp(column2, "sortable")) { + var targetNode = event2.target; + var columnField = this.columnProp(column2, "sortField") || this.columnProp(column2, "field"); + if (getAttribute(targetNode, "data-p-sortable-column") === true || getAttribute(targetNode, "data-pc-section") === "columntitle" || getAttribute(targetNode, "data-pc-section") === "columnheadercontent" || getAttribute(targetNode, "data-pc-section") === "sorticon" || getAttribute(targetNode.parentElement, "data-pc-section") === "sorticon" || getAttribute(targetNode.parentElement.parentElement, "data-pc-section") === "sorticon" || targetNode.closest('[data-p-sortable-column="true"]')) { + clearSelection(); + if (this.sortMode === "single") { + if (this.d_sortField === columnField) { + if (this.removableSort && this.d_sortOrder * -1 === this.defaultSortOrder) { + this.d_sortOrder = null; + this.d_sortField = null; + } else { + this.d_sortOrder = this.d_sortOrder * -1; + } + } else { + this.d_sortOrder = this.defaultSortOrder; + this.d_sortField = columnField; + } + this.$emit("update:sortField", this.d_sortField); + this.$emit("update:sortOrder", this.d_sortOrder); + this.resetPage(); + } else if (this.sortMode === "multiple") { + var metaKey = event2.metaKey || event2.ctrlKey; + if (!metaKey) { + this.d_multiSortMeta = this.d_multiSortMeta.filter(function(meta) { + return meta.field === columnField; + }); + } + this.addMultiSortField(columnField); + this.$emit("update:multiSortMeta", this.d_multiSortMeta); + } + this.$emit("sort", this.createLazyLoadEvent(event2)); + } + } + }, "onColumnHeaderClick"), + addMultiSortField: /* @__PURE__ */ __name(function addMultiSortField(field) { + var index = this.d_multiSortMeta.findIndex(function(meta) { + return meta.field === field; + }); + if (index >= 0) { + if (this.removableSort && this.d_multiSortMeta[index].order * -1 === this.defaultSortOrder) this.d_multiSortMeta.splice(index, 1); + else this.d_multiSortMeta[index] = { + field, + order: this.d_multiSortMeta[index].order * -1 + }; + } else { + this.d_multiSortMeta.push({ + field, + order: this.defaultSortOrder + }); + } + this.d_multiSortMeta = _toConsumableArray(this.d_multiSortMeta); + }, "addMultiSortField"), + sortSingle: /* @__PURE__ */ __name(function sortSingle(nodes) { + return this.sortNodesSingle(nodes); + }, "sortSingle"), + sortNodesSingle: /* @__PURE__ */ __name(function sortNodesSingle(nodes) { + var _this = this; + var _nodes = _toConsumableArray(nodes); + var comparer = localeComparator(); + _nodes.sort(function(node1, node2) { + var value1 = resolveFieldData(node1.data, _this.d_sortField); + var value2 = resolveFieldData(node2.data, _this.d_sortField); + return sort(value1, value2, _this.d_sortOrder, comparer); + }); + return _nodes; + }, "sortNodesSingle"), + sortMultiple: /* @__PURE__ */ __name(function sortMultiple(nodes) { + return this.sortNodesMultiple(nodes); + }, "sortMultiple"), + sortNodesMultiple: /* @__PURE__ */ __name(function sortNodesMultiple(nodes) { + var _this2 = this; + var _nodes = _toConsumableArray(nodes); + _nodes.sort(function(node1, node2) { + return _this2.multisortField(node1, node2, 0); + }); + return _nodes; + }, "sortNodesMultiple"), + multisortField: /* @__PURE__ */ __name(function multisortField(node1, node2, index) { + var value1 = resolveFieldData(node1.data, this.d_multiSortMeta[index].field); + var value2 = resolveFieldData(node2.data, this.d_multiSortMeta[index].field); + var comparer = localeComparator(); + if (value1 === value2) { + return this.d_multiSortMeta.length - 1 > index ? this.multisortField(node1, node2, index + 1) : 0; + } + return sort(value1, value2, this.d_multiSortMeta[index].order, comparer); + }, "multisortField"), + filter: /* @__PURE__ */ __name(function filter(value2) { + var filteredNodes = []; + var strict = this.filterMode === "strict"; + var _iterator = _createForOfIteratorHelper(value2), _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + var node2 = _step.value; + var copyNode = _objectSpread$1({}, node2); + var localMatch = true; + var globalMatch = false; + for (var j = 0; j < this.columns.length; j++) { + var col = this.columns[j]; + var filterField = this.columnProp(col, "filterField") || this.columnProp(col, "field"); + if (Object.prototype.hasOwnProperty.call(this.filters, filterField)) { + var filterMatchMode = this.columnProp(col, "filterMatchMode") || "startsWith"; + var filterValue = this.filters[filterField]; + var filterConstraint = FilterService.filters[filterMatchMode]; + var paramsWithoutNode = { + filterField, + filterValue, + filterConstraint, + strict + }; + if (strict && !(this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode)) || !strict && !(this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode))) { + localMatch = false; + } + if (!localMatch) { + break; + } + } + if (this.hasGlobalFilter() && !globalMatch) { + var copyNodeForGlobal = _objectSpread$1({}, copyNode); + var _filterValue = this.filters["global"]; + var _filterConstraint = FilterService.filters["contains"]; + var globalFilterParamsWithoutNode = { + filterField, + filterValue: _filterValue, + filterConstraint: _filterConstraint, + strict + }; + if (strict && (this.findFilteredNodes(copyNodeForGlobal, globalFilterParamsWithoutNode) || this.isFilterMatched(copyNodeForGlobal, globalFilterParamsWithoutNode)) || !strict && (this.isFilterMatched(copyNodeForGlobal, globalFilterParamsWithoutNode) || this.findFilteredNodes(copyNodeForGlobal, globalFilterParamsWithoutNode))) { + globalMatch = true; + copyNode = copyNodeForGlobal; + } + } + } + var matches = localMatch; + if (this.hasGlobalFilter()) { + matches = localMatch && globalMatch; + } + if (matches) { + filteredNodes.push(copyNode); + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + var filterEvent = this.createLazyLoadEvent(event); + filterEvent.filteredValue = filteredNodes; + this.$emit("filter", filterEvent); + return filteredNodes; + }, "filter"), + findFilteredNodes: /* @__PURE__ */ __name(function findFilteredNodes(node2, paramsWithoutNode) { + if (node2) { + var matched = false; + if (node2.children) { + var childNodes = _toConsumableArray(node2.children); + node2.children = []; + var _iterator2 = _createForOfIteratorHelper(childNodes), _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { + var childNode = _step2.value; + var copyChildNode = _objectSpread$1({}, childNode); + if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) { + matched = true; + node2.children.push(copyChildNode); + } + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + if (matched) { + return true; + } + } + }, "findFilteredNodes"), + isFilterMatched: /* @__PURE__ */ __name(function isFilterMatched(node2, _ref) { + var filterField = _ref.filterField, filterValue = _ref.filterValue, filterConstraint = _ref.filterConstraint, strict = _ref.strict; + var matched = false; + var dataFieldValue = resolveFieldData(node2.data, filterField); + if (filterConstraint(dataFieldValue, filterValue, this.filterLocale)) { + matched = true; + } + if (!matched || strict && !this.isNodeLeaf(node2)) { + matched = this.findFilteredNodes(node2, { + filterField, + filterValue, + filterConstraint, + strict + }) || matched; + } + return matched; + }, "isFilterMatched"), + isNodeSelected: /* @__PURE__ */ __name(function isNodeSelected(node2) { + return this.selectionMode && this.selectionKeys ? this.selectionKeys[this.nodeKey(node2)] === true : false; + }, "isNodeSelected"), + isNodeLeaf: /* @__PURE__ */ __name(function isNodeLeaf(node2) { + return node2.leaf === false ? false : !(node2.children && node2.children.length); + }, "isNodeLeaf"), + createLazyLoadEvent: /* @__PURE__ */ __name(function createLazyLoadEvent(event2) { + var _this3 = this; + var filterMatchModes; + if (this.hasFilters()) { + filterMatchModes = {}; + this.columns.forEach(function(col) { + if (_this3.columnProp(col, "field")) { + filterMatchModes[col.props.field] = _this3.columnProp(col, "filterMatchMode"); + } + }); + } + return { + originalEvent: event2, + first: this.d_first, + rows: this.d_rows, + sortField: this.d_sortField, + sortOrder: this.d_sortOrder, + multiSortMeta: this.d_multiSortMeta, + filters: this.filters, + filterMatchModes + }; + }, "createLazyLoadEvent"), + onColumnResizeStart: /* @__PURE__ */ __name(function onColumnResizeStart(event2) { + var containerLeft = getOffset(this.$el).left; + this.resizeColumnElement = event2.target.parentElement; + this.columnResizing = true; + this.lastResizeHelperX = event2.pageX - containerLeft + this.$el.scrollLeft; + this.bindColumnResizeEvents(); + }, "onColumnResizeStart"), + onColumnResize: /* @__PURE__ */ __name(function onColumnResize(event2) { + var containerLeft = getOffset(this.$el).left; + this.$el.setAttribute("data-p-unselectable-text", "true"); + !this.isUnstyled && addStyle(this.$el, { + "user-select": "none" + }); + this.$refs.resizeHelper.style.height = this.$el.offsetHeight + "px"; + this.$refs.resizeHelper.style.top = "0px"; + this.$refs.resizeHelper.style.left = event2.pageX - containerLeft + this.$el.scrollLeft + "px"; + this.$refs.resizeHelper.style.display = "block"; + }, "onColumnResize"), + onColumnResizeEnd: /* @__PURE__ */ __name(function onColumnResizeEnd() { + var delta = isRTL(this.$el) ? this.lastResizeHelperX - this.$refs.resizeHelper.offsetLeft : this.$refs.resizeHelper.offsetLeft - this.lastResizeHelperX; + var columnWidth = this.resizeColumnElement.offsetWidth; + var newColumnWidth = columnWidth + delta; + var minWidth = this.resizeColumnElement.style.minWidth || 15; + if (columnWidth + delta > parseInt(minWidth, 10)) { + if (this.columnResizeMode === "fit") { + var nextColumn = this.resizeColumnElement.nextElementSibling; + var nextColumnWidth = nextColumn.offsetWidth - delta; + if (newColumnWidth > 15 && nextColumnWidth > 15) { + this.resizeTableCells(newColumnWidth, nextColumnWidth); + } + } else if (this.columnResizeMode === "expand") { + var tableWidth = this.$refs.table.offsetWidth + delta + "px"; + var updateTableWidth = /* @__PURE__ */ __name(function updateTableWidth2(el) { + !!el && (el.style.width = el.style.minWidth = tableWidth); + }, "updateTableWidth"); + this.resizeTableCells(newColumnWidth); + updateTableWidth(this.$refs.table); + } + this.$emit("column-resize-end", { + element: this.resizeColumnElement, + delta + }); + } + this.$refs.resizeHelper.style.display = "none"; + this.resizeColumn = null; + this.$el.removeAttribute("data-p-unselectable-text"); + !this.isUnstyled && (this.$el.style["user-select"] = ""); + this.unbindColumnResizeEvents(); + }, "onColumnResizeEnd"), + resizeTableCells: /* @__PURE__ */ __name(function resizeTableCells(newColumnWidth, nextColumnWidth) { + var colIndex = getIndex(this.resizeColumnElement); + var widths = []; + var headers = find(this.$refs.table, 'thead[data-pc-section="thead"] > tr > th'); + headers.forEach(function(header2) { + return widths.push(getOuterWidth(header2)); + }); + this.destroyStyleElement(); + this.createStyleElement(); + var innerHTML = ""; + var selector = '[data-pc-name="treetable"]['.concat(this.$attrSelector, '] > [data-pc-section="tablecontainer"] > table[data-pc-section="table"]'); + widths.forEach(function(width, index) { + var colWidth = index === colIndex ? newColumnWidth : nextColumnWidth && index === colIndex + 1 ? nextColumnWidth : width; + var style = "width: ".concat(colWidth, "px !important; max-width: ").concat(colWidth, "px !important"); + innerHTML += "\n ".concat(selector, ' > thead[data-pc-section="thead"] > tr > th:nth-child(').concat(index + 1, "),\n ").concat(selector, ' > tbody[data-pc-section="tbody"] > tr > td:nth-child(').concat(index + 1, "),\n ").concat(selector, ' > tfoot[data-pc-section="tfoot"] > tr > td:nth-child(').concat(index + 1, ") {\n ").concat(style, "\n }\n "); + }); + this.styleElement.innerHTML = innerHTML; + }, "resizeTableCells"), + bindColumnResizeEvents: /* @__PURE__ */ __name(function bindColumnResizeEvents() { + var _this4 = this; + if (!this.documentColumnResizeListener) { + this.documentColumnResizeListener = document.addEventListener("mousemove", function(event2) { + if (_this4.columnResizing) { + _this4.onColumnResize(event2); + } + }); + } + if (!this.documentColumnResizeEndListener) { + this.documentColumnResizeEndListener = document.addEventListener("mouseup", function() { + if (_this4.columnResizing) { + _this4.columnResizing = false; + _this4.onColumnResizeEnd(); + } + }); + } + }, "bindColumnResizeEvents"), + unbindColumnResizeEvents: /* @__PURE__ */ __name(function unbindColumnResizeEvents() { + if (this.documentColumnResizeListener) { + document.removeEventListener("document", this.documentColumnResizeListener); + this.documentColumnResizeListener = null; + } + if (this.documentColumnResizeEndListener) { + document.removeEventListener("document", this.documentColumnResizeEndListener); + this.documentColumnResizeEndListener = null; + } + }, "unbindColumnResizeEvents"), + onColumnKeyDown: /* @__PURE__ */ __name(function onColumnKeyDown(event2, col) { + if ((event2.code === "Enter" || event2.code === "NumpadEnter") && event2.currentTarget.nodeName === "TH" && getAttribute(event2.currentTarget, "data-p-sortable-column")) { + this.onColumnHeaderClick(event2, col); + } + }, "onColumnKeyDown"), + hasColumnFilter: /* @__PURE__ */ __name(function hasColumnFilter() { + if (this.columns) { + var _iterator3 = _createForOfIteratorHelper(this.columns), _step3; + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { + var col = _step3.value; + if (col.children && col.children.filter) { + return true; + } + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + } + return false; + }, "hasColumnFilter"), + hasFilters: /* @__PURE__ */ __name(function hasFilters() { + return this.filters && Object.keys(this.filters).length > 0 && this.filters.constructor === Object; + }, "hasFilters"), + hasGlobalFilter: /* @__PURE__ */ __name(function hasGlobalFilter() { + return this.filters && Object.prototype.hasOwnProperty.call(this.filters, "global"); + }, "hasGlobalFilter"), + getItemLabel: /* @__PURE__ */ __name(function getItemLabel6(node2) { + return node2.data.name; + }, "getItemLabel"), + createStyleElement: /* @__PURE__ */ __name(function createStyleElement() { + var _this$$primevue; + this.styleElement = document.createElement("style"); + this.styleElement.type = "text/css"; + setAttribute(this.styleElement, "nonce", (_this$$primevue = this.$primevue) === null || _this$$primevue === void 0 || (_this$$primevue = _this$$primevue.config) === null || _this$$primevue === void 0 || (_this$$primevue = _this$$primevue.csp) === null || _this$$primevue === void 0 ? void 0 : _this$$primevue.nonce); + document.head.appendChild(this.styleElement); + }, "createStyleElement"), + destroyStyleElement: /* @__PURE__ */ __name(function destroyStyleElement() { + if (this.styleElement) { + document.head.removeChild(this.styleElement); + this.styleElement = null; + } + }, "destroyStyleElement"), + setTabindex: /* @__PURE__ */ __name(function setTabindex(node2, index) { + if (this.isNodeSelected(node2)) { + this.hasASelectedNode = true; + return 0; + } + if (this.selectionMode) { + if (!this.isNodeSelected(node2) && index === 0 && !this.hasASelectedNode) return 0; + } else if (!this.selectionMode && index === 0) { + return 0; + } + return -1; + }, "setTabindex") + }, + computed: { + columns: /* @__PURE__ */ __name(function columns() { + return this.d_columns.get(this); + }, "columns"), + processedData: /* @__PURE__ */ __name(function processedData() { + if (this.lazy) { + return this.value; + } else { + if (this.value && this.value.length) { + var data41 = this.value; + if (this.sorted) { + if (this.sortMode === "single") data41 = this.sortSingle(data41); + else if (this.sortMode === "multiple") data41 = this.sortMultiple(data41); + } + if (this.hasFilters()) { + data41 = this.filter(data41); + } + return data41; + } else { + return null; + } + } + }, "processedData"), + dataToRender: /* @__PURE__ */ __name(function dataToRender() { + var data41 = this.processedData; + if (this.paginator) { + var first3 = this.lazy ? 0 : this.d_first; + return data41.slice(first3, first3 + this.d_rows); + } else { + return data41; + } + }, "dataToRender"), + empty: /* @__PURE__ */ __name(function empty2() { + var data41 = this.processedData; + return !data41 || data41.length === 0; + }, "empty"), + sorted: /* @__PURE__ */ __name(function sorted() { + return this.d_sortField || this.d_multiSortMeta && this.d_multiSortMeta.length > 0; + }, "sorted"), + hasFooter: /* @__PURE__ */ __name(function hasFooter() { + var hasFooter2 = false; + var _iterator4 = _createForOfIteratorHelper(this.columns), _step4; + try { + for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) { + var col = _step4.value; + if (this.columnProp(col, "footer") || col.children && col.children.footer) { + hasFooter2 = true; + break; + } + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); + } + return hasFooter2; + }, "hasFooter"), + paginatorTop: /* @__PURE__ */ __name(function paginatorTop2() { + return this.paginator && (this.paginatorPosition !== "bottom" || this.paginatorPosition === "both"); + }, "paginatorTop"), + paginatorBottom: /* @__PURE__ */ __name(function paginatorBottom2() { + return this.paginator && (this.paginatorPosition !== "top" || this.paginatorPosition === "both"); + }, "paginatorBottom"), + singleSelectionMode: /* @__PURE__ */ __name(function singleSelectionMode() { + return this.selectionMode && this.selectionMode === "single"; + }, "singleSelectionMode"), + multipleSelectionMode: /* @__PURE__ */ __name(function multipleSelectionMode() { + return this.selectionMode && this.selectionMode === "multiple"; + }, "multipleSelectionMode"), + rowSelectionMode: /* @__PURE__ */ __name(function rowSelectionMode() { + return this.singleSelectionMode || this.multipleSelectionMode; + }, "rowSelectionMode"), + totalRecordsLength: /* @__PURE__ */ __name(function totalRecordsLength() { + if (this.lazy) { + return this.totalRecords; + } else { + var data41 = this.processedData; + return data41 ? data41.length : 0; + } + }, "totalRecordsLength") + }, + components: { + TTRow: script$1, + TTPaginator: script$1u, + TTHeaderCell: script$3, + TTFooterCell: script$4, + SpinnerIcon: script$1r + } +}; +function _typeof(o) { + "@babel/helpers - typeof"; + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) { + return typeof o2; + } : function(o2) { + return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2; + }, _typeof(o); +} +__name(_typeof, "_typeof"); +function ownKeys(e, r) { + var t2 = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function(r2) { + return Object.getOwnPropertyDescriptor(e, r2).enumerable; + })), t2.push.apply(t2, o); + } + return t2; +} +__name(ownKeys, "ownKeys"); +function _objectSpread(e) { + for (var r = 1; r < arguments.length; r++) { + var t2 = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys(Object(t2), true).forEach(function(r2) { + _defineProperty(e, r2, t2[r2]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys(Object(t2)).forEach(function(r2) { + Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t2, r2)); + }); + } + return e; +} +__name(_objectSpread, "_objectSpread"); +function _defineProperty(e, r, t2) { + return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t2, enumerable: true, configurable: true, writable: true }) : e[r] = t2, e; +} +__name(_defineProperty, "_defineProperty"); +function _toPropertyKey(t2) { + var i = _toPrimitive(t2, "string"); + return "symbol" == _typeof(i) ? i : i + ""; +} +__name(_toPropertyKey, "_toPropertyKey"); +function _toPrimitive(t2, r) { + if ("object" != _typeof(t2) || !t2) return t2; + var e = t2[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t2, r || "default"); + if ("object" != _typeof(i)) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t2); +} +__name(_toPrimitive, "_toPrimitive"); +var _hoisted_1$5 = ["colspan"]; +function render3(_ctx, _cache, $props, $setup, $data, $options) { + var _component_TTPaginator = resolveComponent("TTPaginator"); + var _component_TTHeaderCell = resolveComponent("TTHeaderCell"); + var _component_TTRow = resolveComponent("TTRow"); + var _component_TTFooterCell = resolveComponent("TTFooterCell"); + return openBlock(), createElementBlock("div", mergeProps({ + "class": _ctx.cx("root"), + "data-scrollselectors": ".p-treetable-scrollable-body" + }, _ctx.ptmi("root")), [renderSlot(_ctx.$slots, "default"), _ctx.loading && _ctx.loadingMode === "mask" ? (openBlock(), createElementBlock("div", mergeProps({ + key: 0, + "class": _ctx.cx("loading") + }, _ctx.ptm("loading")), [createBaseVNode("div", mergeProps({ + "class": _ctx.cx("mask") + }, _ctx.ptm("mask")), [renderSlot(_ctx.$slots, "loadingicon", { + "class": normalizeClass(_ctx.cx("loadingIcon")) + }, function() { + return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.loadingIcon ? "span" : "SpinnerIcon"), mergeProps({ + spin: "", + "class": [_ctx.cx("loadingIcon"), _ctx.loadingIcon] + }, _ctx.ptm("loadingIcon")), null, 16, ["class"]))]; + })], 16)], 16)) : createCommentVNode("", true), _ctx.$slots.header ? (openBlock(), createElementBlock("div", mergeProps({ + key: 1, + "class": _ctx.cx("header") + }, _ctx.ptm("header")), [renderSlot(_ctx.$slots, "header")], 16)) : createCommentVNode("", true), $options.paginatorTop ? (openBlock(), createBlock(_component_TTPaginator, { + key: 2, + rows: $data.d_rows, + first: $data.d_first, + totalRecords: $options.totalRecordsLength, + pageLinkSize: _ctx.pageLinkSize, + template: _ctx.paginatorTemplate, + rowsPerPageOptions: _ctx.rowsPerPageOptions, + currentPageReportTemplate: _ctx.currentPageReportTemplate, + "class": normalizeClass(_ctx.cx("pcPaginator", { + position: "top" + })), + onPage: _cache[0] || (_cache[0] = function($event) { + return $options.onPage($event); + }), + alwaysShow: _ctx.alwaysShowPaginator, + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcPaginator") + }, createSlots({ + _: 2 + }, [_ctx.$slots.paginatorcontainer ? { + name: "container", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorcontainer", { + first: slotProps.first, + last: slotProps.last, + rows: slotProps.rows, + page: slotProps.page, + pageCount: slotProps.pageCount, + totalRecords: slotProps.totalRecords, + firstPageCallback: slotProps.firstPageCallback, + lastPageCallback: slotProps.lastPageCallback, + prevPageCallback: slotProps.prevPageCallback, + nextPageCallback: slotProps.nextPageCallback, + rowChangeCallback: slotProps.rowChangeCallback + })]; + }), + key: "0" + } : void 0, _ctx.$slots.paginatorstart ? { + name: "start", + fn: withCtx(function() { + return [renderSlot(_ctx.$slots, "paginatorstart")]; + }), + key: "1" + } : void 0, _ctx.$slots.paginatorend ? { + name: "end", + fn: withCtx(function() { + return [renderSlot(_ctx.$slots, "paginatorend")]; + }), + key: "2" + } : void 0, _ctx.$slots.paginatorfirstpagelinkicon ? { + name: "firstpagelinkicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorfirstpagelinkicon", { + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "3" + } : void 0, _ctx.$slots.paginatorprevpagelinkicon ? { + name: "prevpagelinkicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorprevpagelinkicon", { + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "4" + } : void 0, _ctx.$slots.paginatornextpagelinkicon ? { + name: "nextpagelinkicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatornextpagelinkicon", { + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "5" + } : void 0, _ctx.$slots.paginatorlastpagelinkicon ? { + name: "lastpagelinkicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorlastpagelinkicon", { + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "6" + } : void 0, _ctx.$slots.paginatorjumptopagedropdownicon ? { + name: "jumptopagedropdownicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorjumptopagedropdownicon", { + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "7" + } : void 0, _ctx.$slots.paginatorrowsperpagedropdownicon ? { + name: "rowsperpagedropdownicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorrowsperpagedropdownicon", { + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "8" + } : void 0]), 1032, ["rows", "first", "totalRecords", "pageLinkSize", "template", "rowsPerPageOptions", "currentPageReportTemplate", "class", "alwaysShow", "unstyled", "pt"])) : createCommentVNode("", true), createBaseVNode("div", mergeProps({ + "class": _ctx.cx("tableContainer"), + style: [_ctx.sx("tableContainer"), { + maxHeight: _ctx.scrollHeight + }] + }, _ctx.ptm("tableContainer")), [createBaseVNode("table", mergeProps({ + ref: "table", + role: "table", + "class": [_ctx.cx("table"), _ctx.tableClass], + style: _ctx.tableStyle + }, _objectSpread(_objectSpread({}, _ctx.tableProps), _ctx.ptm("table"))), [createBaseVNode("thead", mergeProps({ + "class": _ctx.cx("thead"), + style: _ctx.sx("thead"), + role: "rowgroup" + }, _ctx.ptm("thead")), [createBaseVNode("tr", mergeProps({ + role: "row" + }, _ctx.ptm("headerRow")), [(openBlock(true), createElementBlock(Fragment, null, renderList($options.columns, function(col, i) { + return openBlock(), createElementBlock(Fragment, { + key: $options.columnProp(col, "columnKey") || $options.columnProp(col, "field") || i + }, [!$options.columnProp(col, "hidden") ? (openBlock(), createBlock(_component_TTHeaderCell, { + key: 0, + column: col, + resizableColumns: _ctx.resizableColumns, + sortField: $data.d_sortField, + sortOrder: $data.d_sortOrder, + multiSortMeta: $data.d_multiSortMeta, + sortMode: _ctx.sortMode, + onColumnClick: _cache[1] || (_cache[1] = function($event) { + return $options.onColumnHeaderClick($event); + }), + onColumnResizestart: _cache[2] || (_cache[2] = function($event) { + return $options.onColumnResizeStart($event); + }), + index: i, + unstyled: _ctx.unstyled, + pt: _ctx.pt + }, null, 8, ["column", "resizableColumns", "sortField", "sortOrder", "multiSortMeta", "sortMode", "index", "unstyled", "pt"])) : createCommentVNode("", true)], 64); + }), 128))], 16), $options.hasColumnFilter() ? (openBlock(), createElementBlock("tr", normalizeProps(mergeProps({ + key: 0 + }, _ctx.ptm("headerRow"))), [(openBlock(true), createElementBlock(Fragment, null, renderList($options.columns, function(col, i) { + return openBlock(), createElementBlock(Fragment, { + key: $options.columnProp(col, "columnKey") || $options.columnProp(col, "field") || i + }, [!$options.columnProp(col, "hidden") ? (openBlock(), createElementBlock("th", mergeProps({ + key: 0, + "class": $options.getFilterColumnHeaderClass(col), + style: [$options.columnProp(col, "style"), $options.columnProp(col, "filterHeaderStyle")], + ref_for: true + }, _ctx.ptm("headerCell", $options.ptHeaderCellOptions(col))), [col.children && col.children.filter ? (openBlock(), createBlock(resolveDynamicComponent(col.children.filter), { + key: 0, + column: col, + index: i + }, null, 8, ["column", "index"])) : createCommentVNode("", true)], 16)) : createCommentVNode("", true)], 64); + }), 128))], 16)) : createCommentVNode("", true)], 16), createBaseVNode("tbody", mergeProps({ + "class": _ctx.cx("tbody"), + role: "rowgroup" + }, _ctx.ptm("tbody")), [!$options.empty ? (openBlock(true), createElementBlock(Fragment, { + key: 0 + }, renderList($options.dataToRender, function(node2, index) { + return openBlock(), createBlock(_component_TTRow, { + key: $options.nodeKey(node2), + dataKey: _ctx.dataKey, + columns: $options.columns, + node: node2, + level: 0, + expandedKeys: $data.d_expandedKeys, + indentation: _ctx.indentation, + selectionMode: _ctx.selectionMode, + selectionKeys: _ctx.selectionKeys, + ariaSetSize: $options.dataToRender.length, + ariaPosInset: index + 1, + tabindex: $options.setTabindex(node2, index), + loadingMode: _ctx.loadingMode, + contextMenu: _ctx.contextMenu, + contextMenuSelection: _ctx.contextMenuSelection, + templates: _ctx.$slots, + onNodeToggle: $options.onNodeToggle, + onNodeClick: $options.onNodeClick, + onCheckboxChange: $options.onCheckboxChange, + onRowRightclick: _cache[3] || (_cache[3] = function($event) { + return $options.onRowRightClick($event); + }), + unstyled: _ctx.unstyled, + pt: _ctx.pt + }, null, 8, ["dataKey", "columns", "node", "expandedKeys", "indentation", "selectionMode", "selectionKeys", "ariaSetSize", "ariaPosInset", "tabindex", "loadingMode", "contextMenu", "contextMenuSelection", "templates", "onNodeToggle", "onNodeClick", "onCheckboxChange", "unstyled", "pt"]); + }), 128)) : (openBlock(), createElementBlock("tr", mergeProps({ + key: 1, + "class": _ctx.cx("emptyMessage") + }, _ctx.ptm("emptyMessage")), [createBaseVNode("td", mergeProps({ + colspan: $options.columns.length + }, _ctx.ptm("emptyMessageCell")), [renderSlot(_ctx.$slots, "empty")], 16, _hoisted_1$5)], 16))], 16), $options.hasFooter ? (openBlock(), createElementBlock("tfoot", mergeProps({ + key: 0, + "class": _ctx.cx("tfoot"), + style: _ctx.sx("tfoot"), + role: "rowgroup" + }, _ctx.ptm("tfoot")), [createBaseVNode("tr", mergeProps({ + role: "row" + }, _ctx.ptm("footerRow")), [(openBlock(true), createElementBlock(Fragment, null, renderList($options.columns, function(col, i) { + return openBlock(), createElementBlock(Fragment, { + key: $options.columnProp(col, "columnKey") || $options.columnProp(col, "field") || i + }, [!$options.columnProp(col, "hidden") ? (openBlock(), createBlock(_component_TTFooterCell, { + key: 0, + column: col, + index: i, + unstyled: _ctx.unstyled, + pt: _ctx.pt + }, null, 8, ["column", "index", "unstyled", "pt"])) : createCommentVNode("", true)], 64); + }), 128))], 16)], 16)) : createCommentVNode("", true)], 16)], 16), $options.paginatorBottom ? (openBlock(), createBlock(_component_TTPaginator, { + key: 3, + rows: $data.d_rows, + first: $data.d_first, + totalRecords: $options.totalRecordsLength, + pageLinkSize: _ctx.pageLinkSize, + template: _ctx.paginatorTemplate, + rowsPerPageOptions: _ctx.rowsPerPageOptions, + currentPageReportTemplate: _ctx.currentPageReportTemplate, + "class": normalizeClass(_ctx.cx("pcPaginator", { + position: "bottom" + })), + onPage: _cache[4] || (_cache[4] = function($event) { + return $options.onPage($event); + }), + alwaysShow: _ctx.alwaysShowPaginator, + unstyled: _ctx.unstyled, + pt: _ctx.ptm("pcPaginator") + }, createSlots({ + _: 2 + }, [_ctx.$slots.paginatorcontainer ? { + name: "container", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorcontainer", { + first: slotProps.first, + last: slotProps.last, + rows: slotProps.rows, + page: slotProps.page, + pageCount: slotProps.pageCount, + totalRecords: slotProps.totalRecords, + firstPageCallback: slotProps.firstPageCallback, + lastPageCallback: slotProps.lastPageCallback, + prevPageCallback: slotProps.prevPageCallback, + nextPageCallback: slotProps.nextPageCallback, + rowChangeCallback: slotProps.rowChangeCallback + })]; + }), + key: "0" + } : void 0, _ctx.$slots.paginatorstart ? { + name: "start", + fn: withCtx(function() { + return [renderSlot(_ctx.$slots, "paginatorstart")]; + }), + key: "1" + } : void 0, _ctx.$slots.paginatorend ? { + name: "end", + fn: withCtx(function() { + return [renderSlot(_ctx.$slots, "paginatorend")]; + }), + key: "2" + } : void 0, _ctx.$slots.paginatorfirstpagelinkicon ? { + name: "firstpagelinkicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorfirstpagelinkicon", { + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "3" + } : void 0, _ctx.$slots.paginatorprevpagelinkicon ? { + name: "prevpagelinkicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorprevpagelinkicon", { + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "4" + } : void 0, _ctx.$slots.paginatornextpagelinkicon ? { + name: "nextpagelinkicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatornextpagelinkicon", { + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "5" + } : void 0, _ctx.$slots.paginatorlastpagelinkicon ? { + name: "lastpagelinkicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorlastpagelinkicon", { + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "6" + } : void 0, _ctx.$slots.paginatorjumptopagedropdownicon ? { + name: "jumptopagedropdownicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorjumptopagedropdownicon", { + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "7" + } : void 0, _ctx.$slots.paginatorrowsperpagedropdownicon ? { + name: "rowsperpagedropdownicon", + fn: withCtx(function(slotProps) { + return [renderSlot(_ctx.$slots, "paginatorrowsperpagedropdownicon", { + "class": normalizeClass(slotProps["class"]) + })]; + }), + key: "8" + } : void 0]), 1032, ["rows", "first", "totalRecords", "pageLinkSize", "template", "rowsPerPageOptions", "currentPageReportTemplate", "class", "alwaysShow", "unstyled", "pt"])) : createCommentVNode("", true), _ctx.$slots.footer ? (openBlock(), createElementBlock("div", mergeProps({ + key: 4, + "class": _ctx.cx("footer") + }, _ctx.ptm("footer")), [renderSlot(_ctx.$slots, "footer")], 16)) : createCommentVNode("", true), createBaseVNode("div", mergeProps({ + ref: "resizeHelper", + "class": _ctx.cx("columnResizeIndicator"), + style: { + "display": "none" + } + }, _ctx.ptm("columnResizeIndicator")), null, 16)], 16); +} +__name(render3, "render"); +script.render = render3; +const electron = electronAPI(); +const openUrl = /* @__PURE__ */ __name((url) => { + window.open(url, "_blank"); + return true; +}, "openUrl"); +const DESKTOP_MAINTENANCE_TASKS = [ + { + id: "basePath", + execute: /* @__PURE__ */ __name(async () => await electron.setBasePath(), "execute"), + name: "Base path", + shortDescription: "Change the application base path.", + errorDescription: "Unable to open the base path. Please select a new one.", + description: "The base path is the default location where ComfyUI stores data. It is the location fo the python environment, and may also contain models, custom nodes, and other extensions.", + isInstallationFix: true, + button: { + icon: PrimeIcons.QUESTION, + text: "Select" + } + }, + { + id: "git", + headerImg: "/assets/images/Git-Logo-White.svg", + execute: /* @__PURE__ */ __name(() => openUrl("https://git-scm.com/downloads/"), "execute"), + name: "Download git", + shortDescription: "Open the git download page.", + errorDescription: "Git is missing. Please download and install git, then restart ComfyUI Desktop.", + description: "Git is required to download and manage custom nodes and other extensions. This task opens the download page in your default browser, where you can download the latest version of git. Once you have installed git, please restart ComfyUI Desktop.", + button: { + icon: PrimeIcons.EXTERNAL_LINK, + text: "Download" + } + }, + { + id: "vcRedist", + execute: /* @__PURE__ */ __name(() => openUrl("https://aka.ms/vs/17/release/vc_redist.x64.exe"), "execute"), + name: "Download VC++ Redist", + shortDescription: "Download the latest VC++ Redistributable runtime.", + description: "The Visual C++ runtime libraries are required to run ComfyUI. You will need to download and install this file.", + button: { + icon: PrimeIcons.EXTERNAL_LINK, + text: "Download" + } + }, + { + id: "reinstall", + severity: "danger", + requireConfirm: true, + execute: /* @__PURE__ */ __name(async () => { + await electron.reinstall(); + return true; + }, "execute"), + name: "Reinstall ComfyUI", + shortDescription: "Deletes the desktop app config and load the welcome screen.", + description: "Delete the desktop app config, restart the app, and load the installation screen.", + confirmText: "Delete all saved config and reinstall?", + button: { + icon: PrimeIcons.EXCLAMATION_TRIANGLE, + text: "Reinstall" + } + }, + { + id: "pythonPackages", + requireConfirm: true, + execute: /* @__PURE__ */ __name(async () => { + try { + await electron.uv.installRequirements(); + return true; + } catch (error) { + return false; + } + }, "execute"), + name: "Install python packages", + shortDescription: "Installs the base python packages required to run ComfyUI.", + errorDescription: "Python packages that are required to run ComfyUI are not installed.", + description: "This will install the python packages required to run ComfyUI. This includes torch, torchvision, and other dependencies.", + usesTerminal: true, + isInstallationFix: true, + button: { + icon: PrimeIcons.DOWNLOAD, + text: "Install" + } + }, + { + id: "uv", + execute: /* @__PURE__ */ __name(() => openUrl("https://docs.astral.sh/uv/getting-started/installation/"), "execute"), + name: "uv executable", + shortDescription: "uv installs and maintains the python environment.", + description: "This will open the download page for Astral's uv tool. uv is used to install python and manage python packages.", + button: { + icon: "pi pi-asterisk", + text: "Download" + } + }, + { + id: "uvCache", + severity: "danger", + requireConfirm: true, + execute: /* @__PURE__ */ __name(async () => await electron.uv.clearCache(), "execute"), + name: "uv cache", + shortDescription: "Remove the Astral uv cache of python packages.", + description: "This will remove the uv cache directory and its contents. All downloaded python packages will need to be downloaded again.", + confirmText: "Delete uv cache of python packages?", + isInstallationFix: true, + button: { + icon: PrimeIcons.TRASH, + text: "Clear cache" + } + }, + { + id: "venvDirectory", + severity: "danger", + requireConfirm: true, + execute: /* @__PURE__ */ __name(async () => await electron.uv.resetVenv(), "execute"), + name: "Reset virtual environment", + shortDescription: "Remove and recreate the .venv directory. This removes all python packages.", + description: "The python environment is where ComfyUI installs python and python packages. It is used to run the ComfyUI server.", + confirmText: "Delete the .venv directory?", + usesTerminal: true, + isInstallationFix: true, + button: { + icon: PrimeIcons.FOLDER, + text: "Recreate" + } + } +]; +class MaintenanceTaskRunner { + static { + __name(this, "MaintenanceTaskRunner"); + } + constructor(task) { + this.task = task; + } + _state; + /** The current state of the task. Setter also controls {@link resolved} as a side-effect. */ + get state() { + return this._state; + } + /** Updates the task state and {@link resolved} status. */ + setState(value2) { + if (this._state === "error" && value2 === "OK") this.resolved = true; + if (value2 === "error") this.resolved &&= false; + this._state = value2; + } + /** `true` if the task has been resolved (was `error`, now `OK`). This is a side-effect of the {@link state} setter. */ + resolved; + /** Whether the task state is currently being refreshed. */ + refreshing; + /** Whether the task is currently running. */ + executing; + /** The error message that occurred when the task failed. */ + error; + update(update) { + const state = update[this.task.id]; + this.refreshing = state === void 0; + if (state) this.setState(state); + } + finaliseUpdate(update) { + this.refreshing = false; + this.setState(update[this.task.id] ?? "skipped"); + } + /** Wraps the execution of a maintenance task, updating state and rethrowing errors. */ + async execute(task) { + try { + this.executing = true; + const success = await task.execute(); + if (!success) return false; + this.error = void 0; + return true; + } catch (error) { + this.error = error?.message; + throw error; + } finally { + this.executing = false; + } + } +} +const useMaintenanceTaskStore = defineStore("maintenanceTask", () => { + const electron2 = electronAPI(); + const isRefreshing = ref(false); + const isRunningTerminalCommand = computed( + () => tasks.value.filter((task) => task.usesTerminal).some((task) => getRunner(task)?.executing) + ); + const isRunningInstallationFix = computed( + () => tasks.value.filter((task) => task.isInstallationFix).some((task) => getRunner(task)?.executing) + ); + const tasks = ref(DESKTOP_MAINTENANCE_TASKS); + const taskStates = ref( + new Map( + DESKTOP_MAINTENANCE_TASKS.map((x) => [x.id, new MaintenanceTaskRunner(x)]) + ) + ); + const anyErrors = computed( + () => tasks.value.some((task) => getRunner(task).state === "error") + ); + const getRunner = /* @__PURE__ */ __name((task) => taskStates.value.get(task.id), "getRunner"); + const processUpdate = /* @__PURE__ */ __name((validationUpdate) => { + const update = validationUpdate; + isRefreshing.value = true; + for (const task of tasks.value) { + getRunner(task).update(update); + } + if (!update.inProgress && isRefreshing.value) { + isRefreshing.value = false; + for (const task of tasks.value) { + getRunner(task).finaliseUpdate(update); + } + } + }, "processUpdate"); + const clearResolved = /* @__PURE__ */ __name(() => { + for (const task of tasks.value) { + getRunner(task).resolved &&= false; + } + }, "clearResolved"); + const refreshDesktopTasks = /* @__PURE__ */ __name(async () => { + isRefreshing.value = true; + console.log("Refreshing desktop tasks"); + await electron2.Validation.validateInstallation(processUpdate); + }, "refreshDesktopTasks"); + const execute = /* @__PURE__ */ __name(async (task) => { + return getRunner(task).execute(task); + }, "execute"); + return { + tasks, + isRefreshing, + isRunningTerminalCommand, + isRunningInstallationFix, + execute, + getRunner, + processUpdate, + clearResolved, + /** True if any tasks are in an error state. */ + anyErrors, + refreshDesktopTasks + }; +}); +function useMinLoadingDurationRef(value2, minDuration = 250) { + const current = ref(value2.value); + const { ready, start } = useTimeout(minDuration, { + controls: true, + immediate: false + }); + watch(value2, (newValue) => { + if (newValue && !current.value) start(); + current.value = newValue; + }); + return computed(() => current.value || !ready.value); +} +__name(useMinLoadingDurationRef, "useMinLoadingDurationRef"); +const _hoisted_1$3 = { + key: 0, + class: "pi pi-exclamation-triangle text-red-500 absolute m-2 top-0 -right-14 opacity-15", + style: { "font-size": "10rem" } +}; +const _hoisted_2$3 = ["src"]; +const _hoisted_3$3 = { class: "flex gap-4 mt-1" }; +const _hoisted_4$3 = { + key: 0, + class: "task-card-ok pi pi-check" +}; +const _sfc_main$4 = /* @__PURE__ */ defineComponent({ + __name: "TaskCard", + props: { + task: {} + }, + emits: ["execute"], + setup(__props) { + const taskStore = useMaintenanceTaskStore(); + const runner = computed(() => taskStore.getRunner(props.task)); + const props = __props; + const description = computed( + () => runner.value.state === "error" ? props.task.errorDescription ?? props.task.shortDescription : props.task.shortDescription + ); + const reactiveLoading = computed(() => runner.value.refreshing); + const reactiveExecuting = computed(() => runner.value.executing); + const isLoading = useMinLoadingDurationRef(reactiveLoading, 250); + const isExecuting = useMinLoadingDurationRef(reactiveExecuting, 250); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("div", { + class: normalizeClass(["task-div max-w-48 min-h-52 grid relative", { "opacity-75": unref(isLoading) }]) + }, [ + createVNode(unref(script$1Y), mergeProps({ + class: ["max-w-48 relative h-full overflow-hidden", { "opacity-65": runner.value.state !== "error" }] + }, (({ onClick: onClick11, ...rest }) => rest)(_ctx.$attrs)), { + header: withCtx(() => [ + runner.value.state === "error" ? (openBlock(), createElementBlock("i", _hoisted_1$3)) : createCommentVNode("", true), + _ctx.task.headerImg ? (openBlock(), createElementBlock("img", { + key: 1, + src: _ctx.task.headerImg, + class: "object-contain w-full h-full opacity-25 pt-4 px-4" + }, null, 8, _hoisted_2$3)) : createCommentVNode("", true) + ]), + title: withCtx(() => [ + createTextVNode(toDisplayString(_ctx.task.name), 1) + ]), + content: withCtx(() => [ + createTextVNode(toDisplayString(description.value), 1) + ]), + footer: withCtx(() => [ + createBaseVNode("div", _hoisted_3$3, [ + createVNode(unref(script$1e), { + icon: _ctx.task.button?.icon, + label: _ctx.task.button?.text, + class: "w-full", + raised: "", + "icon-pos": "right", + onClick: _cache[0] || (_cache[0] = (event2) => _ctx.$emit("execute", event2)), + loading: unref(isExecuting) + }, null, 8, ["icon", "label", "loading"]) + ]) + ]), + _: 1 + }, 16, ["class"]), + !unref(isLoading) && runner.value.state === "OK" ? (openBlock(), createElementBlock("i", _hoisted_4$3)) : createCommentVNode("", true) + ], 2); + }; + } +}); +const TaskCard = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-c3bd7658"]]); +const _sfc_main$3 = /* @__PURE__ */ defineComponent({ + __name: "TaskListStatusIcon", + props: { + state: {}, + loading: {} + }, + setup(__props) { + const tooltip = computed(() => { + if (props.state === "error") { + return t("g.error"); + } else if (props.state === "OK") { + return t("maintenance.OK"); + } else { + return t("maintenance.Skipped"); + } + }); + const cssClasses = computed(() => { + let classes2; + if (props.state === "error") { + classes2 = `${PrimeIcons.EXCLAMATION_TRIANGLE} text-red-500`; + } else if (props.state === "OK") { + classes2 = `${PrimeIcons.CHECK} text-green-500`; + } else { + classes2 = PrimeIcons.MINUS; + } + return `text-3xl pi ${classes2}`; + }); + const props = __props; + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return !_ctx.state || _ctx.loading ? (openBlock(), createBlock(unref(script$1h), { + key: 0, + class: "h-8 w-8" + })) : withDirectives((openBlock(), createElementBlock("i", { + key: 1, + class: normalizeClass(cssClasses.value) + }, null, 2)), [ + [ + _directive_tooltip, + { value: tooltip.value, showDelay: 250 }, + void 0, + { top: true } + ] + ]); + }; + } +}); +const _hoisted_1$2 = { class: "text-center w-16" }; +const _hoisted_2$2 = { class: "inline-block" }; +const _hoisted_3$2 = { class: "whitespace-pre-line" }; +const _hoisted_4$2 = { class: "text-right px-4" }; +const _sfc_main$2 = /* @__PURE__ */ defineComponent({ + __name: "TaskListItem", + props: { + task: {} + }, + emits: ["execute"], + setup(__props) { + const taskStore = useMaintenanceTaskStore(); + const runner = computed(() => taskStore.getRunner(props.task)); + const props = __props; + const severity = computed( + () => runner.value.state === "error" || runner.value.state === "warning" ? "primary" : "secondary" + ); + const reactiveLoading = computed(() => runner.value.refreshing); + const reactiveExecuting = computed(() => runner.value.executing); + const isLoading = useMinLoadingDurationRef(reactiveLoading, 250); + const isExecuting = useMinLoadingDurationRef(reactiveExecuting, 250); + const infoPopover = ref(); + const toggle6 = /* @__PURE__ */ __name((event2) => { + infoPopover.value.toggle(event2); + }, "toggle"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("tr", { + class: normalizeClass(["border-neutral-700 border-solid border-y", { + "opacity-50": runner.value.resolved, + "opacity-75": unref(isLoading) && runner.value.resolved + }]) + }, [ + createBaseVNode("td", _hoisted_1$2, [ + createVNode(_sfc_main$3, { + state: runner.value.state, + loading: unref(isLoading) + }, null, 8, ["state", "loading"]) + ]), + createBaseVNode("td", null, [ + createBaseVNode("p", _hoisted_2$2, toDisplayString(_ctx.task.name), 1), + createVNode(unref(script$1e), { + class: "inline-block mx-2", + type: "button", + icon: unref(PrimeIcons).INFO_CIRCLE, + severity: "secondary", + text: true, + onClick: toggle6 + }, null, 8, ["icon"]), + createVNode(unref(script$1Q), { + ref_key: "infoPopover", + ref: infoPopover, + class: "block m-1 max-w-64 min-w-32" + }, { + default: withCtx(() => [ + createBaseVNode("span", _hoisted_3$2, toDisplayString(_ctx.task.description), 1) + ]), + _: 1 + }, 512) + ]), + createBaseVNode("td", _hoisted_4$2, [ + createVNode(unref(script$1e), { + icon: _ctx.task.button?.icon, + label: _ctx.task.button?.text, + severity: severity.value, + "icon-pos": "right", + onClick: _cache[0] || (_cache[0] = (event2) => _ctx.$emit("execute", event2)), + loading: unref(isExecuting) + }, null, 8, ["icon", "label", "severity", "loading"]) + ]) + ], 2); + }; + } +}); +const _hoisted_1$1 = { class: "my-4" }; +const _hoisted_2$1 = { class: "text-neutral-400 w-full text-center" }; +const _hoisted_3$1 = { + key: 0, + class: "w-full border-collapse border-hidden" +}; +const _hoisted_4$1 = { + key: 1, + class: "flex flex-wrap justify-evenly gap-8 pad-y my-4" +}; +const _sfc_main$1 = /* @__PURE__ */ defineComponent({ + __name: "TaskListPanel", + props: { + displayAsList: {}, + filter: {}, + isRefreshing: { type: Boolean } + }, + setup(__props) { + const toast = useToast(); + const confirm = useConfirm(); + const taskStore = useMaintenanceTaskStore(); + const props = __props; + const executeTask = /* @__PURE__ */ __name(async (task) => { + let message; + try { + if (await taskStore.execute(task) === true) return; + message = t("maintenance.error.taskFailed"); + } catch (error) { + message = error?.message; + } + toast.add({ + severity: "error", + summary: t("maintenance.error.toastTitle"), + detail: message ?? t("maintenance.error.defaultDescription"), + life: 1e4 + }); + }, "executeTask"); + const confirmButton = /* @__PURE__ */ __name(async (event2, task) => { + if (!task.requireConfirm) { + await executeTask(task); + return; + } + confirm.require({ + target: event2.currentTarget, + message: task.confirmText ?? t("maintenance.confirmTitle"), + icon: "pi pi-exclamation-circle", + rejectProps: { + label: t("g.cancel"), + severity: "secondary", + outlined: true + }, + acceptProps: { + label: task.button?.text ?? t("g.save"), + severity: task.severity ?? "primary" + }, + // TODO: Not awaited. + accept: /* @__PURE__ */ __name(async () => { + await executeTask(task); + }, "accept") + }); + }, "confirmButton"); + return (_ctx, _cache) => { + return openBlock(), createElementBlock("section", _hoisted_1$1, [ + _ctx.filter.tasks.length === 0 ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [ + createVNode(unref(script$1Z)), + createBaseVNode("p", _hoisted_2$1, toDisplayString(_ctx.$t("maintenance.allOk")), 1) + ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [ + _ctx.displayAsList === unref(PrimeIcons).LIST ? (openBlock(), createElementBlock("table", _hoisted_3$1, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.filter.tasks, (task) => { + return openBlock(), createBlock(_sfc_main$2, { + key: task.id, + task, + onExecute: /* @__PURE__ */ __name((event2) => confirmButton(event2, task), "onExecute") + }, null, 8, ["task", "onExecute"]); + }), 128)) + ])) : (openBlock(), createElementBlock("div", _hoisted_4$1, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.filter.tasks, (task) => { + return openBlock(), createBlock(TaskCard, { + key: task.id, + task, + onExecute: /* @__PURE__ */ __name((event2) => confirmButton(event2, task), "onExecute") + }, null, 8, ["task", "onExecute"]); + }), 128)) + ])) + ], 64)), + createVNode(unref(script$1_)) + ]); + }; + } +}); +const _hoisted_1 = { class: "min-w-full min-h-full font-sans w-screen h-screen grid justify-around text-neutral-300 bg-neutral-900 dark-theme pointer-events-auto overflow-y-auto" }; +const _hoisted_2 = { class: "max-w-screen-sm w-screen m-8 relative" }; +const _hoisted_3 = { class: "w-full flex flex-wrap gap-4 items-center" }; +const _hoisted_4 = { class: "grow" }; +const _hoisted_5 = { class: "flex gap-4 items-center" }; +const _hoisted_6 = { class: "max-sm:hidden" }; +const _hoisted_7 = { class: "flex justify-between gap-4 flex-row" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "MaintenanceView", + setup(__props) { + const electron2 = electronAPI(); + const toast = useToast(); + const taskStore = useMaintenanceTaskStore(); + const { clearResolved, processUpdate, refreshDesktopTasks } = taskStore; + const terminalVisible = ref(false); + const reactiveIsRefreshing = computed(() => taskStore.isRefreshing); + const isRefreshing = useMinLoadingDurationRef(reactiveIsRefreshing, 250); + const anyErrors = computed(() => taskStore.anyErrors); + const displayAsList = ref(PrimeIcons.TH_LARGE); + const errorFilter = computed( + () => taskStore.tasks.filter((x) => { + const { state, resolved } = taskStore.getRunner(x); + return state === "error" || resolved; + }) + ); + const filterOptions = ref([ + { icon: PrimeIcons.FILTER_FILL, value: "All", tasks: taskStore.tasks }, + { icon: PrimeIcons.EXCLAMATION_TRIANGLE, value: "Errors", tasks: errorFilter } + ]); + const filter2 = ref(filterOptions.value[1]); + const completeValidation = /* @__PURE__ */ __name(async (alertOnFail = true) => { + const isValid = await electron2.Validation.complete(); + if (alertOnFail && !isValid) { + toast.add({ + severity: "error", + summary: "Error", + detail: "Unable to continue - errors remain", + life: 5e3 + }); + } + }, "completeValidation"); + const terminalCreated = /* @__PURE__ */ __name(({ terminal, useAutoSize }, root35) => { + useAutoSize({ root: root35, autoRows: true, autoCols: true }); + electron2.onLogMessage((message) => { + terminal.write(message); + }); + terminal.options.cursorBlink = false; + terminal.options.cursorStyle = "bar"; + terminal.options.cursorInactiveStyle = "bar"; + terminal.options.disableStdin = true; + }, "terminalCreated"); + const toggleConsoleDrawer = /* @__PURE__ */ __name(() => { + terminalVisible.value = !terminalVisible.value; + }, "toggleConsoleDrawer"); + watch( + () => taskStore.isRunningTerminalCommand, + (value2) => { + terminalVisible.value = value2; + } + ); + watch( + () => taskStore.isRunningInstallationFix, + (value2, oldValue) => { + if (!value2 && oldValue) completeValidation(false); + } + ); + onMounted(async () => { + electron2.Validation.onUpdate(processUpdate); + const update = await electron2.Validation.getStatus(); + processUpdate(update); + }); + onUnmounted(() => electron2.Validation.dispose()); + return (_ctx, _cache) => { + return openBlock(), createBlock(_sfc_main$7, { dark: "" }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + createBaseVNode("div", _hoisted_2, [ + _cache[6] || (_cache[6] = createBaseVNode("h1", { class: "backspan pi-wrench text-4xl font-bold" }, "Maintenance", -1)), + createBaseVNode("div", _hoisted_3, [ + createBaseVNode("span", _hoisted_4, [ + _cache[5] || (_cache[5] = createTextVNode(" Status: ")), + createVNode(_sfc_main$5, { + refreshing: unref(isRefreshing), + error: anyErrors.value + }, null, 8, ["refreshing", "error"]) + ]), + createBaseVNode("div", _hoisted_5, [ + createVNode(unref(script$1$), { + modelValue: displayAsList.value, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => displayAsList.value = $event), + options: [unref(PrimeIcons).LIST, unref(PrimeIcons).TH_LARGE], + "allow-empty": false + }, { + option: withCtx((opts) => [ + createBaseVNode("i", { + class: normalizeClass(opts.option) + }, null, 2) + ]), + _: 1 + }, 8, ["modelValue", "options"]), + createVNode(unref(script$1$), { + modelValue: filter2.value, + "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => filter2.value = $event), + options: filterOptions.value, + "allow-empty": false, + optionLabel: "value", + dataKey: "value", + "area-labelledby": "custom", + onChange: unref(clearResolved) + }, { + option: withCtx((opts) => [ + createBaseVNode("i", { + class: normalizeClass(opts.option.icon) + }, null, 2), + createBaseVNode("span", _hoisted_6, toDisplayString(opts.option.value), 1) + ]), + _: 1 + }, 8, ["modelValue", "options", "onChange"]), + createVNode(_sfc_main$6, { + modelValue: unref(isRefreshing), + "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => isRef(isRefreshing) ? isRefreshing.value = $event : null), + severity: "secondary", + onRefresh: unref(refreshDesktopTasks) + }, null, 8, ["modelValue", "onRefresh"]) + ]) + ]), + createVNode(_sfc_main$1, { + class: "border-neutral-700 border-solid border-x-0 border-y", + filter: filter2.value, + displayAsList: displayAsList.value, + isRefreshing: unref(isRefreshing) + }, null, 8, ["filter", "displayAsList", "isRefreshing"]), + createBaseVNode("div", _hoisted_7, [ + createVNode(unref(script$1e), { + label: "Console Logs", + icon: "pi pi-desktop", + "icon-pos": "left", + severity: "secondary", + onClick: toggleConsoleDrawer + }), + createVNode(unref(script$1e), { + label: "Continue", + icon: "pi pi-arrow-right", + "icon-pos": "left", + severity: anyErrors.value ? "secondary" : "primary", + onClick: _cache[3] || (_cache[3] = () => completeValidation()), + loading: unref(isRefreshing) + }, null, 8, ["severity", "loading"]) + ]) + ]), + createVNode(unref(script$1c), { + visible: terminalVisible.value, + "onUpdate:visible": _cache[4] || (_cache[4] = ($event) => terminalVisible.value = $event), + header: "Terminal", + position: "bottom", + style: { "height": "max(50vh, 34rem)" } + }, { + default: withCtx(() => [ + createVNode(BaseTerminal, { onCreated: terminalCreated }) + ]), + _: 1 + }, 8, ["visible"]), + createVNode(unref(script$20)) + ]) + ]), + _: 1 + }); + }; + } +}); +const MaintenanceView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-74b78f7d"]]); +export { + MaintenanceView as default +}; +//# sourceMappingURL=MaintenanceView-B5Gl0Rrl.js.map diff --git a/web/assets/MaintenanceView-Bj5_Vr6o.css b/web/assets/MaintenanceView-Bj5_Vr6o.css new file mode 100644 index 0000000000000000000000000000000000000000..22e37c41dc137501fac0addb5d0cf168c5873899 --- /dev/null +++ b/web/assets/MaintenanceView-Bj5_Vr6o.css @@ -0,0 +1,87 @@ + +.task-card-ok[data-v-c3bd7658] { + + position: absolute; + + right: -1rem; + + bottom: -1rem; + + grid-column: 1 / -1; + + grid-row: 1 / -1; + + --tw-text-opacity: 1; + + color: rgb(150 206 76 / var(--tw-text-opacity)); + + opacity: 1; + + transition-property: opacity; + + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + + transition-duration: 150ms; + + font-size: 4rem; + text-shadow: 0.25rem 0 0.5rem black; + z-index: 10; +} +.p-card { +&[data-v-c3bd7658] { + + transition-property: opacity; + + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + + transition-duration: 150ms; + + --p-card-background: var(--p-button-secondary-background); + opacity: 0.9; + } +&.opacity-65[data-v-c3bd7658] { + opacity: 0.4; +} +&[data-v-c3bd7658]:hover { + opacity: 1; +} +} +[data-v-c3bd7658] .p-card-header { + z-index: 0; +} +[data-v-c3bd7658] .p-card-body { + z-index: 1; + flex-grow: 1; + justify-content: space-between; +} +.task-div { +> i[data-v-c3bd7658] { + pointer-events: none; +} +&:hover > i[data-v-c3bd7658] { + opacity: 0.2; +} +} + +[data-v-74b78f7d] .p-tag { + --p-tag-gap: 0.375rem; +} +.backspan[data-v-74b78f7d]::before { + position: absolute; + margin: 0px; + color: var(--p-text-muted-color); + font-family: 'primeicons'; + top: -2rem; + right: -2rem; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + display: inline-block; + -webkit-font-smoothing: antialiased; + opacity: 0.02; + font-size: min(14rem, 90vw); + z-index: 0; +} diff --git a/web/assets/ManualConfigurationView-CsirlNfV.css b/web/assets/ManualConfigurationView-CsirlNfV.css new file mode 100644 index 0000000000000000000000000000000000000000..dba81a0bb6686df009179fc7636e79b23a0e880d --- /dev/null +++ b/web/assets/ManualConfigurationView-CsirlNfV.css @@ -0,0 +1,7 @@ + +.p-tag[data-v-dc169863] { + --p-tag-gap: 0.5rem; +} +.comfy-installer[data-v-dc169863] { + margin-top: max(1rem, max(0px, calc((100vh - 42rem) * 0.5))); +} diff --git a/web/assets/ManualConfigurationView-DueOvLuK.js b/web/assets/ManualConfigurationView-DueOvLuK.js new file mode 100644 index 0000000000000000000000000000000000000000..383794c5251477ff72c5dc2d5cb15b18efb467d3 --- /dev/null +++ b/web/assets/ManualConfigurationView-DueOvLuK.js @@ -0,0 +1,74 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { d as defineComponent, K as useI18n, U as ref, p as onMounted, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, a4 as script, a$ as script$1, l as script$2, b5 as electronAPI, _ as _export_sfc } from "./index-4Hb32CNk.js"; +import { _ as _sfc_main$1 } from "./BaseViewTemplate-v6omkdXg.js"; +const _hoisted_1 = { class: "comfy-installer grow flex flex-col gap-4 text-neutral-300 max-w-110" }; +const _hoisted_2 = { class: "text-2xl font-semibold text-neutral-100" }; +const _hoisted_3 = { class: "m-1 text-neutral-300" }; +const _hoisted_4 = { class: "ml-2" }; +const _hoisted_5 = { class: "m-1 mb-4" }; +const _hoisted_6 = { class: "m-0" }; +const _hoisted_7 = { class: "m-1" }; +const _hoisted_8 = { class: "font-mono" }; +const _hoisted_9 = { class: "m-1" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "ManualConfigurationView", + setup(__props) { + const { t } = useI18n(); + const electron = electronAPI(); + const basePath = ref(null); + const sep = ref("/"); + const restartApp = /* @__PURE__ */ __name((message) => electron.restartApp(message), "restartApp"); + onMounted(async () => { + basePath.value = await electron.getBasePath(); + if (basePath.value.indexOf("/") === -1) sep.value = "\\"; + }); + return (_ctx, _cache) => { + return openBlock(), createBlock(_sfc_main$1, { dark: "" }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + createBaseVNode("h2", _hoisted_2, toDisplayString(_ctx.$t("install.manualConfiguration.title")), 1), + createBaseVNode("p", _hoisted_3, [ + createVNode(unref(script), { + icon: "pi pi-exclamation-triangle", + severity: "warn", + value: unref(t)("icon.exclamation-triangle") + }, null, 8, ["value"]), + createBaseVNode("strong", _hoisted_4, toDisplayString(_ctx.$t("install.gpuSelection.customComfyNeedsPython")), 1) + ]), + createBaseVNode("div", null, [ + createBaseVNode("p", _hoisted_5, toDisplayString(_ctx.$t("install.manualConfiguration.requirements")) + ": ", 1), + createBaseVNode("ul", _hoisted_6, [ + createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customManualVenv")), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t("install.gpuSelection.customInstallRequirements")), 1) + ]) + ]), + createBaseVNode("p", _hoisted_7, toDisplayString(_ctx.$t("install.manualConfiguration.createVenv")) + ":", 1), + createVNode(unref(script$1), { + header: unref(t)("install.manualConfiguration.virtualEnvironmentPath") + }, { + default: withCtx(() => [ + createBaseVNode("span", _hoisted_8, toDisplayString(`${basePath.value}${sep.value}.venv${sep.value}`), 1) + ]), + _: 1 + }, 8, ["header"]), + createBaseVNode("p", _hoisted_9, toDisplayString(_ctx.$t("install.manualConfiguration.restartWhenFinished")), 1), + createVNode(unref(script$2), { + class: "place-self-end", + label: unref(t)("menuLabels.Restart"), + severity: "warn", + icon: "pi pi-refresh", + onClick: _cache[0] || (_cache[0] = ($event) => restartApp("Manual configuration complete")) + }, null, 8, ["label"]) + ]) + ]), + _: 1 + }); + }; + } +}); +const ManualConfigurationView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-dc169863"]]); +export { + ManualConfigurationView as default +}; +//# sourceMappingURL=ManualConfigurationView-DueOvLuK.js.map diff --git a/web/assets/MetricsConsentView-DTQYUF4Z.js b/web/assets/MetricsConsentView-DTQYUF4Z.js new file mode 100644 index 0000000000000000000000000000000000000000..564780ee699c4dbad3dc74bb0a860e1d9faf8a94 --- /dev/null +++ b/web/assets/MetricsConsentView-DTQYUF4Z.js @@ -0,0 +1,86 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { _ as _sfc_main$1 } from "./BaseViewTemplate-v6omkdXg.js"; +import { d as defineComponent, aR as useToast, K as useI18n, U as ref, be as useRouter, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, a7 as createTextVNode, k as createVNode, j as unref, bn as script, l as script$1, b5 as electronAPI } from "./index-4Hb32CNk.js"; +const _hoisted_1 = { class: "h-full p-8 2xl:p-16 flex flex-col items-center justify-center" }; +const _hoisted_2 = { class: "bg-neutral-800 rounded-lg shadow-lg p-6 w-full max-w-[600px] flex flex-col gap-6" }; +const _hoisted_3 = { class: "text-3xl font-semibold text-neutral-100" }; +const _hoisted_4 = { class: "text-neutral-400" }; +const _hoisted_5 = { class: "text-neutral-400" }; +const _hoisted_6 = { + href: "https://comfy.org/privacy", + target: "_blank", + class: "text-blue-400 hover:text-blue-300 underline" +}; +const _hoisted_7 = { class: "flex items-center gap-4" }; +const _hoisted_8 = { + id: "metricsDescription", + class: "text-neutral-100" +}; +const _hoisted_9 = { class: "flex pt-6 justify-end" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "MetricsConsentView", + setup(__props) { + const toast = useToast(); + const { t } = useI18n(); + const allowMetrics = ref(true); + const router = useRouter(); + const isUpdating = ref(false); + const updateConsent = /* @__PURE__ */ __name(async () => { + isUpdating.value = true; + try { + await electronAPI().setMetricsConsent(allowMetrics.value); + } catch (error) { + toast.add({ + severity: "error", + summary: t("install.errorUpdatingConsent"), + detail: t("install.errorUpdatingConsentDetail"), + life: 3e3 + }); + } finally { + isUpdating.value = false; + } + router.push("/"); + }, "updateConsent"); + return (_ctx, _cache) => { + const _component_BaseViewTemplate = _sfc_main$1; + return openBlock(), createBlock(_component_BaseViewTemplate, { dark: "" }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + createBaseVNode("div", _hoisted_2, [ + createBaseVNode("h2", _hoisted_3, toDisplayString(_ctx.$t("install.helpImprove")), 1), + createBaseVNode("p", _hoisted_4, toDisplayString(_ctx.$t("install.updateConsent")), 1), + createBaseVNode("p", _hoisted_5, [ + createTextVNode(toDisplayString(_ctx.$t("install.moreInfo")) + " ", 1), + createBaseVNode("a", _hoisted_6, toDisplayString(_ctx.$t("install.privacyPolicy")), 1), + _cache[1] || (_cache[1] = createTextVNode(". ")) + ]), + createBaseVNode("div", _hoisted_7, [ + createVNode(unref(script), { + modelValue: allowMetrics.value, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => allowMetrics.value = $event), + "aria-describedby": "metricsDescription" + }, null, 8, ["modelValue"]), + createBaseVNode("span", _hoisted_8, toDisplayString(allowMetrics.value ? _ctx.$t("install.metricsEnabled") : _ctx.$t("install.metricsDisabled")), 1) + ]), + createBaseVNode("div", _hoisted_9, [ + createVNode(unref(script$1), { + label: _ctx.$t("g.ok"), + icon: "pi pi-check", + loading: isUpdating.value, + iconPos: "right", + onClick: updateConsent + }, null, 8, ["label", "loading"]) + ]) + ]) + ]) + ]), + _: 1 + }); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=MetricsConsentView-DTQYUF4Z.js.map diff --git a/web/assets/NotSupportedView-PDDrAb9U.js b/web/assets/NotSupportedView-PDDrAb9U.js new file mode 100644 index 0000000000000000000000000000000000000000..0293bb6fe357156405f4a3737d2b73ed3fb459a1 --- /dev/null +++ b/web/assets/NotSupportedView-PDDrAb9U.js @@ -0,0 +1,86 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { d as defineComponent, be as useRouter, r as resolveDirective, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, l as script, i as withDirectives, _ as _export_sfc } from "./index-4Hb32CNk.js"; +import { _ as _sfc_main$1 } from "./BaseViewTemplate-v6omkdXg.js"; +const _imports_0 = "" + new URL("images/sad_girl.png", import.meta.url).href; +const _hoisted_1 = { class: "sad-container" }; +const _hoisted_2 = { class: "no-drag sad-text flex items-center" }; +const _hoisted_3 = { class: "flex flex-col gap-8 p-8 min-w-110" }; +const _hoisted_4 = { class: "text-4xl font-bold text-red-500" }; +const _hoisted_5 = { class: "space-y-4" }; +const _hoisted_6 = { class: "text-xl" }; +const _hoisted_7 = { class: "list-disc list-inside space-y-1 text-neutral-800" }; +const _hoisted_8 = { class: "flex gap-4" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "NotSupportedView", + setup(__props) { + const openDocs = /* @__PURE__ */ __name(() => { + window.open( + "https://github.com/Comfy-Org/desktop#currently-supported-platforms", + "_blank" + ); + }, "openDocs"); + const reportIssue = /* @__PURE__ */ __name(() => { + window.open("https://forum.comfy.org/c/v1-feedback/", "_blank"); + }, "reportIssue"); + const router = useRouter(); + const continueToInstall = /* @__PURE__ */ __name(() => { + router.push("/install"); + }, "continueToInstall"); + return (_ctx, _cache) => { + const _directive_tooltip = resolveDirective("tooltip"); + return openBlock(), createBlock(_sfc_main$1, null, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + _cache[0] || (_cache[0] = createBaseVNode("img", { + class: "sad-girl", + src: _imports_0, + alt: "Sad girl illustration" + }, null, -1)), + createBaseVNode("div", _hoisted_2, [ + createBaseVNode("div", _hoisted_3, [ + createBaseVNode("h1", _hoisted_4, toDisplayString(_ctx.$t("notSupported.title")), 1), + createBaseVNode("div", _hoisted_5, [ + createBaseVNode("p", _hoisted_6, toDisplayString(_ctx.$t("notSupported.message")), 1), + createBaseVNode("ul", _hoisted_7, [ + createBaseVNode("li", null, toDisplayString(_ctx.$t("notSupported.supportedDevices.macos")), 1), + createBaseVNode("li", null, toDisplayString(_ctx.$t("notSupported.supportedDevices.windows")), 1) + ]) + ]), + createBaseVNode("div", _hoisted_8, [ + createVNode(unref(script), { + label: _ctx.$t("notSupported.learnMore"), + icon: "pi pi-github", + onClick: openDocs, + severity: "secondary" + }, null, 8, ["label"]), + createVNode(unref(script), { + label: _ctx.$t("notSupported.reportIssue"), + icon: "pi pi-flag", + onClick: reportIssue, + severity: "secondary" + }, null, 8, ["label"]), + withDirectives(createVNode(unref(script), { + label: _ctx.$t("notSupported.continue"), + icon: "pi pi-arrow-right", + iconPos: "right", + onClick: continueToInstall, + severity: "danger" + }, null, 8, ["label"]), [ + [_directive_tooltip, _ctx.$t("notSupported.continueTooltip")] + ]) + ]) + ]) + ]) + ]) + ]), + _: 1 + }); + }; + } +}); +const NotSupportedView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-ebb20958"]]); +export { + NotSupportedView as default +}; +//# sourceMappingURL=NotSupportedView-PDDrAb9U.js.map diff --git a/web/assets/NotSupportedView-RFx6eCkN.css b/web/assets/NotSupportedView-RFx6eCkN.css new file mode 100644 index 0000000000000000000000000000000000000000..594783813fddd9fe10389b33e5d16eb61d486547 --- /dev/null +++ b/web/assets/NotSupportedView-RFx6eCkN.css @@ -0,0 +1,19 @@ + +.sad-container { +&[data-v-ebb20958] { + display: grid; + align-items: center; + justify-content: space-evenly; + grid-template-columns: 25rem 1fr; +} +&[data-v-ebb20958] > * { + grid-row: 1; +} +} +.sad-text[data-v-ebb20958] { + grid-column: 1/3; +} +.sad-girl[data-v-ebb20958] { + grid-column: 2/3; + width: min(75vw, 100vh); +} diff --git a/web/assets/ServerConfigPanel-DnGhsuUV.js b/web/assets/ServerConfigPanel-DnGhsuUV.js new file mode 100644 index 0000000000000000000000000000000000000000..873f6ec76684e3860adbf795a21a812a6ae3bb29 --- /dev/null +++ b/web/assets/ServerConfigPanel-DnGhsuUV.js @@ -0,0 +1,156 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { o as openBlock, f as createElementBlock, m as createBaseVNode, H as markRaw, d as defineComponent, a as useSettingStore, ae as storeToRefs, O as watch, dy as useCopyToClipboard, K as useI18n, y as createBlock, z as withCtx, j as unref, bj as script, E as toDisplayString, D as renderList, F as Fragment, k as createVNode, l as script$1, B as createCommentVNode, bh as script$2, dz as FormItem, dn as _sfc_main$1, b5 as electronAPI } from "./index-4Hb32CNk.js"; +import { u as useServerConfigStore } from "./serverConfigStore-BYbZcbWj.js"; +const _hoisted_1$1 = { + viewBox: "0 0 24 24", + width: "1.2em", + height: "1.2em" +}; +function render(_ctx, _cache) { + return openBlock(), createElementBlock("svg", _hoisted_1$1, _cache[0] || (_cache[0] = [ + createBaseVNode("path", { + fill: "none", + stroke: "currentColor", + "stroke-linecap": "round", + "stroke-linejoin": "round", + "stroke-width": "2", + d: "m4 17l6-6l-6-6m8 14h8" + }, null, -1) + ])); +} +__name(render, "render"); +const __unplugin_components_0 = markRaw({ name: "lucide-terminal", render }); +const _hoisted_1 = { class: "flex flex-col gap-2" }; +const _hoisted_2 = { class: "flex justify-end gap-2" }; +const _hoisted_3 = { class: "flex items-center justify-between" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "ServerConfigPanel", + setup(__props) { + const settingStore = useSettingStore(); + const serverConfigStore = useServerConfigStore(); + const { + serverConfigsByCategory, + serverConfigValues, + launchArgs, + commandLineArgs, + modifiedConfigs + } = storeToRefs(serverConfigStore); + const revertChanges = /* @__PURE__ */ __name(() => { + serverConfigStore.revertChanges(); + }, "revertChanges"); + const restartApp = /* @__PURE__ */ __name(() => { + electronAPI().restartApp(); + }, "restartApp"); + watch(launchArgs, (newVal) => { + settingStore.set("Comfy.Server.LaunchArgs", newVal); + }); + watch(serverConfigValues, (newVal) => { + settingStore.set("Comfy.Server.ServerConfigValues", newVal); + }); + const { copyToClipboard } = useCopyToClipboard(); + const copyCommandLineArgs = /* @__PURE__ */ __name(async () => { + await copyToClipboard(commandLineArgs.value); + }, "copyCommandLineArgs"); + const { t } = useI18n(); + const translateItem = /* @__PURE__ */ __name((item) => { + return { + ...item, + name: t(`serverConfigItems.${item.id}.name`, item.name), + tooltip: item.tooltip ? t(`serverConfigItems.${item.id}.tooltip`, item.tooltip) : void 0 + }; + }, "translateItem"); + return (_ctx, _cache) => { + const _component_i_lucide58terminal = __unplugin_components_0; + return openBlock(), createBlock(_sfc_main$1, { + value: "Server-Config", + class: "server-config-panel" + }, { + header: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + unref(modifiedConfigs).length > 0 ? (openBlock(), createBlock(unref(script), { + key: 0, + severity: "info", + "pt:text": "w-full" + }, { + default: withCtx(() => [ + createBaseVNode("p", null, toDisplayString(_ctx.$t("serverConfig.modifiedConfigs")), 1), + createBaseVNode("ul", null, [ + (openBlock(true), createElementBlock(Fragment, null, renderList(unref(modifiedConfigs), (config) => { + return openBlock(), createElementBlock("li", { + key: config.id + }, toDisplayString(config.name) + ": " + toDisplayString(config.initialValue) + " → " + toDisplayString(config.value), 1); + }), 128)) + ]), + createBaseVNode("div", _hoisted_2, [ + createVNode(unref(script$1), { + label: _ctx.$t("serverConfig.revertChanges"), + onClick: revertChanges, + outlined: "" + }, null, 8, ["label"]), + createVNode(unref(script$1), { + label: _ctx.$t("serverConfig.restart"), + onClick: restartApp, + outlined: "", + severity: "danger" + }, null, 8, ["label"]) + ]) + ]), + _: 1 + })) : createCommentVNode("", true), + unref(commandLineArgs) ? (openBlock(), createBlock(unref(script), { + key: 1, + severity: "secondary", + "pt:text": "w-full" + }, { + icon: withCtx(() => [ + createVNode(_component_i_lucide58terminal, { class: "text-xl font-bold" }) + ]), + default: withCtx(() => [ + createBaseVNode("div", _hoisted_3, [ + createBaseVNode("p", null, toDisplayString(unref(commandLineArgs)), 1), + createVNode(unref(script$1), { + icon: "pi pi-clipboard", + onClick: copyCommandLineArgs, + severity: "secondary", + text: "" + }) + ]) + ]), + _: 1 + })) : createCommentVNode("", true) + ]) + ]), + default: withCtx(() => [ + (openBlock(true), createElementBlock(Fragment, null, renderList(Object.entries(unref(serverConfigsByCategory)), ([label, items], i) => { + return openBlock(), createElementBlock("div", { key: label }, [ + i > 0 ? (openBlock(), createBlock(unref(script$2), { key: 0 })) : createCommentVNode("", true), + createBaseVNode("h3", null, toDisplayString(_ctx.$t(`serverConfigCategories.${label}`, label)), 1), + (openBlock(true), createElementBlock(Fragment, null, renderList(items, (item) => { + return openBlock(), createElementBlock("div", { + key: item.name, + class: "mb-4" + }, [ + createVNode(FormItem, { + item: translateItem(item), + formValue: item.value, + "onUpdate:formValue": /* @__PURE__ */ __name(($event) => item.value = $event, "onUpdate:formValue"), + id: item.id, + labelClass: { + "text-highlight": item.initialValue !== item.value + } + }, null, 8, ["item", "formValue", "onUpdate:formValue", "id", "labelClass"]) + ]); + }), 128)) + ]); + }), 128)) + ]), + _: 1 + }); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=ServerConfigPanel-DnGhsuUV.js.map diff --git a/web/assets/ServerStartView-CJiwVDQY.css b/web/assets/ServerStartView-CJiwVDQY.css new file mode 100644 index 0000000000000000000000000000000000000000..7d53a927c9db3e9865e0721966c4b33b259e683a --- /dev/null +++ b/web/assets/ServerStartView-CJiwVDQY.css @@ -0,0 +1,5 @@ + +[data-v-4140d62b] .xterm-helper-textarea { + /* Hide this as it moves all over when uv is running */ + display: none; +} diff --git a/web/assets/ServerStartView-yzYZ8gms.js b/web/assets/ServerStartView-yzYZ8gms.js new file mode 100644 index 0000000000000000000000000000000000000000..18a6a63f1eaf3480471f91cee5388bca271185ee --- /dev/null +++ b/web/assets/ServerStartView-yzYZ8gms.js @@ -0,0 +1,100 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { d as defineComponent, K as useI18n, U as ref, bk as ProgressStatus, p as onMounted, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, a7 as createTextVNode, E as toDisplayString, j as unref, f as createElementBlock, B as createCommentVNode, k as createVNode, l as script, i as withDirectives, v as vShow, bl as BaseTerminal, b5 as electronAPI, _ as _export_sfc } from "./index-4Hb32CNk.js"; +import { _ as _sfc_main$1 } from "./BaseViewTemplate-v6omkdXg.js"; +const _hoisted_1 = { class: "flex flex-col w-full h-full items-center" }; +const _hoisted_2 = { class: "text-2xl font-bold" }; +const _hoisted_3 = { key: 0 }; +const _hoisted_4 = { + key: 0, + class: "flex flex-col items-center gap-4" +}; +const _hoisted_5 = { class: "flex items-center my-4 gap-2" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "ServerStartView", + setup(__props) { + const electron = electronAPI(); + const { t } = useI18n(); + const status = ref(ProgressStatus.INITIAL_STATE); + const electronVersion = ref(""); + let xterm; + const terminalVisible = ref(true); + const updateProgress = /* @__PURE__ */ __name(({ status: newStatus }) => { + status.value = newStatus; + if (newStatus === ProgressStatus.ERROR) terminalVisible.value = false; + else xterm?.clear(); + }, "updateProgress"); + const terminalCreated = /* @__PURE__ */ __name(({ terminal, useAutoSize }, root) => { + xterm = terminal; + useAutoSize({ root, autoRows: true, autoCols: true }); + electron.onLogMessage((message) => { + terminal.write(message); + }); + terminal.options.cursorBlink = false; + terminal.options.disableStdin = true; + terminal.options.cursorInactiveStyle = "block"; + }, "terminalCreated"); + const reinstall = /* @__PURE__ */ __name(() => electron.reinstall(), "reinstall"); + const reportIssue = /* @__PURE__ */ __name(() => { + window.open("https://forum.comfy.org/c/v1-feedback/", "_blank"); + }, "reportIssue"); + const openLogs = /* @__PURE__ */ __name(() => electron.openLogsFolder(), "openLogs"); + onMounted(async () => { + electron.sendReady(); + electron.onProgressUpdate(updateProgress); + electronVersion.value = await electron.getElectronVersion(); + }); + return (_ctx, _cache) => { + return openBlock(), createBlock(_sfc_main$1, { + dark: "", + class: "flex-col" + }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + createBaseVNode("h2", _hoisted_2, [ + createTextVNode(toDisplayString(unref(t)(`serverStart.process.${status.value}`)) + " ", 1), + status.value === unref(ProgressStatus).ERROR ? (openBlock(), createElementBlock("span", _hoisted_3, " v" + toDisplayString(electronVersion.value), 1)) : createCommentVNode("", true) + ]), + status.value === unref(ProgressStatus).ERROR ? (openBlock(), createElementBlock("div", _hoisted_4, [ + createBaseVNode("div", _hoisted_5, [ + createVNode(unref(script), { + icon: "pi pi-flag", + severity: "secondary", + label: unref(t)("serverStart.reportIssue"), + onClick: reportIssue + }, null, 8, ["label"]), + createVNode(unref(script), { + icon: "pi pi-file", + severity: "secondary", + label: unref(t)("serverStart.openLogs"), + onClick: openLogs + }, null, 8, ["label"]), + createVNode(unref(script), { + icon: "pi pi-refresh", + label: unref(t)("serverStart.reinstall"), + onClick: reinstall + }, null, 8, ["label"]) + ]), + !terminalVisible.value ? (openBlock(), createBlock(unref(script), { + key: 0, + icon: "pi pi-search", + severity: "secondary", + label: unref(t)("serverStart.showTerminal"), + onClick: _cache[0] || (_cache[0] = ($event) => terminalVisible.value = true) + }, null, 8, ["label"])) : createCommentVNode("", true) + ])) : createCommentVNode("", true), + withDirectives(createVNode(BaseTerminal, { onCreated: terminalCreated }, null, 512), [ + [vShow, terminalVisible.value] + ]) + ]) + ]), + _: 1 + }); + }; + } +}); +const ServerStartView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4140d62b"]]); +export { + ServerStartView as default +}; +//# sourceMappingURL=ServerStartView-yzYZ8gms.js.map diff --git a/web/assets/UserSelectView-DeJDnrF0.js b/web/assets/UserSelectView-DeJDnrF0.js new file mode 100644 index 0000000000000000000000000000000000000000..13504917ddcecdf55d291c5989c3efce139eec5b --- /dev/null +++ b/web/assets/UserSelectView-DeJDnrF0.js @@ -0,0 +1,101 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { d as defineComponent, aj as useUserStore, be as useRouter, U as ref, c as computed, p as onMounted, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, bf as withKeys, j as unref, bg as script, bh as script$1, bi as script$2, bj as script$3, a7 as createTextVNode, B as createCommentVNode, l as script$4 } from "./index-4Hb32CNk.js"; +import { _ as _sfc_main$1 } from "./BaseViewTemplate-v6omkdXg.js"; +const _hoisted_1 = { + id: "comfy-user-selection", + class: "min-w-84 relative rounded-lg bg-[var(--comfy-menu-bg)] p-5 px-10 shadow-lg" +}; +const _hoisted_2 = { class: "flex w-full flex-col items-center" }; +const _hoisted_3 = { class: "flex w-full flex-col gap-2" }; +const _hoisted_4 = { for: "new-user-input" }; +const _hoisted_5 = { class: "flex w-full flex-col gap-2" }; +const _hoisted_6 = { for: "existing-user-select" }; +const _hoisted_7 = { class: "mt-5" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "UserSelectView", + setup(__props) { + const userStore = useUserStore(); + const router = useRouter(); + const selectedUser = ref(null); + const newUsername = ref(""); + const loginError = ref(""); + const createNewUser = computed(() => newUsername.value.trim() !== ""); + const newUserExistsError = computed(() => { + return userStore.users.find((user) => user.username === newUsername.value) ? `User "${newUsername.value}" already exists` : ""; + }); + const error = computed(() => newUserExistsError.value || loginError.value); + const login = /* @__PURE__ */ __name(async () => { + try { + const user = createNewUser.value ? await userStore.createUser(newUsername.value) : selectedUser.value; + if (!user) { + throw new Error("No user selected"); + } + userStore.login(user); + router.push("/"); + } catch (err) { + loginError.value = err.message ?? JSON.stringify(err); + } + }, "login"); + onMounted(async () => { + if (!userStore.initialized) { + await userStore.initialize(); + } + }); + return (_ctx, _cache) => { + return openBlock(), createBlock(_sfc_main$1, { dark: "" }, { + default: withCtx(() => [ + createBaseVNode("main", _hoisted_1, [ + _cache[2] || (_cache[2] = createBaseVNode("h1", { class: "my-2.5 mb-7 font-normal" }, "ComfyUI", -1)), + createBaseVNode("div", _hoisted_2, [ + createBaseVNode("div", _hoisted_3, [ + createBaseVNode("label", _hoisted_4, toDisplayString(_ctx.$t("userSelect.newUser")) + ":", 1), + createVNode(unref(script), { + id: "new-user-input", + modelValue: newUsername.value, + "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => newUsername.value = $event), + placeholder: _ctx.$t("userSelect.enterUsername"), + onKeyup: withKeys(login, ["enter"]) + }, null, 8, ["modelValue", "placeholder"]) + ]), + createVNode(unref(script$1)), + createBaseVNode("div", _hoisted_5, [ + createBaseVNode("label", _hoisted_6, toDisplayString(_ctx.$t("userSelect.existingUser")) + ":", 1), + createVNode(unref(script$2), { + modelValue: selectedUser.value, + "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => selectedUser.value = $event), + class: "w-full", + inputId: "existing-user-select", + options: unref(userStore).users, + "option-label": "username", + placeholder: _ctx.$t("userSelect.selectUser"), + disabled: createNewUser.value + }, null, 8, ["modelValue", "options", "placeholder", "disabled"]), + error.value ? (openBlock(), createBlock(unref(script$3), { + key: 0, + severity: "error" + }, { + default: withCtx(() => [ + createTextVNode(toDisplayString(error.value), 1) + ]), + _: 1 + })) : createCommentVNode("", true) + ]), + createBaseVNode("footer", _hoisted_7, [ + createVNode(unref(script$4), { + label: _ctx.$t("userSelect.next"), + onClick: login + }, null, 8, ["label"]) + ]) + ]) + ]) + ]), + _: 1 + }); + }; + } +}); +export { + _sfc_main as default +}; +//# sourceMappingURL=UserSelectView-DeJDnrF0.js.map diff --git a/web/assets/WelcomeView-Brz3-luE.css b/web/assets/WelcomeView-Brz3-luE.css new file mode 100644 index 0000000000000000000000000000000000000000..522f34388e7e75d77a208922fa75b5fb5ec29af7 --- /dev/null +++ b/web/assets/WelcomeView-Brz3-luE.css @@ -0,0 +1,36 @@ + +.animated-gradient-text[data-v-7dfaf74c] { + font-weight: 700; + font-size: clamp(2rem, 8vw, 4rem); + background: linear-gradient(to right, #12c2e9, #c471ed, #f64f59, #12c2e9); + background-size: 300% auto; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + animation: gradient-7dfaf74c 8s linear infinite; +} +.text-glow[data-v-7dfaf74c] { + filter: drop-shadow(0 0 8px rgba(255, 255, 255, 0.3)); +} +@keyframes gradient-7dfaf74c { +0% { + background-position: 0% center; +} +100% { + background-position: 300% center; +} +} +.fade-in-up[data-v-7dfaf74c] { + animation: fadeInUp-7dfaf74c 1.5s ease-out; + animation-fill-mode: both; +} +@keyframes fadeInUp-7dfaf74c { +0% { + opacity: 0; + transform: translateY(20px); +} +100% { + opacity: 1; + transform: translateY(0); +} +} diff --git a/web/assets/WelcomeView-DkwLdayn.js b/web/assets/WelcomeView-DkwLdayn.js new file mode 100644 index 0000000000000000000000000000000000000000..95afcd734c2f81703dee78ef135ae39cd919f85d --- /dev/null +++ b/web/assets/WelcomeView-DkwLdayn.js @@ -0,0 +1,39 @@ +var __defProp = Object.defineProperty; +var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); +import { d as defineComponent, be as useRouter, o as openBlock, y as createBlock, z as withCtx, m as createBaseVNode, E as toDisplayString, k as createVNode, j as unref, l as script, _ as _export_sfc } from "./index-4Hb32CNk.js"; +import { _ as _sfc_main$1 } from "./BaseViewTemplate-v6omkdXg.js"; +const _hoisted_1 = { class: "flex flex-col items-center justify-center gap-8 p-8" }; +const _hoisted_2 = { class: "animated-gradient-text text-glow select-none" }; +const _sfc_main = /* @__PURE__ */ defineComponent({ + __name: "WelcomeView", + setup(__props) { + const router = useRouter(); + const navigateTo = /* @__PURE__ */ __name((path) => { + router.push(path); + }, "navigateTo"); + return (_ctx, _cache) => { + return openBlock(), createBlock(_sfc_main$1, { dark: "" }, { + default: withCtx(() => [ + createBaseVNode("div", _hoisted_1, [ + createBaseVNode("h1", _hoisted_2, toDisplayString(_ctx.$t("welcome.title")), 1), + createVNode(unref(script), { + label: _ctx.$t("welcome.getStarted"), + icon: "pi pi-arrow-right", + iconPos: "right", + size: "large", + rounded: "", + onClick: _cache[0] || (_cache[0] = ($event) => navigateTo("/install")), + class: "p-4 text-lg fade-in-up" + }, null, 8, ["label"]) + ]) + ]), + _: 1 + }); + }; + } +}); +const WelcomeView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7dfaf74c"]]); +export { + WelcomeView as default +}; +//# sourceMappingURL=WelcomeView-DkwLdayn.js.map diff --git a/web/assets/images/Git-Logo-White.svg b/web/assets/images/Git-Logo-White.svg new file mode 100644 index 0000000000000000000000000000000000000000..f2961b9443b0d93702f0643bd8082370747ebcf1 --- /dev/null +++ b/web/assets/images/Git-Logo-White.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/assets/images/apple-mps-logo.png b/web/assets/images/apple-mps-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..261edbfd638fd82bc7e0971b528a01d91f800179 Binary files /dev/null and b/web/assets/images/apple-mps-logo.png differ diff --git a/web/assets/images/manual-configuration.svg b/web/assets/images/manual-configuration.svg new file mode 100644 index 0000000000000000000000000000000000000000..bc90c647000aa58aa3757b19dfca11919336b202 --- /dev/null +++ b/web/assets/images/manual-configuration.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/web/assets/images/nvidia-logo.svg b/web/assets/images/nvidia-logo.svg new file mode 100644 index 0000000000000000000000000000000000000000..71f15b53b7701530ade042ecdad62c91422e1627 --- /dev/null +++ b/web/assets/images/nvidia-logo.svg @@ -0,0 +1,6 @@ + Artificial Intelligence Computing Leadership from NVIDIA + + + + + \ No newline at end of file diff --git a/web/assets/images/sad_girl.png b/web/assets/images/sad_girl.png new file mode 100644 index 0000000000000000000000000000000000000000..680a32c6e9bcd2a14dbbe8eb12b11ea6eef6643c --- /dev/null +++ b/web/assets/images/sad_girl.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d06dd18077d1cc5d4b7490f4b7f9a8b164a08b886990e5cf1ef3611ffc66b7f6 +size 177633 diff --git a/web/assets/index-4Hb32CNk.js b/web/assets/index-4Hb32CNk.js new file mode 100644 index 0000000000000000000000000000000000000000..ba83b1a4c2a49a8f8d606d1da52998fc085eb922 --- /dev/null +++ b/web/assets/index-4Hb32CNk.js @@ -0,0 +1,220054 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./GraphView-CUSGEqGS.js","./index-D4CAJ2MK.js","./index-D6zf5KAf.js","./keybindingService-BTNdTpfl.js","./serverConfigStore-BYbZcbWj.js","./GraphView-CVCdiww1.css","./UserSelectView-DeJDnrF0.js","./BaseViewTemplate-v6omkdXg.js","./ServerStartView-yzYZ8gms.js","./ServerStartView-CJiwVDQY.css","./InstallView-DTDlVr0Z.js","./index-hkkV7N7e.js","./uvMirrors-B-HKMf6X.js","./InstallView-DbJ2cGfL.css","./WelcomeView-DkwLdayn.js","./WelcomeView-Brz3-luE.css","./NotSupportedView-PDDrAb9U.js","./NotSupportedView-RFx6eCkN.css","./DownloadGitView-3STu4yxt.js","./ManualConfigurationView-DueOvLuK.js","./ManualConfigurationView-CsirlNfV.css","./MetricsConsentView-DTQYUF4Z.js","./DesktopStartView-coDnSXEF.js","./MaintenanceView-B5Gl0Rrl.js","./index-nJubvliG.js","./MaintenanceView-Bj5_Vr6o.css","./KeybindingPanel-C0Nt6GXU.js","./KeybindingPanel-DvrUYZ4S.css","./ExtensionPanel-GE0aOkbr.js","./ServerConfigPanel-DnGhsuUV.js","./index-B4tExwG7.js","./index-BRhY6FpL.css"])))=>i.map(i=>d[i]); +var __defProp2 = Object.defineProperty; +var __name = (target2, value4) => __defProp2(target2, "name", { value: value4, configurable: true }); +(/* @__PURE__ */ __name(function polyfill2() { + const relList = document.createElement("link").relList; + if (relList && relList.supports && relList.supports("modulepreload")) { + return; + } + for (const link2 of document.querySelectorAll('link[rel="modulepreload"]')) { + processPreload(link2); + } + new MutationObserver((mutations) => { + for (const mutation of mutations) { + if (mutation.type !== "childList") { + continue; + } + for (const node3 of mutation.addedNodes) { + if (node3.tagName === "LINK" && node3.rel === "modulepreload") + processPreload(node3); + } + } + }).observe(document, { childList: true, subtree: true }); + function getFetchOpts(link2) { + const fetchOpts = {}; + if (link2.integrity) fetchOpts.integrity = link2.integrity; + if (link2.referrerPolicy) fetchOpts.referrerPolicy = link2.referrerPolicy; + if (link2.crossOrigin === "use-credentials") + fetchOpts.credentials = "include"; + else if (link2.crossOrigin === "anonymous") fetchOpts.credentials = "omit"; + else fetchOpts.credentials = "same-origin"; + return fetchOpts; + } + __name(getFetchOpts, "getFetchOpts"); + function processPreload(link2) { + if (link2.ep) + return; + link2.ep = true; + const fetchOpts = getFetchOpts(link2); + fetch(link2.href, fetchOpts); + } + __name(processPreload, "processPreload"); +}, "polyfill"))(); +var __defProp$7 = Object.defineProperty; +var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols; +var __hasOwnProp$6 = Object.prototype.hasOwnProperty; +var __propIsEnum$6 = Object.prototype.propertyIsEnumerable; +var __defNormalProp$7 = /* @__PURE__ */ __name((obj, key, value4) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value: value4 }) : obj[key] = value4, "__defNormalProp$7"); +var __spreadValues$6 = /* @__PURE__ */ __name((a2, b2) => { + for (var prop2 in b2 || (b2 = {})) + if (__hasOwnProp$6.call(b2, prop2)) + __defNormalProp$7(a2, prop2, b2[prop2]); + if (__getOwnPropSymbols$6) + for (var prop2 of __getOwnPropSymbols$6(b2)) { + if (__propIsEnum$6.call(b2, prop2)) + __defNormalProp$7(a2, prop2, b2[prop2]); + } + return a2; +}, "__spreadValues$6"); +function isEmpty$3(value4) { + return value4 === null || value4 === void 0 || value4 === "" || Array.isArray(value4) && value4.length === 0 || !(value4 instanceof Date) && typeof value4 === "object" && Object.keys(value4).length === 0; +} +__name(isEmpty$3, "isEmpty$3"); +function compare$3(value1, value22, comparator, order = 1) { + let result = -1; + const emptyValue1 = isEmpty$3(value1); + const emptyValue2 = isEmpty$3(value22); + if (emptyValue1 && emptyValue2) result = 0; + else if (emptyValue1) result = order; + else if (emptyValue2) result = -order; + else if (typeof value1 === "string" && typeof value22 === "string") result = comparator(value1, value22); + else result = value1 < value22 ? -1 : value1 > value22 ? 1 : 0; + return result; +} +__name(compare$3, "compare$3"); +function _deepEquals$2(obj1, obj2, visited = /* @__PURE__ */ new WeakSet()) { + if (obj1 === obj2) return true; + if (!obj1 || !obj2 || typeof obj1 !== "object" || typeof obj2 !== "object") return false; + if (visited.has(obj1) || visited.has(obj2)) return false; + visited.add(obj1).add(obj2); + let arrObj1 = Array.isArray(obj1), arrObj2 = Array.isArray(obj2), i2, length, key; + if (arrObj1 && arrObj2) { + length = obj1.length; + if (length != obj2.length) return false; + for (i2 = length; i2-- !== 0; ) if (!_deepEquals$2(obj1[i2], obj2[i2], visited)) return false; + return true; + } + if (arrObj1 != arrObj2) return false; + let dateObj1 = obj1 instanceof Date, dateObj2 = obj2 instanceof Date; + if (dateObj1 != dateObj2) return false; + if (dateObj1 && dateObj2) return obj1.getTime() == obj2.getTime(); + let regexpObj1 = obj1 instanceof RegExp, regexpObj2 = obj2 instanceof RegExp; + if (regexpObj1 != regexpObj2) return false; + if (regexpObj1 && regexpObj2) return obj1.toString() == obj2.toString(); + let keys2 = Object.keys(obj1); + length = keys2.length; + if (length !== Object.keys(obj2).length) return false; + for (i2 = length; i2-- !== 0; ) if (!Object.prototype.hasOwnProperty.call(obj2, keys2[i2])) return false; + for (i2 = length; i2-- !== 0; ) { + key = keys2[i2]; + if (!_deepEquals$2(obj1[key], obj2[key], visited)) return false; + } + return true; +} +__name(_deepEquals$2, "_deepEquals$2"); +function deepEquals$2(obj1, obj2) { + return _deepEquals$2(obj1, obj2); +} +__name(deepEquals$2, "deepEquals$2"); +function isFunction$d(value4) { + return !!(value4 && value4.constructor && value4.call && value4.apply); +} +__name(isFunction$d, "isFunction$d"); +function isNotEmpty$2(value4) { + return !isEmpty$3(value4); +} +__name(isNotEmpty$2, "isNotEmpty$2"); +function resolveFieldData$2(data26, field2) { + if (!data26 || !field2) { + return null; + } + try { + const value4 = data26[field2]; + if (isNotEmpty$2(value4)) return value4; + } catch (e2) { + } + if (Object.keys(data26).length) { + if (isFunction$d(field2)) { + return field2(data26); + } else if (field2.indexOf(".") === -1) { + return data26[field2]; + } else { + let fields = field2.split("."); + let value4 = data26; + for (let i2 = 0, len = fields.length; i2 < len; ++i2) { + if (value4 == null) { + return null; + } + value4 = value4[fields[i2]]; + } + return value4; + } + } + return null; +} +__name(resolveFieldData$2, "resolveFieldData$2"); +function equals$2(obj1, obj2, field2) { + if (field2) return resolveFieldData$2(obj1, field2) === resolveFieldData$2(obj2, field2); + else return deepEquals$2(obj1, obj2); +} +__name(equals$2, "equals$2"); +function contains$2(value4, list2) { + if (value4 != null && list2 && list2.length) { + for (let val of list2) { + if (equals$2(value4, val)) return true; + } + } + return false; +} +__name(contains$2, "contains$2"); +function filter$2(value4, fields, filterValue) { + let filteredItems = []; + if (value4) { + for (let item3 of value4) { + for (let field2 of fields) { + if (String(resolveFieldData$2(item3, field2)).toLowerCase().indexOf(filterValue.toLowerCase()) > -1) { + filteredItems.push(item3); + break; + } + } + } + } + return filteredItems; +} +__name(filter$2, "filter$2"); +function findIndexInList$2(value4, list2) { + let index2 = -1; + if (list2) { + for (let i2 = 0; i2 < list2.length; i2++) { + if (list2[i2] === value4) { + index2 = i2; + break; + } + } + } + return index2; +} +__name(findIndexInList$2, "findIndexInList$2"); +function findLast$3(arr, callback) { + let item3; + if (isNotEmpty$2(arr)) { + try { + item3 = arr.findLast(callback); + } catch (e2) { + item3 = [...arr].reverse().find(callback); + } + } + return item3; +} +__name(findLast$3, "findLast$3"); +function findLastIndex$2(arr, callback) { + let index2 = -1; + if (isNotEmpty$2(arr)) { + try { + index2 = arr.findLastIndex(callback); + } catch (e2) { + index2 = arr.lastIndexOf([...arr].reverse().find(callback)); + } + } + return index2; +} +__name(findLastIndex$2, "findLastIndex$2"); +function isObject$g(value4, empty3 = true) { + return value4 instanceof Object && value4.constructor === Object && (empty3 || Object.keys(value4).length !== 0); +} +__name(isObject$g, "isObject$g"); +function resolve$4(obj, ...params) { + return isFunction$d(obj) ? obj(...params) : obj; +} +__name(resolve$4, "resolve$4"); +function isString$b(value4, empty3 = true) { + return typeof value4 === "string" && (empty3 || value4 !== ""); +} +__name(isString$b, "isString$b"); +function toFlatCase$2(str) { + return isString$b(str) ? str.replace(/(-|_)/g, "").toLowerCase() : str; +} +__name(toFlatCase$2, "toFlatCase$2"); +function getKeyValue$2(obj, key = "", params = {}) { + const fKeys = toFlatCase$2(key).split("."); + const fKey = fKeys.shift(); + return fKey ? isObject$g(obj) ? getKeyValue$2(resolve$4(obj[Object.keys(obj).find((k2) => toFlatCase$2(k2) === fKey) || ""], params), fKeys.join("."), params) : void 0 : resolve$4(obj, params); +} +__name(getKeyValue$2, "getKeyValue$2"); +function insertIntoOrderedArray$2(item3, index2, arr, sourceArr) { + if (arr.length > 0) { + let injected = false; + for (let i2 = 0; i2 < arr.length; i2++) { + let currentItemIndex = findIndexInList$2(arr[i2], sourceArr); + if (currentItemIndex > index2) { + arr.splice(i2, 0, item3); + injected = true; + break; + } + } + if (!injected) { + arr.push(item3); + } + } else { + arr.push(item3); + } +} +__name(insertIntoOrderedArray$2, "insertIntoOrderedArray$2"); +function isArray$c(value4, empty3 = true) { + return Array.isArray(value4) && (empty3 || value4.length !== 0); +} +__name(isArray$c, "isArray$c"); +function isDate$5(value4) { + return value4 instanceof Date && value4.constructor === Date; +} +__name(isDate$5, "isDate$5"); +function isLetter$3(char) { + return /^[a-zA-Z\u00C0-\u017F]$/.test(char); +} +__name(isLetter$3, "isLetter$3"); +function isNumber$7(value4) { + return isNotEmpty$2(value4) && !isNaN(value4); +} +__name(isNumber$7, "isNumber$7"); +function isPrintableCharacter$2(char = "") { + return isNotEmpty$2(char) && char.length === 1 && !!char.match(/\S| /); +} +__name(isPrintableCharacter$2, "isPrintableCharacter$2"); +function isScalar$2(value4) { + return value4 != null && (typeof value4 === "string" || typeof value4 === "number" || typeof value4 === "bigint" || typeof value4 === "boolean"); +} +__name(isScalar$2, "isScalar$2"); +function localeComparator$2() { + return new Intl.Collator(void 0, { numeric: true }).compare; +} +__name(localeComparator$2, "localeComparator$2"); +function matchRegex$2(str, regex2) { + if (regex2) { + const match2 = regex2.test(str); + regex2.lastIndex = 0; + return match2; + } + return false; +} +__name(matchRegex$2, "matchRegex$2"); +function mergeKeys$2(...args) { + const _mergeKeys = /* @__PURE__ */ __name((target2 = {}, source = {}) => { + const mergedObj = __spreadValues$6({}, target2); + Object.keys(source).forEach((key) => { + if (isObject$g(source[key]) && key in target2 && isObject$g(target2[key])) { + mergedObj[key] = _mergeKeys(target2[key], source[key]); + } else { + mergedObj[key] = source[key]; + } + }); + return mergedObj; + }, "_mergeKeys"); + return args.reduce((acc, obj, i2) => i2 === 0 ? obj : _mergeKeys(acc, obj), {}); +} +__name(mergeKeys$2, "mergeKeys$2"); +function minifyCSS$2(css4) { + return css4 ? css4.replace(/\/\*(?:(?!\*\/)[\s\S])*\*\/|[\r\n\t]+/g, "").replace(/ {2,}/g, " ").replace(/ ([{:}]) /g, "$1").replace(/([;,]) /g, "$1").replace(/ !/g, "!").replace(/: /g, ":") : css4; +} +__name(minifyCSS$2, "minifyCSS$2"); +function nestedKeys$2(obj = {}, parentKey = "") { + return Object.entries(obj).reduce((o2, [key, value4]) => { + const currentKey = parentKey ? `${parentKey}.${key}` : key; + isObject$g(value4) ? o2 = o2.concat(nestedKeys$2(value4, currentKey)) : o2.push(currentKey); + return o2; + }, []); +} +__name(nestedKeys$2, "nestedKeys$2"); +function omit$3(obj, ...keys2) { + if (!isObject$g(obj)) return obj; + const copy2 = __spreadValues$6({}, obj); + keys2 == null ? void 0 : keys2.flat().forEach((key) => delete copy2[key]); + return copy2; +} +__name(omit$3, "omit$3"); +function removeAccents$2(str) { + const accentCheckRegex = /[\xC0-\xFF\u0100-\u017E]/; + if (str && accentCheckRegex.test(str)) { + const accentsMap = { + A: /[\xC0-\xC5\u0100\u0102\u0104]/g, + AE: /[\xC6]/g, + C: /[\xC7\u0106\u0108\u010A\u010C]/g, + D: /[\xD0\u010E\u0110]/g, + E: /[\xC8-\xCB\u0112\u0114\u0116\u0118\u011A]/g, + G: /[\u011C\u011E\u0120\u0122]/g, + H: /[\u0124\u0126]/g, + I: /[\xCC-\xCF\u0128\u012A\u012C\u012E\u0130]/g, + IJ: /[\u0132]/g, + J: /[\u0134]/g, + K: /[\u0136]/g, + L: /[\u0139\u013B\u013D\u013F\u0141]/g, + N: /[\xD1\u0143\u0145\u0147\u014A]/g, + O: /[\xD2-\xD6\xD8\u014C\u014E\u0150]/g, + OE: /[\u0152]/g, + R: /[\u0154\u0156\u0158]/g, + S: /[\u015A\u015C\u015E\u0160]/g, + T: /[\u0162\u0164\u0166]/g, + U: /[\xD9-\xDC\u0168\u016A\u016C\u016E\u0170\u0172]/g, + W: /[\u0174]/g, + Y: /[\xDD\u0176\u0178]/g, + Z: /[\u0179\u017B\u017D]/g, + a: /[\xE0-\xE5\u0101\u0103\u0105]/g, + ae: /[\xE6]/g, + c: /[\xE7\u0107\u0109\u010B\u010D]/g, + d: /[\u010F\u0111]/g, + e: /[\xE8-\xEB\u0113\u0115\u0117\u0119\u011B]/g, + g: /[\u011D\u011F\u0121\u0123]/g, + i: /[\xEC-\xEF\u0129\u012B\u012D\u012F\u0131]/g, + ij: /[\u0133]/g, + j: /[\u0135]/g, + k: /[\u0137,\u0138]/g, + l: /[\u013A\u013C\u013E\u0140\u0142]/g, + n: /[\xF1\u0144\u0146\u0148\u014B]/g, + p: /[\xFE]/g, + o: /[\xF2-\xF6\xF8\u014D\u014F\u0151]/g, + oe: /[\u0153]/g, + r: /[\u0155\u0157\u0159]/g, + s: /[\u015B\u015D\u015F\u0161]/g, + t: /[\u0163\u0165\u0167]/g, + u: /[\xF9-\xFC\u0169\u016B\u016D\u016F\u0171\u0173]/g, + w: /[\u0175]/g, + y: /[\xFD\xFF\u0177]/g, + z: /[\u017A\u017C\u017E]/g + }; + for (let key in accentsMap) { + str = str.replace(accentsMap[key], key); + } + } + return str; +} +__name(removeAccents$2, "removeAccents$2"); +function reorderArray$2(value4, from2, to) { + if (value4 && from2 !== to) { + if (to >= value4.length) { + to %= value4.length; + from2 %= value4.length; + } + value4.splice(to, 0, value4.splice(from2, 1)[0]); + } +} +__name(reorderArray$2, "reorderArray$2"); +function sort$2(value1, value22, order = 1, comparator, nullSortOrder = 1) { + const result = compare$3(value1, value22, comparator, order); + let finalSortOrder = order; + if (isEmpty$3(value1) || isEmpty$3(value22)) { + finalSortOrder = nullSortOrder === 1 ? order : nullSortOrder; + } + return finalSortOrder * result; +} +__name(sort$2, "sort$2"); +function stringify$2(value4, indent = 2, currentIndent = 0) { + const currentIndentStr = " ".repeat(currentIndent); + const nextIndentStr = " ".repeat(currentIndent + indent); + if (isArray$c(value4)) { + return "[" + value4.map((v2) => stringify$2(v2, indent, currentIndent + indent)).join(", ") + "]"; + } else if (isDate$5(value4)) { + return value4.toISOString(); + } else if (isFunction$d(value4)) { + return value4.toString(); + } else if (isObject$g(value4)) { + return "{\n" + Object.entries(value4).map(([k2, v2]) => `${nextIndentStr}${k2}: ${stringify$2(v2, indent, currentIndent + indent)}`).join(",\n") + ` +${currentIndentStr}}`; + } else { + return JSON.stringify(value4); + } +} +__name(stringify$2, "stringify$2"); +function toCapitalCase$2(str) { + return isString$b(str, false) ? str[0].toUpperCase() + str.slice(1) : str; +} +__name(toCapitalCase$2, "toCapitalCase$2"); +function toKebabCase$2(str) { + return isString$b(str) ? str.replace(/(_)/g, "-").replace(/[A-Z]/g, (c2, i2) => i2 === 0 ? c2 : "-" + c2.toLowerCase()).toLowerCase() : str; +} +__name(toKebabCase$2, "toKebabCase$2"); +function toTokenKey$4(str) { + return isString$b(str) ? str.replace(/[A-Z]/g, (c2, i2) => i2 === 0 ? c2 : "." + c2.toLowerCase()).toLowerCase() : str; +} +__name(toTokenKey$4, "toTokenKey$4"); +function toValue$6(value4) { + if (value4 && typeof value4 === "object") { + if (value4.hasOwnProperty("current")) { + return value4.current; + } else if (value4.hasOwnProperty("value")) { + return value4.value; + } + } + return resolve$4(value4); +} +__name(toValue$6, "toValue$6"); +function EventBus$1() { + const allHandlers = /* @__PURE__ */ new Map(); + return { + on(type, handler12) { + let handlers2 = allHandlers.get(type); + if (!handlers2) handlers2 = [handler12]; + else handlers2.push(handler12); + allHandlers.set(type, handlers2); + return this; + }, + off(type, handler12) { + let handlers2 = allHandlers.get(type); + if (handlers2) { + handlers2.splice(handlers2.indexOf(handler12) >>> 0, 1); + } + return this; + }, + emit(type, evt) { + let handlers2 = allHandlers.get(type); + if (handlers2) { + handlers2.slice().map((handler12) => { + handler12(evt); + }); + } + }, + clear() { + allHandlers.clear(); + } + }; +} +__name(EventBus$1, "EventBus$1"); +var __defProp$6 = Object.defineProperty; +var __defProps$1 = Object.defineProperties; +var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors; +var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols; +var __hasOwnProp$5 = Object.prototype.hasOwnProperty; +var __propIsEnum$5 = Object.prototype.propertyIsEnumerable; +var __defNormalProp$6 = /* @__PURE__ */ __name((obj, key, value4) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value: value4 }) : obj[key] = value4, "__defNormalProp$6"); +var __spreadValues$5 = /* @__PURE__ */ __name((a2, b2) => { + for (var prop2 in b2 || (b2 = {})) + if (__hasOwnProp$5.call(b2, prop2)) + __defNormalProp$6(a2, prop2, b2[prop2]); + if (__getOwnPropSymbols$5) + for (var prop2 of __getOwnPropSymbols$5(b2)) { + if (__propIsEnum$5.call(b2, prop2)) + __defNormalProp$6(a2, prop2, b2[prop2]); + } + return a2; +}, "__spreadValues$5"); +var __spreadProps$1 = /* @__PURE__ */ __name((a2, b2) => __defProps$1(a2, __getOwnPropDescs$1(b2)), "__spreadProps$1"); +var __objRest$1 = /* @__PURE__ */ __name((source, exclude) => { + var target2 = {}; + for (var prop2 in source) + if (__hasOwnProp$5.call(source, prop2) && exclude.indexOf(prop2) < 0) + target2[prop2] = source[prop2]; + if (source != null && __getOwnPropSymbols$5) + for (var prop2 of __getOwnPropSymbols$5(source)) { + if (exclude.indexOf(prop2) < 0 && __propIsEnum$5.call(source, prop2)) + target2[prop2] = source[prop2]; + } + return target2; +}, "__objRest$1"); +function definePreset$1(...presets) { + return mergeKeys$2(...presets); +} +__name(definePreset$1, "definePreset$1"); +var ThemeService$1 = EventBus$1(); +var service_default$1 = ThemeService$1; +function toTokenKey$3(str) { + return isString$b(str) ? str.replace(/[A-Z]/g, (c2, i2) => i2 === 0 ? c2 : "." + c2.toLowerCase()).toLowerCase() : str; +} +__name(toTokenKey$3, "toTokenKey$3"); +function merge$3(value1, value22) { + if (isArray$c(value1)) { + value1.push(...value22 || []); + } else if (isObject$g(value1)) { + Object.assign(value1, value22); + } +} +__name(merge$3, "merge$3"); +function toValue$5(value4) { + return isObject$g(value4) && value4.hasOwnProperty("value") && value4.hasOwnProperty("type") ? value4.value : value4; +} +__name(toValue$5, "toValue$5"); +function toUnit$1(value4, variable = "") { + const excludedProperties = ["opacity", "z-index", "line-height", "font-weight", "flex", "flex-grow", "flex-shrink", "order"]; + if (!excludedProperties.some((property) => variable.endsWith(property))) { + const val = `${value4}`.trim(); + const valArr = val.split(" "); + return valArr.map((v2) => isNumber$7(v2) ? `${v2}px` : v2).join(" "); + } + return value4; +} +__name(toUnit$1, "toUnit$1"); +function toNormalizePrefix$1(prefix2) { + return prefix2.replaceAll(/ /g, "").replace(/[^\w]/g, "-"); +} +__name(toNormalizePrefix$1, "toNormalizePrefix$1"); +function toNormalizeVariable$1(prefix2 = "", variable = "") { + return toNormalizePrefix$1(`${isString$b(prefix2, false) && isString$b(variable, false) ? `${prefix2}-` : prefix2}${variable}`); +} +__name(toNormalizeVariable$1, "toNormalizeVariable$1"); +function getVariableName$1(prefix2 = "", variable = "") { + return `--${toNormalizeVariable$1(prefix2, variable)}`; +} +__name(getVariableName$1, "getVariableName$1"); +function hasOddBraces$1(str = "") { + const openBraces = (str.match(/{/g) || []).length; + const closeBraces = (str.match(/}/g) || []).length; + return (openBraces + closeBraces) % 2 !== 0; +} +__name(hasOddBraces$1, "hasOddBraces$1"); +function getVariableValue$1(value4, variable = "", prefix2 = "", excludedKeyRegexes = [], fallback) { + if (isString$b(value4)) { + const regex2 = /{([^}]*)}/g; + const val = value4.trim(); + if (hasOddBraces$1(val)) { + return void 0; + } else if (matchRegex$2(val, regex2)) { + const _val = val.replaceAll(regex2, (v2) => { + const path = v2.replace(/{|}/g, ""); + const keys2 = path.split(".").filter((_v) => !excludedKeyRegexes.some((_r) => matchRegex$2(_v, _r))); + return `var(${getVariableName$1(prefix2, toKebabCase$2(keys2.join("-")))}${isNotEmpty$2(fallback) ? `, ${fallback}` : ""})`; + }); + const calculationRegex = /(\d+\s+[\+\-\*\/]\s+\d+)/g; + const cleanedVarRegex = /var\([^)]+\)/g; + return matchRegex$2(_val.replace(cleanedVarRegex, "0"), calculationRegex) ? `calc(${_val})` : _val; + } + return val; + } else if (isNumber$7(value4)) { + return value4; + } + return void 0; +} +__name(getVariableValue$1, "getVariableValue$1"); +function getComputedValue$1(obj = {}, value4) { + if (isString$b(value4)) { + const regex2 = /{([^}]*)}/g; + const val = value4.trim(); + return matchRegex$2(val, regex2) ? val.replaceAll(regex2, (v2) => getKeyValue$2(obj, v2.replace(/{|}/g, ""))) : val; + } else if (isNumber$7(value4)) { + return value4; + } + return void 0; +} +__name(getComputedValue$1, "getComputedValue$1"); +function setProperty$1(properties, key, value4) { + if (isString$b(key, false)) { + properties.push(`${key}:${value4};`); + } +} +__name(setProperty$1, "setProperty$1"); +function getRule$1(selector, properties) { + if (selector) { + return `${selector}{${properties}}`; + } + return ""; +} +__name(getRule$1, "getRule$1"); +function normalizeColor$1(color2) { + if (color2.length === 4) { + return `#${color2[1]}${color2[1]}${color2[2]}${color2[2]}${color2[3]}${color2[3]}`; + } + return color2; +} +__name(normalizeColor$1, "normalizeColor$1"); +function hexToRgb$2(hex) { + var bigint = parseInt(hex.substring(1), 16); + var r2 = bigint >> 16 & 255; + var g2 = bigint >> 8 & 255; + var b2 = bigint & 255; + return { r: r2, g: g2, b: b2 }; +} +__name(hexToRgb$2, "hexToRgb$2"); +function rgbToHex$1(r2, g2, b2) { + return `#${r2.toString(16).padStart(2, "0")}${g2.toString(16).padStart(2, "0")}${b2.toString(16).padStart(2, "0")}`; +} +__name(rgbToHex$1, "rgbToHex$1"); +var mix_default$1 = /* @__PURE__ */ __name((color1, color2, weight) => { + color1 = normalizeColor$1(color1); + color2 = normalizeColor$1(color2); + var p2 = weight / 100; + var w2 = p2 * 2 - 1; + var w1 = (w2 + 1) / 2; + var w22 = 1 - w1; + var rgb1 = hexToRgb$2(color1); + var rgb2 = hexToRgb$2(color2); + var r2 = Math.round(rgb1.r * w1 + rgb2.r * w22); + var g2 = Math.round(rgb1.g * w1 + rgb2.g * w22); + var b2 = Math.round(rgb1.b * w1 + rgb2.b * w22); + return rgbToHex$1(r2, g2, b2); +}, "mix_default$1"); +var shade_default$1 = /* @__PURE__ */ __name((color2, percent) => mix_default$1("#000000", color2, percent), "shade_default$1"); +var tint_default$1 = /* @__PURE__ */ __name((color2, percent) => mix_default$1("#ffffff", color2, percent), "tint_default$1"); +var scales$1 = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950]; +var palette_default$1 = /* @__PURE__ */ __name((color2) => { + if (/{([^}]*)}/g.test(color2)) { + const token = color2.replace(/{|}/g, ""); + return scales$1.reduce((acc, scale) => (acc[scale] = `{${token}.${scale}}`, acc), {}); + } + return typeof color2 === "string" ? scales$1.reduce((acc, scale, i2) => (acc[scale] = i2 <= 5 ? tint_default$1(color2, (5 - i2) * 19) : shade_default$1(color2, (i2 - 5) * 15), acc), {}) : color2; +}, "palette_default$1"); +var $dt$1 = /* @__PURE__ */ __name((tokenPath) => { + var _a2; + const theme43 = config_default$1.getTheme(); + const variable = dtwt$1(theme43, tokenPath, void 0, "variable"); + const name2 = (_a2 = variable == null ? void 0 : variable.match(/--[\w-]+/g)) == null ? void 0 : _a2[0]; + const value4 = dtwt$1(theme43, tokenPath, void 0, "value"); + return { + name: name2, + variable, + value: value4 + }; +}, "$dt$1"); +var dt$1 = /* @__PURE__ */ __name((...args) => { + return dtwt$1(config_default$1.getTheme(), ...args); +}, "dt$1"); +var dtwt$1 = /* @__PURE__ */ __name((theme43 = {}, tokenPath, fallback, type) => { + if (tokenPath) { + const { variable: VARIABLE, options: OPTIONS } = config_default$1.defaults || {}; + const { prefix: prefix2, transform: transform2 } = (theme43 == null ? void 0 : theme43.options) || OPTIONS || {}; + const regex2 = /{([^}]*)}/g; + const token = matchRegex$2(tokenPath, regex2) ? tokenPath : `{${tokenPath}}`; + const isStrictTransform = type === "value" || isEmpty$3(type) && transform2 === "strict"; + return isStrictTransform ? config_default$1.getTokenValue(tokenPath) : getVariableValue$1(token, void 0, prefix2, [VARIABLE.excludedKeyRegex], fallback); + } + return ""; +}, "dtwt$1"); +function css$5(style2) { + return resolve$4(style2, { dt: dt$1 }); +} +__name(css$5, "css$5"); +var $t$1 = /* @__PURE__ */ __name((theme43 = {}) => { + let { preset: _preset, options: _options } = theme43; + return { + preset(value4) { + _preset = _preset ? mergeKeys$2(_preset, value4) : value4; + return this; + }, + options(value4) { + _options = _options ? __spreadValues$5(__spreadValues$5({}, _options), value4) : value4; + return this; + }, + // features + primaryPalette(primary) { + const { semantic } = _preset || {}; + _preset = __spreadProps$1(__spreadValues$5({}, _preset), { semantic: __spreadProps$1(__spreadValues$5({}, semantic), { primary }) }); + return this; + }, + surfacePalette(surface) { + var _a2, _b; + const { semantic } = _preset || {}; + const lightSurface = (surface == null ? void 0 : surface.hasOwnProperty("light")) ? surface == null ? void 0 : surface.light : surface; + const darkSurface = (surface == null ? void 0 : surface.hasOwnProperty("dark")) ? surface == null ? void 0 : surface.dark : surface; + const newColorScheme = { + colorScheme: { + light: __spreadValues$5(__spreadValues$5({}, (_a2 = semantic == null ? void 0 : semantic.colorScheme) == null ? void 0 : _a2.light), !!lightSurface && { surface: lightSurface }), + dark: __spreadValues$5(__spreadValues$5({}, (_b = semantic == null ? void 0 : semantic.colorScheme) == null ? void 0 : _b.dark), !!darkSurface && { surface: darkSurface }) + } + }; + _preset = __spreadProps$1(__spreadValues$5({}, _preset), { semantic: __spreadValues$5(__spreadValues$5({}, semantic), newColorScheme) }); + return this; + }, + // actions + define({ useDefaultPreset = false, useDefaultOptions = false } = {}) { + return { + preset: useDefaultPreset ? config_default$1.getPreset() : _preset, + options: useDefaultOptions ? config_default$1.getOptions() : _options + }; + }, + update({ mergePresets = true, mergeOptions: mergeOptions2 = true } = {}) { + const newTheme = { + preset: mergePresets ? mergeKeys$2(config_default$1.getPreset(), _preset) : _preset, + options: mergeOptions2 ? __spreadValues$5(__spreadValues$5({}, config_default$1.getOptions()), _options) : _options + }; + config_default$1.setTheme(newTheme); + return newTheme; + }, + use(options4) { + const newTheme = this.define(options4); + config_default$1.setTheme(newTheme); + return newTheme; + } + }; +}, "$t$1"); +function toVariables_default$1(theme43, options4 = {}) { + const VARIABLE = config_default$1.defaults.variable; + const { prefix: prefix2 = VARIABLE.prefix, selector = VARIABLE.selector, excludedKeyRegex = VARIABLE.excludedKeyRegex } = options4; + const _toVariables = /* @__PURE__ */ __name((_theme, _prefix = "") => { + return Object.entries(_theme).reduce( + (acc, [key, value4]) => { + const px = matchRegex$2(key, excludedKeyRegex) ? toNormalizeVariable$1(_prefix) : toNormalizeVariable$1(_prefix, toKebabCase$2(key)); + const v2 = toValue$5(value4); + if (isObject$g(v2)) { + const { variables: variables2, tokens: tokens2 } = _toVariables(v2, px); + merge$3(acc["tokens"], tokens2); + merge$3(acc["variables"], variables2); + } else { + acc["tokens"].push((prefix2 ? px.replace(`${prefix2}-`, "") : px).replaceAll("-", ".")); + setProperty$1(acc["variables"], getVariableName$1(px), getVariableValue$1(v2, px, prefix2, [excludedKeyRegex])); + } + return acc; + }, + { variables: [], tokens: [] } + ); + }, "_toVariables"); + const { variables, tokens } = _toVariables(theme43, prefix2); + return { + value: variables, + tokens, + declarations: variables.join(""), + css: getRule$1(selector, variables.join("")) + }; +} +__name(toVariables_default$1, "toVariables_default$1"); +var themeUtils_default$1 = { + regex: { + rules: { + class: { + pattern: /^\.([a-zA-Z][\w-]*)$/, + resolve(value4) { + return { type: "class", selector: value4, matched: this.pattern.test(value4.trim()) }; + } + }, + attr: { + pattern: /^\[(.*)\]$/, + resolve(value4) { + return { type: "attr", selector: `:root${value4}`, matched: this.pattern.test(value4.trim()) }; + } + }, + media: { + pattern: /^@media (.*)$/, + resolve(value4) { + return { type: "media", selector: `${value4}{:root{[CSS]}}`, matched: this.pattern.test(value4.trim()) }; + } + }, + system: { + pattern: /^system$/, + resolve(value4) { + return { type: "system", selector: "@media (prefers-color-scheme: dark){:root{[CSS]}}", matched: this.pattern.test(value4.trim()) }; + } + }, + custom: { + resolve(value4) { + return { type: "custom", selector: value4, matched: true }; + } + } + }, + resolve(value4) { + const rules = Object.keys(this.rules).filter((k2) => k2 !== "custom").map((r2) => this.rules[r2]); + return [value4].flat().map((v2) => { + var _a2; + return (_a2 = rules.map((r2) => r2.resolve(v2)).find((rr) => rr.matched)) != null ? _a2 : this.rules.custom.resolve(v2); + }); + } + }, + _toVariables(theme43, options4) { + return toVariables_default$1(theme43, { prefix: options4 == null ? void 0 : options4.prefix }); + }, + getCommon({ name: name2 = "", theme: theme43 = {}, params, set: set3, defaults: defaults2 }) { + var _e, _f, _g, _h, _i, _j, _k; + const { preset, options: options4 } = theme43; + let primitive_css, primitive_tokens, semantic_css, semantic_tokens, global_css, global_tokens, style2; + if (isNotEmpty$2(preset) && options4.transform !== "strict") { + const { primitive, semantic, extend: extend5 } = preset; + const _a2 = semantic || {}, { colorScheme } = _a2, sRest = __objRest$1(_a2, ["colorScheme"]); + const _b = extend5 || {}, { colorScheme: eColorScheme } = _b, eRest = __objRest$1(_b, ["colorScheme"]); + const _c = colorScheme || {}, { dark: dark2 } = _c, csRest = __objRest$1(_c, ["dark"]); + const _d = eColorScheme || {}, { dark: eDark } = _d, ecsRest = __objRest$1(_d, ["dark"]); + const prim_var = isNotEmpty$2(primitive) ? this._toVariables({ primitive }, options4) : {}; + const sRest_var = isNotEmpty$2(sRest) ? this._toVariables({ semantic: sRest }, options4) : {}; + const csRest_var = isNotEmpty$2(csRest) ? this._toVariables({ light: csRest }, options4) : {}; + const csDark_var = isNotEmpty$2(dark2) ? this._toVariables({ dark: dark2 }, options4) : {}; + const eRest_var = isNotEmpty$2(eRest) ? this._toVariables({ semantic: eRest }, options4) : {}; + const ecsRest_var = isNotEmpty$2(ecsRest) ? this._toVariables({ light: ecsRest }, options4) : {}; + const ecsDark_var = isNotEmpty$2(eDark) ? this._toVariables({ dark: eDark }, options4) : {}; + const [prim_css, prim_tokens] = [(_e = prim_var.declarations) != null ? _e : "", prim_var.tokens]; + const [sRest_css, sRest_tokens] = [(_f = sRest_var.declarations) != null ? _f : "", sRest_var.tokens || []]; + const [csRest_css, csRest_tokens] = [(_g = csRest_var.declarations) != null ? _g : "", csRest_var.tokens || []]; + const [csDark_css, csDark_tokens] = [(_h = csDark_var.declarations) != null ? _h : "", csDark_var.tokens || []]; + const [eRest_css, eRest_tokens] = [(_i = eRest_var.declarations) != null ? _i : "", eRest_var.tokens || []]; + const [ecsRest_css, ecsRest_tokens] = [(_j = ecsRest_var.declarations) != null ? _j : "", ecsRest_var.tokens || []]; + const [ecsDark_css, ecsDark_tokens] = [(_k = ecsDark_var.declarations) != null ? _k : "", ecsDark_var.tokens || []]; + primitive_css = this.transformCSS(name2, prim_css, "light", "variable", options4, set3, defaults2); + primitive_tokens = prim_tokens; + const semantic_light_css = this.transformCSS(name2, `${sRest_css}${csRest_css}`, "light", "variable", options4, set3, defaults2); + const semantic_dark_css = this.transformCSS(name2, `${csDark_css}`, "dark", "variable", options4, set3, defaults2); + semantic_css = `${semantic_light_css}${semantic_dark_css}`; + semantic_tokens = [.../* @__PURE__ */ new Set([...sRest_tokens, ...csRest_tokens, ...csDark_tokens])]; + const global_light_css = this.transformCSS(name2, `${eRest_css}${ecsRest_css}color-scheme:light`, "light", "variable", options4, set3, defaults2); + const global_dark_css = this.transformCSS(name2, `${ecsDark_css}color-scheme:dark`, "dark", "variable", options4, set3, defaults2); + global_css = `${global_light_css}${global_dark_css}`; + global_tokens = [.../* @__PURE__ */ new Set([...eRest_tokens, ...ecsRest_tokens, ...ecsDark_tokens])]; + style2 = resolve$4(preset.css, { dt: dt$1 }); + } + return { + primitive: { + css: primitive_css, + tokens: primitive_tokens + }, + semantic: { + css: semantic_css, + tokens: semantic_tokens + }, + global: { + css: global_css, + tokens: global_tokens + }, + style: style2 + }; + }, + getPreset({ name: name2 = "", preset = {}, options: options4, params, set: set3, defaults: defaults2, selector }) { + var _e, _f, _g; + let p_css, p_tokens, p_style; + if (isNotEmpty$2(preset) && options4.transform !== "strict") { + const _name = name2.replace("-directive", ""); + const _a2 = preset, { colorScheme, extend: extend5, css: css22 } = _a2, vRest = __objRest$1(_a2, ["colorScheme", "extend", "css"]); + const _b = extend5 || {}, { colorScheme: eColorScheme } = _b, evRest = __objRest$1(_b, ["colorScheme"]); + const _c = colorScheme || {}, { dark: dark2 } = _c, csRest = __objRest$1(_c, ["dark"]); + const _d = eColorScheme || {}, { dark: ecsDark } = _d, ecsRest = __objRest$1(_d, ["dark"]); + const vRest_var = isNotEmpty$2(vRest) ? this._toVariables({ [_name]: __spreadValues$5(__spreadValues$5({}, vRest), evRest) }, options4) : {}; + const csRest_var = isNotEmpty$2(csRest) ? this._toVariables({ [_name]: __spreadValues$5(__spreadValues$5({}, csRest), ecsRest) }, options4) : {}; + const csDark_var = isNotEmpty$2(dark2) ? this._toVariables({ [_name]: __spreadValues$5(__spreadValues$5({}, dark2), ecsDark) }, options4) : {}; + const [vRest_css, vRest_tokens] = [(_e = vRest_var.declarations) != null ? _e : "", vRest_var.tokens || []]; + const [csRest_css, csRest_tokens] = [(_f = csRest_var.declarations) != null ? _f : "", csRest_var.tokens || []]; + const [csDark_css, csDark_tokens] = [(_g = csDark_var.declarations) != null ? _g : "", csDark_var.tokens || []]; + const light_variable_css = this.transformCSS(_name, `${vRest_css}${csRest_css}`, "light", "variable", options4, set3, defaults2, selector); + const dark_variable_css = this.transformCSS(_name, csDark_css, "dark", "variable", options4, set3, defaults2, selector); + p_css = `${light_variable_css}${dark_variable_css}`; + p_tokens = [.../* @__PURE__ */ new Set([...vRest_tokens, ...csRest_tokens, ...csDark_tokens])]; + p_style = resolve$4(css22, { dt: dt$1 }); + } + return { + css: p_css, + tokens: p_tokens, + style: p_style + }; + }, + getPresetC({ name: name2 = "", theme: theme43 = {}, params, set: set3, defaults: defaults2 }) { + var _a2; + const { preset, options: options4 } = theme43; + const cPreset = (_a2 = preset == null ? void 0 : preset.components) == null ? void 0 : _a2[name2]; + return this.getPreset({ name: name2, preset: cPreset, options: options4, params, set: set3, defaults: defaults2 }); + }, + getPresetD({ name: name2 = "", theme: theme43 = {}, params, set: set3, defaults: defaults2 }) { + var _a2; + const dName = name2.replace("-directive", ""); + const { preset, options: options4 } = theme43; + const dPreset = (_a2 = preset == null ? void 0 : preset.directives) == null ? void 0 : _a2[dName]; + return this.getPreset({ name: dName, preset: dPreset, options: options4, params, set: set3, defaults: defaults2 }); + }, + applyDarkColorScheme(options4) { + return !(options4.darkModeSelector === "none" || options4.darkModeSelector === false); + }, + getColorSchemeOption(options4, defaults2) { + var _a2; + return this.applyDarkColorScheme(options4) ? this.regex.resolve(options4.darkModeSelector === true ? defaults2.options.darkModeSelector : (_a2 = options4.darkModeSelector) != null ? _a2 : defaults2.options.darkModeSelector) : []; + }, + getLayerOrder(name2, options4 = {}, params, defaults2) { + const { cssLayer } = options4; + if (cssLayer) { + const order = resolve$4(cssLayer.order || "primeui", params); + return `@layer ${order}`; + } + return ""; + }, + getCommonStyleSheet({ name: name2 = "", theme: theme43 = {}, params, props = {}, set: set3, defaults: defaults2 }) { + const common = this.getCommon({ name: name2, theme: theme43, params, set: set3, defaults: defaults2 }); + const _props = Object.entries(props).reduce((acc, [k2, v2]) => acc.push(`${k2}="${v2}"`) && acc, []).join(" "); + return Object.entries(common || {}).reduce((acc, [key, value4]) => { + if (value4 == null ? void 0 : value4.css) { + const _css = minifyCSS$2(value4 == null ? void 0 : value4.css); + const id3 = `${key}-variables`; + acc.push(``); + } + return acc; + }, []).join(""); + }, + getStyleSheet({ name: name2 = "", theme: theme43 = {}, params, props = {}, set: set3, defaults: defaults2 }) { + var _a2; + const options4 = { name: name2, theme: theme43, params, set: set3, defaults: defaults2 }; + const preset_css = (_a2 = name2.includes("-directive") ? this.getPresetD(options4) : this.getPresetC(options4)) == null ? void 0 : _a2.css; + const _props = Object.entries(props).reduce((acc, [k2, v2]) => acc.push(`${k2}="${v2}"`) && acc, []).join(" "); + return preset_css ? `` : ""; + }, + createTokens(obj = {}, defaults2, parentKey = "", parentPath = "", tokens = {}) { + Object.entries(obj).forEach(([key, value4]) => { + const currentKey = matchRegex$2(key, defaults2.variable.excludedKeyRegex) ? parentKey : parentKey ? `${parentKey}.${toTokenKey$4(key)}` : toTokenKey$4(key); + const currentPath = parentPath ? `${parentPath}.${key}` : key; + if (isObject$g(value4)) { + this.createTokens(value4, defaults2, currentKey, currentPath, tokens); + } else { + tokens[currentKey] || (tokens[currentKey] = { + paths: [], + computed(colorScheme, tokenPathMap = {}) { + var _a2, _b; + if (this.paths.length === 1) { + return (_a2 = this.paths[0]) == null ? void 0 : _a2.computed(this.paths[0].scheme, tokenPathMap["binding"]); + } else if (colorScheme && colorScheme !== "none") { + return (_b = this.paths.find((p2) => p2.scheme === colorScheme)) == null ? void 0 : _b.computed(colorScheme, tokenPathMap["binding"]); + } + return this.paths.map((p2) => p2.computed(p2.scheme, tokenPathMap[p2.scheme])); + } + }); + tokens[currentKey].paths.push({ + path: currentPath, + value: value4, + scheme: currentPath.includes("colorScheme.light") ? "light" : currentPath.includes("colorScheme.dark") ? "dark" : "none", + computed(colorScheme, tokenPathMap = {}) { + const regex2 = /{([^}]*)}/g; + let computedValue = value4; + tokenPathMap["name"] = this.path; + tokenPathMap["binding"] || (tokenPathMap["binding"] = {}); + if (matchRegex$2(value4, regex2)) { + const val = value4.trim(); + const _val = val.replaceAll(regex2, (v2) => { + var _a2; + const path = v2.replace(/{|}/g, ""); + const computed2 = (_a2 = tokens[path]) == null ? void 0 : _a2.computed(colorScheme, tokenPathMap); + return isArray$c(computed2) && computed2.length === 2 ? `light-dark(${computed2[0].value},${computed2[1].value})` : computed2 == null ? void 0 : computed2.value; + }); + const calculationRegex = /(\d+\w*\s+[\+\-\*\/]\s+\d+\w*)/g; + const cleanedVarRegex = /var\([^)]+\)/g; + computedValue = matchRegex$2(_val.replace(cleanedVarRegex, "0"), calculationRegex) ? `calc(${_val})` : _val; + } + isEmpty$3(tokenPathMap["binding"]) && delete tokenPathMap["binding"]; + return { + colorScheme, + path: this.path, + paths: tokenPathMap, + value: computedValue.includes("undefined") ? void 0 : computedValue + }; + } + }); + } + }); + return tokens; + }, + getTokenValue(tokens, path, defaults2) { + var _a2; + const normalizePath2 = /* @__PURE__ */ __name((str) => { + const strArr = str.split("."); + return strArr.filter((s2) => !matchRegex$2(s2.toLowerCase(), defaults2.variable.excludedKeyRegex)).join("."); + }, "normalizePath"); + const token = normalizePath2(path); + const colorScheme = path.includes("colorScheme.light") ? "light" : path.includes("colorScheme.dark") ? "dark" : void 0; + const computedValues = [(_a2 = tokens[token]) == null ? void 0 : _a2.computed(colorScheme)].flat().filter((computed2) => computed2); + return computedValues.length === 1 ? computedValues[0].value : computedValues.reduce((acc = {}, computed2) => { + const _a22 = computed2, { colorScheme: cs } = _a22, rest = __objRest$1(_a22, ["colorScheme"]); + acc[cs] = rest; + return acc; + }, void 0); + }, + getSelectorRule(selector1, selector2, type, css22) { + return type === "class" || type === "attr" ? getRule$1(isNotEmpty$2(selector2) ? `${selector1}${selector2},${selector1} ${selector2}` : selector1, css22) : getRule$1(selector1, isNotEmpty$2(selector2) ? getRule$1(selector2, css22) : css22); + }, + transformCSS(name2, css22, mode2, type, options4 = {}, set3, defaults2, selector) { + if (isNotEmpty$2(css22)) { + const { cssLayer } = options4; + if (type !== "style") { + const colorSchemeOption = this.getColorSchemeOption(options4, defaults2); + css22 = mode2 === "dark" ? colorSchemeOption.reduce((acc, { type: type2, selector: _selector }) => { + if (isNotEmpty$2(_selector)) { + acc += _selector.includes("[CSS]") ? _selector.replace("[CSS]", css22) : this.getSelectorRule(_selector, selector, type2, css22); + } + return acc; + }, "") : getRule$1(selector != null ? selector : ":root", css22); + } + if (cssLayer) { + const layerOptions = { + name: "primeui", + order: "primeui" + }; + isObject$g(cssLayer) && (layerOptions.name = resolve$4(cssLayer.name, { name: name2, type })); + if (isNotEmpty$2(layerOptions.name)) { + css22 = getRule$1(`@layer ${layerOptions.name}`, css22); + set3 == null ? void 0 : set3.layerNames(layerOptions.name); + } + } + return css22; + } + return ""; + } +}; +var config_default$1 = { + defaults: { + variable: { + prefix: "p", + selector: ":root", + excludedKeyRegex: /^(primitive|semantic|components|directives|variables|colorscheme|light|dark|common|root|states|extend|css)$/gi + }, + options: { + prefix: "p", + darkModeSelector: "system", + cssLayer: false + } + }, + _theme: void 0, + _layerNames: /* @__PURE__ */ new Set(), + _loadedStyleNames: /* @__PURE__ */ new Set(), + _loadingStyles: /* @__PURE__ */ new Set(), + _tokens: {}, + update(newValues = {}) { + const { theme: theme43 } = newValues; + if (theme43) { + this._theme = __spreadProps$1(__spreadValues$5({}, theme43), { + options: __spreadValues$5(__spreadValues$5({}, this.defaults.options), theme43.options) + }); + this._tokens = themeUtils_default$1.createTokens(this.preset, this.defaults); + this.clearLoadedStyleNames(); + } + }, + get theme() { + return this._theme; + }, + get preset() { + var _a2; + return ((_a2 = this.theme) == null ? void 0 : _a2.preset) || {}; + }, + get options() { + var _a2; + return ((_a2 = this.theme) == null ? void 0 : _a2.options) || {}; + }, + get tokens() { + return this._tokens; + }, + getTheme() { + return this.theme; + }, + setTheme(newValue2) { + this.update({ theme: newValue2 }); + service_default$1.emit("theme:change", newValue2); + }, + getPreset() { + return this.preset; + }, + setPreset(newValue2) { + this._theme = __spreadProps$1(__spreadValues$5({}, this.theme), { preset: newValue2 }); + this._tokens = themeUtils_default$1.createTokens(newValue2, this.defaults); + this.clearLoadedStyleNames(); + service_default$1.emit("preset:change", newValue2); + service_default$1.emit("theme:change", this.theme); + }, + getOptions() { + return this.options; + }, + setOptions(newValue2) { + this._theme = __spreadProps$1(__spreadValues$5({}, this.theme), { options: newValue2 }); + this.clearLoadedStyleNames(); + service_default$1.emit("options:change", newValue2); + service_default$1.emit("theme:change", this.theme); + }, + getLayerNames() { + return [...this._layerNames]; + }, + setLayerNames(layerName) { + this._layerNames.add(layerName); + }, + getLoadedStyleNames() { + return this._loadedStyleNames; + }, + isStyleNameLoaded(name2) { + return this._loadedStyleNames.has(name2); + }, + setLoadedStyleName(name2) { + this._loadedStyleNames.add(name2); + }, + deleteLoadedStyleName(name2) { + this._loadedStyleNames.delete(name2); + }, + clearLoadedStyleNames() { + this._loadedStyleNames.clear(); + }, + getTokenValue(tokenPath) { + return themeUtils_default$1.getTokenValue(this.tokens, tokenPath, this.defaults); + }, + getCommon(name2 = "", params) { + return themeUtils_default$1.getCommon({ name: name2, theme: this.theme, params, defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } }); + }, + getComponent(name2 = "", params) { + const options4 = { name: name2, theme: this.theme, params, defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } }; + return themeUtils_default$1.getPresetC(options4); + }, + getDirective(name2 = "", params) { + const options4 = { name: name2, theme: this.theme, params, defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } }; + return themeUtils_default$1.getPresetD(options4); + }, + getCustomPreset(name2 = "", preset, selector, params) { + const options4 = { name: name2, preset, options: this.options, selector, params, defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } }; + return themeUtils_default$1.getPreset(options4); + }, + getLayerOrderCSS(name2 = "") { + return themeUtils_default$1.getLayerOrder(name2, this.options, { names: this.getLayerNames() }, this.defaults); + }, + transformCSS(name2 = "", css22, type = "style", mode2) { + return themeUtils_default$1.transformCSS(name2, css22, mode2, type, this.options, { layerNames: this.setLayerNames.bind(this) }, this.defaults); + }, + getCommonStyleSheet(name2 = "", params, props = {}) { + return themeUtils_default$1.getCommonStyleSheet({ name: name2, theme: this.theme, params, props, defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } }); + }, + getStyleSheet(name2, params, props = {}) { + return themeUtils_default$1.getStyleSheet({ name: name2, theme: this.theme, params, props, defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } }); + }, + onStyleMounted(name2) { + this._loadingStyles.add(name2); + }, + onStyleUpdated(name2) { + this._loadingStyles.add(name2); + }, + onStyleLoaded(event, { name: name2 }) { + if (this._loadingStyles.size) { + this._loadingStyles.delete(name2); + service_default$1.emit(`theme:${name2}:load`, event); + !this._loadingStyles.size && service_default$1.emit("theme:load"); + } + } +}; +function updatePreset$1(...presets) { + const newPreset = mergeKeys$2(config_default$1.getPreset(), ...presets); + config_default$1.setPreset(newPreset); + return newPreset; +} +__name(updatePreset$1, "updatePreset$1"); +function updatePrimaryPalette$1(primary) { + return $t$1().primaryPalette(primary).update().preset; +} +__name(updatePrimaryPalette$1, "updatePrimaryPalette$1"); +function updateSurfacePalette$1(palette) { + return $t$1().surfacePalette(palette).update().preset; +} +__name(updateSurfacePalette$1, "updateSurfacePalette$1"); +function usePreset$1(...presets) { + const newPreset = mergeKeys$2(...presets); + config_default$1.setPreset(newPreset); + return newPreset; +} +__name(usePreset$1, "usePreset$1"); +function useTheme$1(theme43) { + return $t$1(theme43).update({ mergePresets: false }); +} +__name(useTheme$1, "useTheme$1"); +var index$1r = { + root: { + transitionDuration: "{transition.duration}" + }, + panel: { + borderWidth: "0 0 1px 0", + borderColor: "{content.border.color}" + }, + header: { + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{text.color}", + padding: "1.125rem", + fontWeight: "600", + borderRadius: "0", + borderWidth: "0", + borderColor: "{content.border.color}", + background: "{content.background}", + hoverBackground: "{content.background}", + activeBackground: "{content.background}", + activeHoverBackground: "{content.background}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + }, + toggleIcon: { + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{text.color}", + activeHoverColor: "{text.color}" + }, + first: { + topBorderRadius: "{content.border.radius}", + borderWidth: "0" + }, + last: { + bottomBorderRadius: "{content.border.radius}", + activeBottomBorderRadius: "0" + } + }, + content: { + borderWidth: "0", + borderColor: "{content.border.color}", + background: "{content.background}", + color: "{text.color}", + padding: "0 1.125rem 1.125rem 1.125rem" + } +}; +var index$1q = { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}" + }, + overlay: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}" + }, + list: { + padding: "{list.padding}", + gap: "{list.gap}" + }, + option: { + focusBackground: "{list.option.focus.background}", + selectedBackground: "{list.option.selected.background}", + selectedFocusBackground: "{list.option.selected.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + selectedColor: "{list.option.selected.color}", + selectedFocusColor: "{list.option.selected.focus.color}", + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}" + }, + optionGroup: { + background: "{list.option.group.background}", + color: "{list.option.group.color}", + fontWeight: "{list.option.group.font.weight}", + padding: "{list.option.group.padding}" + }, + dropdown: { + width: "2.5rem", + sm: { + width: "2rem" + }, + lg: { + width: "3rem" + }, + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.border.color}", + activeBorderColor: "{form.field.border.color}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + chip: { + borderRadius: "{border.radius.sm}" + }, + emptyMessage: { + padding: "{list.option.padding}" + }, + colorScheme: { + light: { + chip: { + focusBackground: "{surface.200}", + focusColor: "{surface.800}" + }, + dropdown: { + background: "{surface.100}", + hoverBackground: "{surface.200}", + activeBackground: "{surface.300}", + color: "{surface.600}", + hoverColor: "{surface.700}", + activeColor: "{surface.800}" + } + }, + dark: { + chip: { + focusBackground: "{surface.700}", + focusColor: "{surface.0}" + }, + dropdown: { + background: "{surface.800}", + hoverBackground: "{surface.700}", + activeBackground: "{surface.600}", + color: "{surface.300}", + hoverColor: "{surface.200}", + activeColor: "{surface.100}" + } + } + } +}; +var index$1p = { + root: { + width: "2rem", + height: "2rem", + fontSize: "1rem", + background: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}" + }, + icon: { + size: "1rem" + }, + group: { + borderColor: "{content.background}", + offset: "-0.75rem" + }, + lg: { + width: "3rem", + height: "3rem", + fontSize: "1.5rem", + icon: { + size: "1.5rem" + }, + group: { + offset: "-1rem" + } + }, + xl: { + width: "4rem", + height: "4rem", + fontSize: "2rem", + icon: { + size: "2rem" + }, + group: { + offset: "-1.5rem" + } + } +}; +var index$1o = { + root: { + borderRadius: "{border.radius.md}", + padding: "0 0.5rem", + fontSize: "0.75rem", + fontWeight: "700", + minWidth: "1.5rem", + height: "1.5rem" + }, + dot: { + size: "0.5rem" + }, + sm: { + fontSize: "0.625rem", + minWidth: "1.25rem", + height: "1.25rem" + }, + lg: { + fontSize: "0.875rem", + minWidth: "1.75rem", + height: "1.75rem" + }, + xl: { + fontSize: "1rem", + minWidth: "2rem", + height: "2rem" + }, + colorScheme: { + light: { + primary: { + background: "{primary.color}", + color: "{primary.contrast.color}" + }, + secondary: { + background: "{surface.100}", + color: "{surface.600}" + }, + success: { + background: "{green.500}", + color: "{surface.0}" + }, + info: { + background: "{sky.500}", + color: "{surface.0}" + }, + warn: { + background: "{orange.500}", + color: "{surface.0}" + }, + danger: { + background: "{red.500}", + color: "{surface.0}" + }, + contrast: { + background: "{surface.950}", + color: "{surface.0}" + } + }, + dark: { + primary: { + background: "{primary.color}", + color: "{primary.contrast.color}" + }, + secondary: { + background: "{surface.800}", + color: "{surface.300}" + }, + success: { + background: "{green.400}", + color: "{green.950}" + }, + info: { + background: "{sky.400}", + color: "{sky.950}" + }, + warn: { + background: "{orange.400}", + color: "{orange.950}" + }, + danger: { + background: "{red.400}", + color: "{red.950}" + }, + contrast: { + background: "{surface.0}", + color: "{surface.950}" + } + } + } +}; +var index$1n = { + primitive: { + borderRadius: { + none: "0", + xs: "2px", + sm: "4px", + md: "6px", + lg: "8px", + xl: "12px" + }, + emerald: { + 50: "#ecfdf5", + 100: "#d1fae5", + 200: "#a7f3d0", + 300: "#6ee7b7", + 400: "#34d399", + 500: "#10b981", + 600: "#059669", + 700: "#047857", + 800: "#065f46", + 900: "#064e3b", + 950: "#022c22" + }, + green: { + 50: "#f0fdf4", + 100: "#dcfce7", + 200: "#bbf7d0", + 300: "#86efac", + 400: "#4ade80", + 500: "#22c55e", + 600: "#16a34a", + 700: "#15803d", + 800: "#166534", + 900: "#14532d", + 950: "#052e16" + }, + lime: { + 50: "#f7fee7", + 100: "#ecfccb", + 200: "#d9f99d", + 300: "#bef264", + 400: "#a3e635", + 500: "#84cc16", + 600: "#65a30d", + 700: "#4d7c0f", + 800: "#3f6212", + 900: "#365314", + 950: "#1a2e05" + }, + red: { + 50: "#fef2f2", + 100: "#fee2e2", + 200: "#fecaca", + 300: "#fca5a5", + 400: "#f87171", + 500: "#ef4444", + 600: "#dc2626", + 700: "#b91c1c", + 800: "#991b1b", + 900: "#7f1d1d", + 950: "#450a0a" + }, + orange: { + 50: "#fff7ed", + 100: "#ffedd5", + 200: "#fed7aa", + 300: "#fdba74", + 400: "#fb923c", + 500: "#f97316", + 600: "#ea580c", + 700: "#c2410c", + 800: "#9a3412", + 900: "#7c2d12", + 950: "#431407" + }, + amber: { + 50: "#fffbeb", + 100: "#fef3c7", + 200: "#fde68a", + 300: "#fcd34d", + 400: "#fbbf24", + 500: "#f59e0b", + 600: "#d97706", + 700: "#b45309", + 800: "#92400e", + 900: "#78350f", + 950: "#451a03" + }, + yellow: { + 50: "#fefce8", + 100: "#fef9c3", + 200: "#fef08a", + 300: "#fde047", + 400: "#facc15", + 500: "#eab308", + 600: "#ca8a04", + 700: "#a16207", + 800: "#854d0e", + 900: "#713f12", + 950: "#422006" + }, + teal: { + 50: "#f0fdfa", + 100: "#ccfbf1", + 200: "#99f6e4", + 300: "#5eead4", + 400: "#2dd4bf", + 500: "#14b8a6", + 600: "#0d9488", + 700: "#0f766e", + 800: "#115e59", + 900: "#134e4a", + 950: "#042f2e" + }, + cyan: { + 50: "#ecfeff", + 100: "#cffafe", + 200: "#a5f3fc", + 300: "#67e8f9", + 400: "#22d3ee", + 500: "#06b6d4", + 600: "#0891b2", + 700: "#0e7490", + 800: "#155e75", + 900: "#164e63", + 950: "#083344" + }, + sky: { + 50: "#f0f9ff", + 100: "#e0f2fe", + 200: "#bae6fd", + 300: "#7dd3fc", + 400: "#38bdf8", + 500: "#0ea5e9", + 600: "#0284c7", + 700: "#0369a1", + 800: "#075985", + 900: "#0c4a6e", + 950: "#082f49" + }, + blue: { + 50: "#eff6ff", + 100: "#dbeafe", + 200: "#bfdbfe", + 300: "#93c5fd", + 400: "#60a5fa", + 500: "#3b82f6", + 600: "#2563eb", + 700: "#1d4ed8", + 800: "#1e40af", + 900: "#1e3a8a", + 950: "#172554" + }, + indigo: { + 50: "#eef2ff", + 100: "#e0e7ff", + 200: "#c7d2fe", + 300: "#a5b4fc", + 400: "#818cf8", + 500: "#6366f1", + 600: "#4f46e5", + 700: "#4338ca", + 800: "#3730a3", + 900: "#312e81", + 950: "#1e1b4b" + }, + violet: { + 50: "#f5f3ff", + 100: "#ede9fe", + 200: "#ddd6fe", + 300: "#c4b5fd", + 400: "#a78bfa", + 500: "#8b5cf6", + 600: "#7c3aed", + 700: "#6d28d9", + 800: "#5b21b6", + 900: "#4c1d95", + 950: "#2e1065" + }, + purple: { + 50: "#faf5ff", + 100: "#f3e8ff", + 200: "#e9d5ff", + 300: "#d8b4fe", + 400: "#c084fc", + 500: "#a855f7", + 600: "#9333ea", + 700: "#7e22ce", + 800: "#6b21a8", + 900: "#581c87", + 950: "#3b0764" + }, + fuchsia: { + 50: "#fdf4ff", + 100: "#fae8ff", + 200: "#f5d0fe", + 300: "#f0abfc", + 400: "#e879f9", + 500: "#d946ef", + 600: "#c026d3", + 700: "#a21caf", + 800: "#86198f", + 900: "#701a75", + 950: "#4a044e" + }, + pink: { + 50: "#fdf2f8", + 100: "#fce7f3", + 200: "#fbcfe8", + 300: "#f9a8d4", + 400: "#f472b6", + 500: "#ec4899", + 600: "#db2777", + 700: "#be185d", + 800: "#9d174d", + 900: "#831843", + 950: "#500724" + }, + rose: { + 50: "#fff1f2", + 100: "#ffe4e6", + 200: "#fecdd3", + 300: "#fda4af", + 400: "#fb7185", + 500: "#f43f5e", + 600: "#e11d48", + 700: "#be123c", + 800: "#9f1239", + 900: "#881337", + 950: "#4c0519" + }, + slate: { + 50: "#f8fafc", + 100: "#f1f5f9", + 200: "#e2e8f0", + 300: "#cbd5e1", + 400: "#94a3b8", + 500: "#64748b", + 600: "#475569", + 700: "#334155", + 800: "#1e293b", + 900: "#0f172a", + 950: "#020617" + }, + gray: { + 50: "#f9fafb", + 100: "#f3f4f6", + 200: "#e5e7eb", + 300: "#d1d5db", + 400: "#9ca3af", + 500: "#6b7280", + 600: "#4b5563", + 700: "#374151", + 800: "#1f2937", + 900: "#111827", + 950: "#030712" + }, + zinc: { + 50: "#fafafa", + 100: "#f4f4f5", + 200: "#e4e4e7", + 300: "#d4d4d8", + 400: "#a1a1aa", + 500: "#71717a", + 600: "#52525b", + 700: "#3f3f46", + 800: "#27272a", + 900: "#18181b", + 950: "#09090b" + }, + neutral: { + 50: "#fafafa", + 100: "#f5f5f5", + 200: "#e5e5e5", + 300: "#d4d4d4", + 400: "#a3a3a3", + 500: "#737373", + 600: "#525252", + 700: "#404040", + 800: "#262626", + 900: "#171717", + 950: "#0a0a0a" + }, + stone: { + 50: "#fafaf9", + 100: "#f5f5f4", + 200: "#e7e5e4", + 300: "#d6d3d1", + 400: "#a8a29e", + 500: "#78716c", + 600: "#57534e", + 700: "#44403c", + 800: "#292524", + 900: "#1c1917", + 950: "#0c0a09" + } + }, + semantic: { + transitionDuration: "0.2s", + focusRing: { + width: "1px", + style: "solid", + color: "{primary.color}", + offset: "2px", + shadow: "none" + }, + disabledOpacity: "0.6", + iconSize: "1rem", + anchorGutter: "2px", + primary: { + 50: "{emerald.50}", + 100: "{emerald.100}", + 200: "{emerald.200}", + 300: "{emerald.300}", + 400: "{emerald.400}", + 500: "{emerald.500}", + 600: "{emerald.600}", + 700: "{emerald.700}", + 800: "{emerald.800}", + 900: "{emerald.900}", + 950: "{emerald.950}" + }, + formField: { + paddingX: "0.75rem", + paddingY: "0.5rem", + sm: { + fontSize: "0.875rem", + paddingX: "0.625rem", + paddingY: "0.375rem" + }, + lg: { + fontSize: "1.125rem", + paddingX: "0.875rem", + paddingY: "0.625rem" + }, + borderRadius: "{border.radius.md}", + focusRing: { + width: "0", + style: "none", + color: "transparent", + offset: "0", + shadow: "none" + }, + transitionDuration: "{transition.duration}" + }, + list: { + padding: "0.25rem 0.25rem", + gap: "2px", + header: { + padding: "0.5rem 1rem 0.25rem 1rem" + }, + option: { + padding: "0.5rem 0.75rem", + borderRadius: "{border.radius.sm}" + }, + optionGroup: { + padding: "0.5rem 0.75rem", + fontWeight: "600" + } + }, + content: { + borderRadius: "{border.radius.md}" + }, + mask: { + transitionDuration: "0.15s" + }, + navigation: { + list: { + padding: "0.25rem 0.25rem", + gap: "2px" + }, + item: { + padding: "0.5rem 0.75rem", + borderRadius: "{border.radius.sm}", + gap: "0.5rem" + }, + submenuLabel: { + padding: "0.5rem 0.75rem", + fontWeight: "600" + }, + submenuIcon: { + size: "0.875rem" + } + }, + overlay: { + select: { + borderRadius: "{border.radius.md}", + shadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)" + }, + popover: { + borderRadius: "{border.radius.md}", + padding: "0.75rem", + shadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)" + }, + modal: { + borderRadius: "{border.radius.xl}", + padding: "1.25rem", + shadow: "0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1)" + }, + navigation: { + shadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)" + } + }, + colorScheme: { + light: { + surface: { + 0: "#ffffff", + 50: "{slate.50}", + 100: "{slate.100}", + 200: "{slate.200}", + 300: "{slate.300}", + 400: "{slate.400}", + 500: "{slate.500}", + 600: "{slate.600}", + 700: "{slate.700}", + 800: "{slate.800}", + 900: "{slate.900}", + 950: "{slate.950}" + }, + primary: { + color: "{primary.500}", + contrastColor: "#ffffff", + hoverColor: "{primary.600}", + activeColor: "{primary.700}" + }, + highlight: { + background: "{primary.50}", + focusBackground: "{primary.100}", + color: "{primary.700}", + focusColor: "{primary.800}" + }, + mask: { + background: "rgba(0,0,0,0.4)", + color: "{surface.200}" + }, + formField: { + background: "{surface.0}", + disabledBackground: "{surface.200}", + filledBackground: "{surface.50}", + filledHoverBackground: "{surface.50}", + filledFocusBackground: "{surface.50}", + borderColor: "{surface.300}", + hoverBorderColor: "{surface.400}", + focusBorderColor: "{primary.color}", + invalidBorderColor: "{red.400}", + color: "{surface.700}", + disabledColor: "{surface.500}", + placeholderColor: "{surface.500}", + invalidPlaceholderColor: "{red.600}", + floatLabelColor: "{surface.500}", + floatLabelFocusColor: "{primary.600}", + floatLabelActiveColor: "{surface.500}", + floatLabelInvalidColor: "{form.field.invalid.placeholder.color}", + iconColor: "{surface.400}", + shadow: "0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05)" + }, + text: { + color: "{surface.700}", + hoverColor: "{surface.800}", + mutedColor: "{surface.500}", + hoverMutedColor: "{surface.600}" + }, + content: { + background: "{surface.0}", + hoverBackground: "{surface.100}", + borderColor: "{surface.200}", + color: "{text.color}", + hoverColor: "{text.hover.color}" + }, + overlay: { + select: { + background: "{surface.0}", + borderColor: "{surface.200}", + color: "{text.color}" + }, + popover: { + background: "{surface.0}", + borderColor: "{surface.200}", + color: "{text.color}" + }, + modal: { + background: "{surface.0}", + borderColor: "{surface.200}", + color: "{text.color}" + } + }, + list: { + option: { + focusBackground: "{surface.100}", + selectedBackground: "{highlight.background}", + selectedFocusBackground: "{highlight.focus.background}", + color: "{text.color}", + focusColor: "{text.hover.color}", + selectedColor: "{highlight.color}", + selectedFocusColor: "{highlight.focus.color}", + icon: { + color: "{surface.400}", + focusColor: "{surface.500}" + } + }, + optionGroup: { + background: "transparent", + color: "{text.muted.color}" + } + }, + navigation: { + item: { + focusBackground: "{surface.100}", + activeBackground: "{surface.100}", + color: "{text.color}", + focusColor: "{text.hover.color}", + activeColor: "{text.hover.color}", + icon: { + color: "{surface.400}", + focusColor: "{surface.500}", + activeColor: "{surface.500}" + } + }, + submenuLabel: { + background: "transparent", + color: "{text.muted.color}" + }, + submenuIcon: { + color: "{surface.400}", + focusColor: "{surface.500}", + activeColor: "{surface.500}" + } + } + }, + dark: { + surface: { + 0: "#ffffff", + 50: "{zinc.50}", + 100: "{zinc.100}", + 200: "{zinc.200}", + 300: "{zinc.300}", + 400: "{zinc.400}", + 500: "{zinc.500}", + 600: "{zinc.600}", + 700: "{zinc.700}", + 800: "{zinc.800}", + 900: "{zinc.900}", + 950: "{zinc.950}" + }, + primary: { + color: "{primary.400}", + contrastColor: "{surface.900}", + hoverColor: "{primary.300}", + activeColor: "{primary.200}" + }, + highlight: { + background: "color-mix(in srgb, {primary.400}, transparent 84%)", + focusBackground: "color-mix(in srgb, {primary.400}, transparent 76%)", + color: "rgba(255,255,255,.87)", + focusColor: "rgba(255,255,255,.87)" + }, + mask: { + background: "rgba(0,0,0,0.6)", + color: "{surface.200}" + }, + formField: { + background: "{surface.950}", + disabledBackground: "{surface.700}", + filledBackground: "{surface.800}", + filledHoverBackground: "{surface.800}", + filledFocusBackground: "{surface.800}", + borderColor: "{surface.600}", + hoverBorderColor: "{surface.500}", + focusBorderColor: "{primary.color}", + invalidBorderColor: "{red.300}", + color: "{surface.0}", + disabledColor: "{surface.400}", + placeholderColor: "{surface.400}", + invalidPlaceholderColor: "{red.400}", + floatLabelColor: "{surface.400}", + floatLabelFocusColor: "{primary.color}", + floatLabelActiveColor: "{surface.400}", + floatLabelInvalidColor: "{form.field.invalid.placeholder.color}", + iconColor: "{surface.400}", + shadow: "0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgba(18, 18, 23, 0.05)" + }, + text: { + color: "{surface.0}", + hoverColor: "{surface.0}", + mutedColor: "{surface.400}", + hoverMutedColor: "{surface.300}" + }, + content: { + background: "{surface.900}", + hoverBackground: "{surface.800}", + borderColor: "{surface.700}", + color: "{text.color}", + hoverColor: "{text.hover.color}" + }, + overlay: { + select: { + background: "{surface.900}", + borderColor: "{surface.700}", + color: "{text.color}" + }, + popover: { + background: "{surface.900}", + borderColor: "{surface.700}", + color: "{text.color}" + }, + modal: { + background: "{surface.900}", + borderColor: "{surface.700}", + color: "{text.color}" + } + }, + list: { + option: { + focusBackground: "{surface.800}", + selectedBackground: "{highlight.background}", + selectedFocusBackground: "{highlight.focus.background}", + color: "{text.color}", + focusColor: "{text.hover.color}", + selectedColor: "{highlight.color}", + selectedFocusColor: "{highlight.focus.color}", + icon: { + color: "{surface.500}", + focusColor: "{surface.400}" + } + }, + optionGroup: { + background: "transparent", + color: "{text.muted.color}" + } + }, + navigation: { + item: { + focusBackground: "{surface.800}", + activeBackground: "{surface.800}", + color: "{text.color}", + focusColor: "{text.hover.color}", + activeColor: "{text.hover.color}", + icon: { + color: "{surface.500}", + focusColor: "{surface.400}", + activeColor: "{surface.400}" + } + }, + submenuLabel: { + background: "transparent", + color: "{text.muted.color}" + }, + submenuIcon: { + color: "{surface.500}", + focusColor: "{surface.400}", + activeColor: "{surface.400}" + } + } + } + } + } +}; +var index$1m = { + root: { + borderRadius: "{content.border.radius}" + } +}; +var index$1l = { + root: { + padding: "1rem", + background: "{content.background}", + gap: "0.5rem", + transitionDuration: "{transition.duration}" + }, + item: { + color: "{text.muted.color}", + hoverColor: "{text.color}", + borderRadius: "{content.border.radius}", + gap: "{navigation.item.gap}", + icon: { + color: "{navigation.item.icon.color}", + hoverColor: "{navigation.item.icon.focus.color}" + }, + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + separator: { + color: "{navigation.item.icon.color}" + } +}; +var index$1k = { + root: { + borderRadius: "{form.field.border.radius}", + roundedBorderRadius: "2rem", + gap: "0.5rem", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + iconOnlyWidth: "2.5rem", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + }, + label: { + fontWeight: "500" + }, + raisedShadow: "0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12)", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + offset: "{focus.ring.offset}" + }, + badgeSize: "1rem", + transitionDuration: "{form.field.transition.duration}" + }, + colorScheme: { + light: { + root: { + primary: { + background: "{primary.color}", + hoverBackground: "{primary.hover.color}", + activeBackground: "{primary.active.color}", + borderColor: "{primary.color}", + hoverBorderColor: "{primary.hover.color}", + activeBorderColor: "{primary.active.color}", + color: "{primary.contrast.color}", + hoverColor: "{primary.contrast.color}", + activeColor: "{primary.contrast.color}", + focusRing: { + color: "{primary.color}", + shadow: "none" + } + }, + secondary: { + background: "{surface.100}", + hoverBackground: "{surface.200}", + activeBackground: "{surface.300}", + borderColor: "{surface.100}", + hoverBorderColor: "{surface.200}", + activeBorderColor: "{surface.300}", + color: "{surface.600}", + hoverColor: "{surface.700}", + activeColor: "{surface.800}", + focusRing: { + color: "{surface.600}", + shadow: "none" + } + }, + info: { + background: "{sky.500}", + hoverBackground: "{sky.600}", + activeBackground: "{sky.700}", + borderColor: "{sky.500}", + hoverBorderColor: "{sky.600}", + activeBorderColor: "{sky.700}", + color: "#ffffff", + hoverColor: "#ffffff", + activeColor: "#ffffff", + focusRing: { + color: "{sky.500}", + shadow: "none" + } + }, + success: { + background: "{green.500}", + hoverBackground: "{green.600}", + activeBackground: "{green.700}", + borderColor: "{green.500}", + hoverBorderColor: "{green.600}", + activeBorderColor: "{green.700}", + color: "#ffffff", + hoverColor: "#ffffff", + activeColor: "#ffffff", + focusRing: { + color: "{green.500}", + shadow: "none" + } + }, + warn: { + background: "{orange.500}", + hoverBackground: "{orange.600}", + activeBackground: "{orange.700}", + borderColor: "{orange.500}", + hoverBorderColor: "{orange.600}", + activeBorderColor: "{orange.700}", + color: "#ffffff", + hoverColor: "#ffffff", + activeColor: "#ffffff", + focusRing: { + color: "{orange.500}", + shadow: "none" + } + }, + help: { + background: "{purple.500}", + hoverBackground: "{purple.600}", + activeBackground: "{purple.700}", + borderColor: "{purple.500}", + hoverBorderColor: "{purple.600}", + activeBorderColor: "{purple.700}", + color: "#ffffff", + hoverColor: "#ffffff", + activeColor: "#ffffff", + focusRing: { + color: "{purple.500}", + shadow: "none" + } + }, + danger: { + background: "{red.500}", + hoverBackground: "{red.600}", + activeBackground: "{red.700}", + borderColor: "{red.500}", + hoverBorderColor: "{red.600}", + activeBorderColor: "{red.700}", + color: "#ffffff", + hoverColor: "#ffffff", + activeColor: "#ffffff", + focusRing: { + color: "{red.500}", + shadow: "none" + } + }, + contrast: { + background: "{surface.950}", + hoverBackground: "{surface.900}", + activeBackground: "{surface.800}", + borderColor: "{surface.950}", + hoverBorderColor: "{surface.900}", + activeBorderColor: "{surface.800}", + color: "{surface.0}", + hoverColor: "{surface.0}", + activeColor: "{surface.0}", + focusRing: { + color: "{surface.950}", + shadow: "none" + } + } + }, + outlined: { + primary: { + hoverBackground: "{primary.50}", + activeBackground: "{primary.100}", + borderColor: "{primary.200}", + color: "{primary.color}" + }, + secondary: { + hoverBackground: "{surface.50}", + activeBackground: "{surface.100}", + borderColor: "{surface.200}", + color: "{surface.500}" + }, + success: { + hoverBackground: "{green.50}", + activeBackground: "{green.100}", + borderColor: "{green.200}", + color: "{green.500}" + }, + info: { + hoverBackground: "{sky.50}", + activeBackground: "{sky.100}", + borderColor: "{sky.200}", + color: "{sky.500}" + }, + warn: { + hoverBackground: "{orange.50}", + activeBackground: "{orange.100}", + borderColor: "{orange.200}", + color: "{orange.500}" + }, + help: { + hoverBackground: "{purple.50}", + activeBackground: "{purple.100}", + borderColor: "{purple.200}", + color: "{purple.500}" + }, + danger: { + hoverBackground: "{red.50}", + activeBackground: "{red.100}", + borderColor: "{red.200}", + color: "{red.500}" + }, + contrast: { + hoverBackground: "{surface.50}", + activeBackground: "{surface.100}", + borderColor: "{surface.700}", + color: "{surface.950}" + }, + plain: { + hoverBackground: "{surface.50}", + activeBackground: "{surface.100}", + borderColor: "{surface.200}", + color: "{surface.700}" + } + }, + text: { + primary: { + hoverBackground: "{primary.50}", + activeBackground: "{primary.100}", + color: "{primary.color}" + }, + secondary: { + hoverBackground: "{surface.50}", + activeBackground: "{surface.100}", + color: "{surface.500}" + }, + success: { + hoverBackground: "{green.50}", + activeBackground: "{green.100}", + color: "{green.500}" + }, + info: { + hoverBackground: "{sky.50}", + activeBackground: "{sky.100}", + color: "{sky.500}" + }, + warn: { + hoverBackground: "{orange.50}", + activeBackground: "{orange.100}", + color: "{orange.500}" + }, + help: { + hoverBackground: "{purple.50}", + activeBackground: "{purple.100}", + color: "{purple.500}" + }, + danger: { + hoverBackground: "{red.50}", + activeBackground: "{red.100}", + color: "{red.500}" + }, + contrast: { + hoverBackground: "{surface.50}", + activeBackground: "{surface.100}", + color: "{surface.950}" + }, + plain: { + hoverBackground: "{surface.50}", + activeBackground: "{surface.100}", + color: "{surface.700}" + } + }, + link: { + color: "{primary.color}", + hoverColor: "{primary.color}", + activeColor: "{primary.color}" + } + }, + dark: { + root: { + primary: { + background: "{primary.color}", + hoverBackground: "{primary.hover.color}", + activeBackground: "{primary.active.color}", + borderColor: "{primary.color}", + hoverBorderColor: "{primary.hover.color}", + activeBorderColor: "{primary.active.color}", + color: "{primary.contrast.color}", + hoverColor: "{primary.contrast.color}", + activeColor: "{primary.contrast.color}", + focusRing: { + color: "{primary.color}", + shadow: "none" + } + }, + secondary: { + background: "{surface.800}", + hoverBackground: "{surface.700}", + activeBackground: "{surface.600}", + borderColor: "{surface.800}", + hoverBorderColor: "{surface.700}", + activeBorderColor: "{surface.600}", + color: "{surface.300}", + hoverColor: "{surface.200}", + activeColor: "{surface.100}", + focusRing: { + color: "{surface.300}", + shadow: "none" + } + }, + info: { + background: "{sky.400}", + hoverBackground: "{sky.300}", + activeBackground: "{sky.200}", + borderColor: "{sky.400}", + hoverBorderColor: "{sky.300}", + activeBorderColor: "{sky.200}", + color: "{sky.950}", + hoverColor: "{sky.950}", + activeColor: "{sky.950}", + focusRing: { + color: "{sky.400}", + shadow: "none" + } + }, + success: { + background: "{green.400}", + hoverBackground: "{green.300}", + activeBackground: "{green.200}", + borderColor: "{green.400}", + hoverBorderColor: "{green.300}", + activeBorderColor: "{green.200}", + color: "{green.950}", + hoverColor: "{green.950}", + activeColor: "{green.950}", + focusRing: { + color: "{green.400}", + shadow: "none" + } + }, + warn: { + background: "{orange.400}", + hoverBackground: "{orange.300}", + activeBackground: "{orange.200}", + borderColor: "{orange.400}", + hoverBorderColor: "{orange.300}", + activeBorderColor: "{orange.200}", + color: "{orange.950}", + hoverColor: "{orange.950}", + activeColor: "{orange.950}", + focusRing: { + color: "{orange.400}", + shadow: "none" + } + }, + help: { + background: "{purple.400}", + hoverBackground: "{purple.300}", + activeBackground: "{purple.200}", + borderColor: "{purple.400}", + hoverBorderColor: "{purple.300}", + activeBorderColor: "{purple.200}", + color: "{purple.950}", + hoverColor: "{purple.950}", + activeColor: "{purple.950}", + focusRing: { + color: "{purple.400}", + shadow: "none" + } + }, + danger: { + background: "{red.400}", + hoverBackground: "{red.300}", + activeBackground: "{red.200}", + borderColor: "{red.400}", + hoverBorderColor: "{red.300}", + activeBorderColor: "{red.200}", + color: "{red.950}", + hoverColor: "{red.950}", + activeColor: "{red.950}", + focusRing: { + color: "{red.400}", + shadow: "none" + } + }, + contrast: { + background: "{surface.0}", + hoverBackground: "{surface.100}", + activeBackground: "{surface.200}", + borderColor: "{surface.0}", + hoverBorderColor: "{surface.100}", + activeBorderColor: "{surface.200}", + color: "{surface.950}", + hoverColor: "{surface.950}", + activeColor: "{surface.950}", + focusRing: { + color: "{surface.0}", + shadow: "none" + } + } + }, + outlined: { + primary: { + hoverBackground: "color-mix(in srgb, {primary.color}, transparent 96%)", + activeBackground: "color-mix(in srgb, {primary.color}, transparent 84%)", + borderColor: "{primary.700}", + color: "{primary.color}" + }, + secondary: { + hoverBackground: "rgba(255,255,255,0.04)", + activeBackground: "rgba(255,255,255,0.16)", + borderColor: "{surface.700}", + color: "{surface.400}" + }, + success: { + hoverBackground: "color-mix(in srgb, {green.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {green.400}, transparent 84%)", + borderColor: "{green.700}", + color: "{green.400}" + }, + info: { + hoverBackground: "color-mix(in srgb, {sky.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {sky.400}, transparent 84%)", + borderColor: "{sky.700}", + color: "{sky.400}" + }, + warn: { + hoverBackground: "color-mix(in srgb, {orange.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {orange.400}, transparent 84%)", + borderColor: "{orange.700}", + color: "{orange.400}" + }, + help: { + hoverBackground: "color-mix(in srgb, {purple.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {purple.400}, transparent 84%)", + borderColor: "{purple.700}", + color: "{purple.400}" + }, + danger: { + hoverBackground: "color-mix(in srgb, {red.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {red.400}, transparent 84%)", + borderColor: "{red.700}", + color: "{red.400}" + }, + contrast: { + hoverBackground: "{surface.800}", + activeBackground: "{surface.700}", + borderColor: "{surface.500}", + color: "{surface.0}" + }, + plain: { + hoverBackground: "{surface.800}", + activeBackground: "{surface.700}", + borderColor: "{surface.600}", + color: "{surface.0}" + } + }, + text: { + primary: { + hoverBackground: "color-mix(in srgb, {primary.color}, transparent 96%)", + activeBackground: "color-mix(in srgb, {primary.color}, transparent 84%)", + color: "{primary.color}" + }, + secondary: { + hoverBackground: "{surface.800}", + activeBackground: "{surface.700}", + color: "{surface.400}" + }, + success: { + hoverBackground: "color-mix(in srgb, {green.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {green.400}, transparent 84%)", + color: "{green.400}" + }, + info: { + hoverBackground: "color-mix(in srgb, {sky.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {sky.400}, transparent 84%)", + color: "{sky.400}" + }, + warn: { + hoverBackground: "color-mix(in srgb, {orange.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {orange.400}, transparent 84%)", + color: "{orange.400}" + }, + help: { + hoverBackground: "color-mix(in srgb, {purple.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {purple.400}, transparent 84%)", + color: "{purple.400}" + }, + danger: { + hoverBackground: "color-mix(in srgb, {red.400}, transparent 96%)", + activeBackground: "color-mix(in srgb, {red.400}, transparent 84%)", + color: "{red.400}" + }, + contrast: { + hoverBackground: "{surface.800}", + activeBackground: "{surface.700}", + color: "{surface.0}" + }, + plain: { + hoverBackground: "{surface.800}", + activeBackground: "{surface.700}", + color: "{surface.0}" + } + }, + link: { + color: "{primary.color}", + hoverColor: "{primary.color}", + activeColor: "{primary.color}" + } + } + } +}; +var index$1j = { + root: { + background: "{content.background}", + borderRadius: "{border.radius.xl}", + color: "{content.color}", + shadow: "0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)" + }, + body: { + padding: "1.25rem", + gap: "0.5rem" + }, + caption: { + gap: "0.5rem" + }, + title: { + fontSize: "1.25rem", + fontWeight: "500" + }, + subtitle: { + color: "{text.muted.color}" + } +}; +var index$1i = { + root: { + transitionDuration: "{transition.duration}" + }, + content: { + gap: "0.25rem" + }, + indicatorList: { + padding: "1rem", + gap: "0.5rem" + }, + indicator: { + width: "2rem", + height: "0.5rem", + borderRadius: "{content.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + colorScheme: { + light: { + indicator: { + background: "{surface.200}", + hoverBackground: "{surface.300}", + activeBackground: "{primary.color}" + } + }, + dark: { + indicator: { + background: "{surface.700}", + hoverBackground: "{surface.600}", + activeBackground: "{primary.color}" + } + } + } +}; +var index$1h = { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + } + }, + dropdown: { + width: "2.5rem", + color: "{form.field.icon.color}" + }, + overlay: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}" + }, + list: { + padding: "{list.padding}", + gap: "{list.gap}", + mobileIndent: "1rem" + }, + option: { + focusBackground: "{list.option.focus.background}", + selectedBackground: "{list.option.selected.background}", + selectedFocusBackground: "{list.option.selected.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + selectedColor: "{list.option.selected.color}", + selectedFocusColor: "{list.option.selected.focus.color}", + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}", + icon: { + color: "{list.option.icon.color}", + focusColor: "{list.option.icon.focus.color}", + size: "0.875rem" + } + }, + clearIcon: { + color: "{form.field.icon.color}" + } +}; +var index$1g = { + root: { + borderRadius: "{border.radius.sm}", + width: "1.25rem", + height: "1.25rem", + background: "{form.field.background}", + checkedBackground: "{primary.color}", + checkedHoverBackground: "{primary.hover.color}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.border.color}", + checkedBorderColor: "{primary.color}", + checkedHoverBorderColor: "{primary.hover.color}", + checkedFocusBorderColor: "{primary.color}", + checkedDisabledBorderColor: "{form.field.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + shadow: "{form.field.shadow}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + width: "1rem", + height: "1rem" + }, + lg: { + width: "1.5rem", + height: "1.5rem" + } + }, + icon: { + size: "0.875rem", + color: "{form.field.color}", + checkedColor: "{primary.contrast.color}", + checkedHoverColor: "{primary.contrast.color}", + disabledColor: "{form.field.disabled.color}", + sm: { + size: "0.75rem" + }, + lg: { + size: "1rem" + } + } +}; +var index$1f = { + root: { + borderRadius: "16px", + paddingX: "0.75rem", + paddingY: "0.5rem", + gap: "0.5rem", + transitionDuration: "{transition.duration}" + }, + image: { + width: "2rem", + height: "2rem" + }, + icon: { + size: "1rem" + }, + removeIcon: { + size: "1rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + } + }, + colorScheme: { + light: { + root: { + background: "{surface.100}", + color: "{surface.800}" + }, + icon: { + color: "{surface.800}" + }, + removeIcon: { + color: "{surface.800}" + } + }, + dark: { + root: { + background: "{surface.800}", + color: "{surface.0}" + }, + icon: { + color: "{surface.0}" + }, + removeIcon: { + color: "{surface.0}" + } + } + } +}; +var index$1e = { + root: { + transitionDuration: "{transition.duration}" + }, + preview: { + width: "1.5rem", + height: "1.5rem", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + panel: { + shadow: "{overlay.popover.shadow}", + borderRadius: "{overlay.popover.borderRadius}" + }, + colorScheme: { + light: { + panel: { + background: "{surface.800}", + borderColor: "{surface.900}" + }, + handle: { + color: "{surface.0}" + } + }, + dark: { + panel: { + background: "{surface.900}", + borderColor: "{surface.700}" + }, + handle: { + color: "{surface.0}" + } + } + } +}; +var index$1d = { + icon: { + size: "2rem", + color: "{overlay.modal.color}" + }, + content: { + gap: "1rem" + } +}; +var index$1c = { + root: { + background: "{overlay.popover.background}", + borderColor: "{overlay.popover.border.color}", + color: "{overlay.popover.color}", + borderRadius: "{overlay.popover.border.radius}", + shadow: "{overlay.popover.shadow}", + gutter: "10px", + arrowOffset: "1.25rem" + }, + content: { + padding: "{overlay.popover.padding}", + gap: "1rem" + }, + icon: { + size: "1.5rem", + color: "{overlay.popover.color}" + }, + footer: { + gap: "0.5rem", + padding: "0 {overlay.popover.padding} {overlay.popover.padding} {overlay.popover.padding}" + } +}; +var index$1b = { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}", + shadow: "{overlay.navigation.shadow}", + transitionDuration: "{transition.duration}" + }, + list: { + padding: "{navigation.list.padding}", + gap: "{navigation.list.gap}" + }, + item: { + focusBackground: "{navigation.item.focus.background}", + activeBackground: "{navigation.item.active.background}", + color: "{navigation.item.color}", + focusColor: "{navigation.item.focus.color}", + activeColor: "{navigation.item.active.color}", + padding: "{navigation.item.padding}", + borderRadius: "{navigation.item.border.radius}", + gap: "{navigation.item.gap}", + icon: { + color: "{navigation.item.icon.color}", + focusColor: "{navigation.item.icon.focus.color}", + activeColor: "{navigation.item.icon.active.color}" + } + }, + submenu: { + mobileIndent: "1rem" + }, + submenuIcon: { + size: "{navigation.submenu.icon.size}", + color: "{navigation.submenu.icon.color}", + focusColor: "{navigation.submenu.icon.focus.color}", + activeColor: "{navigation.submenu.icon.active.color}" + }, + separator: { + borderColor: "{content.border.color}" + } +}; +var index$1a = { + root: { + transitionDuration: "{transition.duration}" + }, + header: { + background: "{content.background}", + borderColor: "{datatable.border.color}", + color: "{content.color}", + borderWidth: "0 0 1px 0", + padding: "0.75rem 1rem" + }, + headerCell: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + borderColor: "{datatable.border.color}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + selectedColor: "{highlight.color}", + gap: "0.5rem", + padding: "0.75rem 1rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + } + }, + columnTitle: { + fontWeight: "600" + }, + row: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + selectedColor: "{highlight.color}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + } + }, + bodyCell: { + borderColor: "{datatable.border.color}", + padding: "0.75rem 1rem" + }, + footerCell: { + background: "{content.background}", + borderColor: "{datatable.border.color}", + color: "{content.color}", + padding: "0.75rem 1rem" + }, + columnFooter: { + fontWeight: "600" + }, + footer: { + background: "{content.background}", + borderColor: "{datatable.border.color}", + color: "{content.color}", + borderWidth: "0 0 1px 0", + padding: "0.75rem 1rem" + }, + dropPoint: { + color: "{primary.color}" + }, + columnResizerWidth: "0.5rem", + resizeIndicator: { + width: "1px", + color: "{primary.color}" + }, + sortIcon: { + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + size: "0.875rem" + }, + loadingIcon: { + size: "2rem" + }, + rowToggleButton: { + hoverBackground: "{content.hover.background}", + selectedHoverBackground: "{content.background}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + selectedHoverColor: "{primary.color}", + size: "1.75rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + filter: { + inlineGap: "0.5rem", + overlaySelect: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}" + }, + overlayPopover: { + background: "{overlay.popover.background}", + borderColor: "{overlay.popover.border.color}", + borderRadius: "{overlay.popover.border.radius}", + color: "{overlay.popover.color}", + shadow: "{overlay.popover.shadow}", + padding: "{overlay.popover.padding}", + gap: "0.5rem" + }, + rule: { + borderColor: "{content.border.color}" + }, + constraintList: { + padding: "{list.padding}", + gap: "{list.gap}" + }, + constraint: { + focusBackground: "{list.option.focus.background}", + selectedBackground: "{list.option.selected.background}", + selectedFocusBackground: "{list.option.selected.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + selectedColor: "{list.option.selected.color}", + selectedFocusColor: "{list.option.selected.focus.color}", + separator: { + borderColor: "{content.border.color}" + }, + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}" + } + }, + paginatorTop: { + borderColor: "{datatable.border.color}", + borderWidth: "0 0 1px 0" + }, + paginatorBottom: { + borderColor: "{datatable.border.color}", + borderWidth: "0 0 1px 0" + }, + colorScheme: { + light: { + root: { + borderColor: "{content.border.color}" + }, + row: { + stripedBackground: "{surface.50}" + }, + bodyCell: { + selectedBorderColor: "{primary.100}" + } + }, + dark: { + root: { + borderColor: "{surface.800}" + }, + row: { + stripedBackground: "{surface.950}" + }, + bodyCell: { + selectedBorderColor: "{primary.900}" + } + } + } +}; +var index$19 = { + root: { + borderColor: "transparent", + borderWidth: "0", + borderRadius: "0", + padding: "0" + }, + header: { + background: "{content.background}", + color: "{content.color}", + borderColor: "{content.border.color}", + borderWidth: "0 0 1px 0", + padding: "0.75rem 1rem", + borderRadius: "0" + }, + content: { + background: "{content.background}", + color: "{content.color}", + borderColor: "transparent", + borderWidth: "0", + padding: "0", + borderRadius: "0" + }, + footer: { + background: "{content.background}", + color: "{content.color}", + borderColor: "{content.border.color}", + borderWidth: "1px 0 0 0", + padding: "0.75rem 1rem", + borderRadius: "0" + }, + paginatorTop: { + borderColor: "{content.border.color}", + borderWidth: "0 0 1px 0" + }, + paginatorBottom: { + borderColor: "{content.border.color}", + borderWidth: "1px 0 0 0" + } +}; +var index$18 = { + root: { + transitionDuration: "{transition.duration}" + }, + panel: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}", + shadow: "{overlay.popover.shadow}", + padding: "{overlay.popover.padding}" + }, + header: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + padding: "0 0 0.5rem 0" + }, + title: { + gap: "0.5rem", + fontWeight: "500" + }, + dropdown: { + width: "2.5rem", + sm: { + width: "2rem" + }, + lg: { + width: "3rem" + }, + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.border.color}", + activeBorderColor: "{form.field.border.color}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + inputIcon: { + color: "{form.field.icon.color}" + }, + selectMonth: { + hoverBackground: "{content.hover.background}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + padding: "0.25rem 0.5rem", + borderRadius: "{content.border.radius}" + }, + selectYear: { + hoverBackground: "{content.hover.background}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + padding: "0.25rem 0.5rem", + borderRadius: "{content.border.radius}" + }, + group: { + borderColor: "{content.border.color}", + gap: "{overlay.popover.padding}" + }, + dayView: { + margin: "0.5rem 0 0 0" + }, + weekDay: { + padding: "0.25rem", + fontWeight: "500", + color: "{content.color}" + }, + date: { + hoverBackground: "{content.hover.background}", + selectedBackground: "{primary.color}", + rangeSelectedBackground: "{highlight.background}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + selectedColor: "{primary.contrast.color}", + rangeSelectedColor: "{highlight.color}", + width: "2rem", + height: "2rem", + borderRadius: "50%", + padding: "0.25rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + monthView: { + margin: "0.5rem 0 0 0" + }, + month: { + padding: "0.375rem", + borderRadius: "{content.border.radius}" + }, + yearView: { + margin: "0.5rem 0 0 0" + }, + year: { + padding: "0.375rem", + borderRadius: "{content.border.radius}" + }, + buttonbar: { + padding: "0.5rem 0 0 0", + borderColor: "{content.border.color}" + }, + timePicker: { + padding: "0.5rem 0 0 0", + borderColor: "{content.border.color}", + gap: "0.5rem", + buttonGap: "0.25rem" + }, + colorScheme: { + light: { + dropdown: { + background: "{surface.100}", + hoverBackground: "{surface.200}", + activeBackground: "{surface.300}", + color: "{surface.600}", + hoverColor: "{surface.700}", + activeColor: "{surface.800}" + }, + today: { + background: "{surface.200}", + color: "{surface.900}" + } + }, + dark: { + dropdown: { + background: "{surface.800}", + hoverBackground: "{surface.700}", + activeBackground: "{surface.600}", + color: "{surface.300}", + hoverColor: "{surface.200}", + activeColor: "{surface.100}" + }, + today: { + background: "{surface.700}", + color: "{surface.0}" + } + } + } +}; +var index$17 = { + root: { + background: "{overlay.modal.background}", + borderColor: "{overlay.modal.border.color}", + color: "{overlay.modal.color}", + borderRadius: "{overlay.modal.border.radius}", + shadow: "{overlay.modal.shadow}" + }, + header: { + padding: "{overlay.modal.padding}", + gap: "0.5rem" + }, + title: { + fontSize: "1.25rem", + fontWeight: "600" + }, + content: { + padding: "0 {overlay.modal.padding} {overlay.modal.padding} {overlay.modal.padding}" + }, + footer: { + padding: "0 {overlay.modal.padding} {overlay.modal.padding} {overlay.modal.padding}", + gap: "0.5rem" + } +}; +var index$16 = { + root: { + borderColor: "{content.border.color}" + }, + content: { + background: "{content.background}", + color: "{text.color}" + }, + horizontal: { + margin: "1rem 0", + padding: "0 1rem", + content: { + padding: "0 0.5rem" + } + }, + vertical: { + margin: "0 1rem", + padding: "0.5rem 0", + content: { + padding: "0.5rem 0" + } + } +}; +var index$15 = { + root: { + background: "rgba(255, 255, 255, 0.1)", + borderColor: "rgba(255, 255, 255, 0.2)", + padding: "0.5rem", + borderRadius: "{border.radius.xl}" + }, + item: { + borderRadius: "{content.border.radius}", + padding: "0.5rem", + size: "3rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + } +}; +var index$14 = { + root: { + background: "{overlay.modal.background}", + borderColor: "{overlay.modal.border.color}", + color: "{overlay.modal.color}", + shadow: "{overlay.modal.shadow}" + }, + header: { + padding: "{overlay.modal.padding}" + }, + title: { + fontSize: "1.5rem", + fontWeight: "600" + }, + content: { + padding: "0 {overlay.modal.padding} {overlay.modal.padding} {overlay.modal.padding}" + }, + footer: { + padding: "{overlay.modal.padding}" + } +}; +var index$13 = { + toolbar: { + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}" + }, + toolbarItem: { + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{primary.color}" + }, + overlay: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}", + padding: "{list.padding}" + }, + overlayOption: { + focusBackground: "{list.option.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}" + }, + content: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}" + } +}; +var index$12 = { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + color: "{content.color}", + padding: "0 1.125rem 1.125rem 1.125rem", + transitionDuration: "{transition.duration}" + }, + legend: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + borderRadius: "{content.border.radius}", + borderWidth: "1px", + borderColor: "transparent", + padding: "0.5rem 0.75rem", + gap: "0.5rem", + fontWeight: "600", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + toggleIcon: { + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}" + }, + content: { + padding: "0" + } +}; +var index$11 = { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}", + transitionDuration: "{transition.duration}" + }, + header: { + background: "transparent", + color: "{text.color}", + padding: "1.125rem", + borderColor: "unset", + borderWidth: "0", + borderRadius: "0", + gap: "0.5rem" + }, + content: { + highlightBorderColor: "{primary.color}", + padding: "0 1.125rem 1.125rem 1.125rem", + gap: "1rem" + }, + file: { + padding: "1rem", + gap: "1rem", + borderColor: "{content.border.color}", + info: { + gap: "0.5rem" + } + }, + fileList: { + gap: "0.5rem" + }, + progressbar: { + height: "0.25rem" + }, + basic: { + gap: "0.5rem" + } +}; +var index$10 = { + root: { + color: "{form.field.float.label.color}", + focusColor: "{form.field.float.label.focus.color}", + activeColor: "{form.field.float.label.active.color}", + invalidColor: "{form.field.float.label.invalid.color}", + transitionDuration: "0.2s", + positionX: "{form.field.padding.x}", + positionY: "{form.field.padding.y}", + fontWeight: "500", + active: { + fontSize: "0.75rem", + fontWeight: "400" + } + }, + over: { + active: { + top: "-1.25rem" + } + }, + "in": { + input: { + paddingTop: "1.5rem", + paddingBottom: "{form.field.padding.y}" + }, + active: { + top: "{form.field.padding.y}" + } + }, + on: { + borderRadius: "{border.radius.xs}", + active: { + background: "{form.field.background}", + padding: "0 0.125rem" + } + } +}; +var index$$ = { + root: { + borderWidth: "1px", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + transitionDuration: "{transition.duration}" + }, + navButton: { + background: "rgba(255, 255, 255, 0.1)", + hoverBackground: "rgba(255, 255, 255, 0.2)", + color: "{surface.100}", + hoverColor: "{surface.0}", + size: "3rem", + gutter: "0.5rem", + prev: { + borderRadius: "50%" + }, + next: { + borderRadius: "50%" + }, + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + navIcon: { + size: "1.5rem" + }, + thumbnailsContent: { + background: "{content.background}", + padding: "1rem 0.25rem" + }, + thumbnailNavButton: { + size: "2rem", + borderRadius: "{content.border.radius}", + gutter: "0.5rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + thumbnailNavButtonIcon: { + size: "1rem" + }, + caption: { + background: "rgba(0, 0, 0, 0.5)", + color: "{surface.100}", + padding: "1rem" + }, + indicatorList: { + gap: "0.5rem", + padding: "1rem" + }, + indicatorButton: { + width: "1rem", + height: "1rem", + activeBackground: "{primary.color}", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + insetIndicatorList: { + background: "rgba(0, 0, 0, 0.5)" + }, + insetIndicatorButton: { + background: "rgba(255, 255, 255, 0.4)", + hoverBackground: "rgba(255, 255, 255, 0.6)", + activeBackground: "rgba(255, 255, 255, 0.9)" + }, + closeButton: { + size: "3rem", + gutter: "0.5rem", + background: "rgba(255, 255, 255, 0.1)", + hoverBackground: "rgba(255, 255, 255, 0.2)", + color: "{surface.50}", + hoverColor: "{surface.0}", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + closeButtonIcon: { + size: "1.5rem" + }, + colorScheme: { + light: { + thumbnailNavButton: { + hoverBackground: "{surface.100}", + color: "{surface.600}", + hoverColor: "{surface.700}" + }, + indicatorButton: { + background: "{surface.200}", + hoverBackground: "{surface.300}" + } + }, + dark: { + thumbnailNavButton: { + hoverBackground: "{surface.700}", + color: "{surface.400}", + hoverColor: "{surface.0}" + }, + indicatorButton: { + background: "{surface.700}", + hoverBackground: "{surface.600}" + } + } + } +}; +var index$_ = { + icon: { + color: "{form.field.icon.color}" + } +}; +var index$Z = { + root: { + color: "{form.field.float.label.color}", + focusColor: "{form.field.float.label.focus.color}", + invalidColor: "{form.field.float.label.invalid.color}", + transitionDuration: "0.2s", + positionX: "{form.field.padding.x}", + top: "{form.field.padding.y}", + fontSize: "0.75rem", + fontWeight: "400" + }, + input: { + paddingTop: "1.5rem", + paddingBottom: "{form.field.padding.y}" + } +}; +var index$Y = { + root: { + transitionDuration: "{transition.duration}" + }, + preview: { + icon: { + size: "1.5rem" + }, + mask: { + background: "{mask.background}", + color: "{mask.color}" + } + }, + toolbar: { + position: { + left: "auto", + right: "1rem", + top: "1rem", + bottom: "auto" + }, + blur: "8px", + background: "rgba(255,255,255,0.1)", + borderColor: "rgba(255,255,255,0.2)", + borderWidth: "1px", + borderRadius: "30px", + padding: ".5rem", + gap: "0.5rem" + }, + action: { + hoverBackground: "rgba(255,255,255,0.1)", + color: "{surface.50}", + hoverColor: "{surface.0}", + size: "3rem", + iconSize: "1.5rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + } +}; +var index$X = { + handle: { + size: "15px", + hoverSize: "30px", + background: "rgba(255,255,255,0.3)", + hoverBackground: "rgba(255,255,255,0.3)", + borderColor: "unset", + hoverBorderColor: "unset", + borderWidth: "0", + borderRadius: "50%", + transitionDuration: "{transition.duration}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "rgba(255,255,255,0.3)", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + } +}; +var index$W = { + root: { + padding: "{form.field.padding.y} {form.field.padding.x}", + borderRadius: "{content.border.radius}", + gap: "0.5rem" + }, + text: { + fontWeight: "500" + }, + icon: { + size: "1rem" + }, + colorScheme: { + light: { + info: { + background: "color-mix(in srgb, {blue.50}, transparent 5%)", + borderColor: "{blue.200}", + color: "{blue.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {blue.500}, transparent 96%)" + }, + success: { + background: "color-mix(in srgb, {green.50}, transparent 5%)", + borderColor: "{green.200}", + color: "{green.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {green.500}, transparent 96%)" + }, + warn: { + background: "color-mix(in srgb,{yellow.50}, transparent 5%)", + borderColor: "{yellow.200}", + color: "{yellow.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {yellow.500}, transparent 96%)" + }, + error: { + background: "color-mix(in srgb, {red.50}, transparent 5%)", + borderColor: "{red.200}", + color: "{red.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {red.500}, transparent 96%)" + }, + secondary: { + background: "{surface.100}", + borderColor: "{surface.200}", + color: "{surface.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.500}, transparent 96%)" + }, + contrast: { + background: "{surface.900}", + borderColor: "{surface.950}", + color: "{surface.50}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.950}, transparent 96%)" + } + }, + dark: { + info: { + background: "color-mix(in srgb, {blue.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {blue.700}, transparent 64%)", + color: "{blue.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {blue.500}, transparent 96%)" + }, + success: { + background: "color-mix(in srgb, {green.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {green.700}, transparent 64%)", + color: "{green.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {green.500}, transparent 96%)" + }, + warn: { + background: "color-mix(in srgb, {yellow.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {yellow.700}, transparent 64%)", + color: "{yellow.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {yellow.500}, transparent 96%)" + }, + error: { + background: "color-mix(in srgb, {red.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {red.700}, transparent 64%)", + color: "{red.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {red.500}, transparent 96%)" + }, + secondary: { + background: "{surface.800}", + borderColor: "{surface.700}", + color: "{surface.300}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.500}, transparent 96%)" + }, + contrast: { + background: "{surface.0}", + borderColor: "{surface.100}", + color: "{surface.950}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.950}, transparent 96%)" + } + } + } +}; +var index$V = { + root: { + padding: "{form.field.padding.y} {form.field.padding.x}", + borderRadius: "{content.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + transitionDuration: "{transition.duration}" + }, + display: { + hoverBackground: "{content.hover.background}", + hoverColor: "{content.hover.color}" + } +}; +var index$U = { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}" + }, + chip: { + borderRadius: "{border.radius.sm}" + }, + colorScheme: { + light: { + chip: { + focusBackground: "{surface.200}", + color: "{surface.800}" + } + }, + dark: { + chip: { + focusBackground: "{surface.700}", + color: "{surface.0}" + } + } + } +}; +var index$T = { + addon: { + background: "{form.field.background}", + borderColor: "{form.field.border.color}", + color: "{form.field.icon.color}", + borderRadius: "{form.field.border.radius}", + padding: "0.5rem", + minWidth: "2.5rem" + } +}; +var index$S = { + root: { + transitionDuration: "{transition.duration}" + }, + button: { + width: "2.5rem", + borderRadius: "{form.field.border.radius}", + verticalPadding: "{form.field.padding.y}" + }, + colorScheme: { + light: { + button: { + background: "transparent", + hoverBackground: "{surface.100}", + activeBackground: "{surface.200}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.border.color}", + activeBorderColor: "{form.field.border.color}", + color: "{surface.400}", + hoverColor: "{surface.500}", + activeColor: "{surface.600}" + } + }, + dark: { + button: { + background: "transparent", + hoverBackground: "{surface.800}", + activeBackground: "{surface.700}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.border.color}", + activeBorderColor: "{form.field.border.color}", + color: "{surface.400}", + hoverColor: "{surface.300}", + activeColor: "{surface.200}" + } + } + } +}; +var index$R = { + root: { + gap: "0.5rem" + }, + input: { + width: "2.5rem", + sm: { + width: "2rem" + }, + lg: { + width: "3rem" + } + } +}; +var index$Q = { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + } + } +}; +var index$P = { + root: { + transitionDuration: "{transition.duration}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + value: { + background: "{primary.color}" + }, + range: { + background: "{content.border.color}" + }, + text: { + color: "{text.muted.color}" + } +}; +var index$O = { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + borderColor: "{form.field.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + shadow: "{form.field.shadow}", + borderRadius: "{form.field.border.radius}", + transitionDuration: "{form.field.transition.duration}" + }, + list: { + padding: "{list.padding}", + gap: "{list.gap}", + header: { + padding: "{list.header.padding}" + } + }, + option: { + focusBackground: "{list.option.focus.background}", + selectedBackground: "{list.option.selected.background}", + selectedFocusBackground: "{list.option.selected.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + selectedColor: "{list.option.selected.color}", + selectedFocusColor: "{list.option.selected.focus.color}", + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}" + }, + optionGroup: { + background: "{list.option.group.background}", + color: "{list.option.group.color}", + fontWeight: "{list.option.group.font.weight}", + padding: "{list.option.group.padding}" + }, + checkmark: { + color: "{list.option.color}", + gutterStart: "-0.375rem", + gutterEnd: "0.375rem" + }, + emptyMessage: { + padding: "{list.option.padding}" + }, + colorScheme: { + light: { + option: { + stripedBackground: "{surface.50}" + } + }, + dark: { + option: { + stripedBackground: "{surface.900}" + } + } + } +}; +var index$N = { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + color: "{content.color}", + gap: "0.5rem", + verticalOrientation: { + padding: "{navigation.list.padding}", + gap: "{navigation.list.gap}" + }, + horizontalOrientation: { + padding: "0.5rem 0.75rem", + gap: "0.5rem" + }, + transitionDuration: "{transition.duration}" + }, + baseItem: { + borderRadius: "{content.border.radius}", + padding: "{navigation.item.padding}" + }, + item: { + focusBackground: "{navigation.item.focus.background}", + activeBackground: "{navigation.item.active.background}", + color: "{navigation.item.color}", + focusColor: "{navigation.item.focus.color}", + activeColor: "{navigation.item.active.color}", + padding: "{navigation.item.padding}", + borderRadius: "{navigation.item.border.radius}", + gap: "{navigation.item.gap}", + icon: { + color: "{navigation.item.icon.color}", + focusColor: "{navigation.item.icon.focus.color}", + activeColor: "{navigation.item.icon.active.color}" + } + }, + overlay: { + padding: "0", + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + color: "{content.color}", + shadow: "{overlay.navigation.shadow}", + gap: "0.5rem" + }, + submenu: { + padding: "{navigation.list.padding}", + gap: "{navigation.list.gap}" + }, + submenuLabel: { + padding: "{navigation.submenu.label.padding}", + fontWeight: "{navigation.submenu.label.font.weight}", + background: "{navigation.submenu.label.background.}", + color: "{navigation.submenu.label.color}" + }, + submenuIcon: { + size: "{navigation.submenu.icon.size}", + color: "{navigation.submenu.icon.color}", + focusColor: "{navigation.submenu.icon.focus.color}", + activeColor: "{navigation.submenu.icon.active.color}" + }, + separator: { + borderColor: "{content.border.color}" + }, + mobileButton: { + borderRadius: "50%", + size: "1.75rem", + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + hoverBackground: "{content.hover.background}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + } +}; +var index$M = { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}", + shadow: "{overlay.navigation.shadow}", + transitionDuration: "{transition.duration}" + }, + list: { + padding: "{navigation.list.padding}", + gap: "{navigation.list.gap}" + }, + item: { + focusBackground: "{navigation.item.focus.background}", + color: "{navigation.item.color}", + focusColor: "{navigation.item.focus.color}", + padding: "{navigation.item.padding}", + borderRadius: "{navigation.item.border.radius}", + gap: "{navigation.item.gap}", + icon: { + color: "{navigation.item.icon.color}", + focusColor: "{navigation.item.icon.focus.color}" + } + }, + submenuLabel: { + padding: "{navigation.submenu.label.padding}", + fontWeight: "{navigation.submenu.label.font.weight}", + background: "{navigation.submenu.label.background}", + color: "{navigation.submenu.label.color}" + }, + separator: { + borderColor: "{content.border.color}" + } +}; +var index$L = { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + color: "{content.color}", + gap: "0.5rem", + padding: "0.5rem 0.75rem", + transitionDuration: "{transition.duration}" + }, + baseItem: { + borderRadius: "{content.border.radius}", + padding: "{navigation.item.padding}" + }, + item: { + focusBackground: "{navigation.item.focus.background}", + activeBackground: "{navigation.item.active.background}", + color: "{navigation.item.color}", + focusColor: "{navigation.item.focus.color}", + activeColor: "{navigation.item.active.color}", + padding: "{navigation.item.padding}", + borderRadius: "{navigation.item.border.radius}", + gap: "{navigation.item.gap}", + icon: { + color: "{navigation.item.icon.color}", + focusColor: "{navigation.item.icon.focus.color}", + activeColor: "{navigation.item.icon.active.color}" + } + }, + submenu: { + padding: "{navigation.list.padding}", + gap: "{navigation.list.gap}", + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + shadow: "{overlay.navigation.shadow}", + mobileIndent: "1rem", + icon: { + size: "{navigation.submenu.icon.size}", + color: "{navigation.submenu.icon.color}", + focusColor: "{navigation.submenu.icon.focus.color}", + activeColor: "{navigation.submenu.icon.active.color}" + } + }, + separator: { + borderColor: "{content.border.color}" + }, + mobileButton: { + borderRadius: "50%", + size: "1.75rem", + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + hoverBackground: "{content.hover.background}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + } +}; +var index$K = { + root: { + borderRadius: "{content.border.radius}", + borderWidth: "1px", + transitionDuration: "{transition.duration}" + }, + content: { + padding: "0.5rem 0.75rem", + gap: "0.5rem", + sm: { + padding: "0.375rem 0.625rem" + }, + lg: { + padding: "0.625rem 0.875rem" + } + }, + text: { + fontSize: "1rem", + fontWeight: "500", + sm: { + fontSize: "0.875rem" + }, + lg: { + fontSize: "1.125rem" + } + }, + icon: { + size: "1.125rem", + sm: { + size: "1rem" + }, + lg: { + size: "1.25rem" + } + }, + closeButton: { + width: "1.75rem", + height: "1.75rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + offset: "{focus.ring.offset}" + } + }, + closeIcon: { + size: "1rem", + sm: { + size: "0.875rem" + }, + lg: { + size: "1.125rem" + } + }, + outlined: { + root: { + borderWidth: "1px" + } + }, + simple: { + content: { + padding: "0" + } + }, + colorScheme: { + light: { + info: { + background: "color-mix(in srgb, {blue.50}, transparent 5%)", + borderColor: "{blue.200}", + color: "{blue.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {blue.500}, transparent 96%)", + closeButton: { + hoverBackground: "{blue.100}", + focusRing: { + color: "{blue.600}", + shadow: "none" + } + }, + outlined: { + color: "{blue.600}", + borderColor: "{blue.600}" + }, + simple: { + color: "{blue.600}" + } + }, + success: { + background: "color-mix(in srgb, {green.50}, transparent 5%)", + borderColor: "{green.200}", + color: "{green.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {green.500}, transparent 96%)", + closeButton: { + hoverBackground: "{green.100}", + focusRing: { + color: "{green.600}", + shadow: "none" + } + }, + outlined: { + color: "{green.600}", + borderColor: "{green.600}" + }, + simple: { + color: "{green.600}" + } + }, + warn: { + background: "color-mix(in srgb,{yellow.50}, transparent 5%)", + borderColor: "{yellow.200}", + color: "{yellow.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {yellow.500}, transparent 96%)", + closeButton: { + hoverBackground: "{yellow.100}", + focusRing: { + color: "{yellow.600}", + shadow: "none" + } + }, + outlined: { + color: "{yellow.600}", + borderColor: "{yellow.600}" + }, + simple: { + color: "{yellow.600}" + } + }, + error: { + background: "color-mix(in srgb, {red.50}, transparent 5%)", + borderColor: "{red.200}", + color: "{red.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {red.500}, transparent 96%)", + closeButton: { + hoverBackground: "{red.100}", + focusRing: { + color: "{red.600}", + shadow: "none" + } + }, + outlined: { + color: "{red.600}", + borderColor: "{red.600}" + }, + simple: { + color: "{red.600}" + } + }, + secondary: { + background: "{surface.100}", + borderColor: "{surface.200}", + color: "{surface.600}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.500}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.200}", + focusRing: { + color: "{surface.600}", + shadow: "none" + } + }, + outlined: { + color: "{surface.500}", + borderColor: "{surface.500}" + }, + simple: { + color: "{surface.500}" + } + }, + contrast: { + background: "{surface.900}", + borderColor: "{surface.950}", + color: "{surface.50}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.950}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.800}", + focusRing: { + color: "{surface.50}", + shadow: "none" + } + }, + outlined: { + color: "{surface.950}", + borderColor: "{surface.950}" + }, + simple: { + color: "{surface.950}" + } + } + }, + dark: { + info: { + background: "color-mix(in srgb, {blue.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {blue.700}, transparent 64%)", + color: "{blue.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {blue.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{blue.500}", + shadow: "none" + } + }, + outlined: { + color: "{blue.500}", + borderColor: "{blue.500}" + }, + simple: { + color: "{blue.500}" + } + }, + success: { + background: "color-mix(in srgb, {green.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {green.700}, transparent 64%)", + color: "{green.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {green.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{green.500}", + shadow: "none" + } + }, + outlined: { + color: "{green.500}", + borderColor: "{green.500}" + }, + simple: { + color: "{green.500}" + } + }, + warn: { + background: "color-mix(in srgb, {yellow.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {yellow.700}, transparent 64%)", + color: "{yellow.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {yellow.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{yellow.500}", + shadow: "none" + } + }, + outlined: { + color: "{yellow.500}", + borderColor: "{yellow.500}" + }, + simple: { + color: "{yellow.500}" + } + }, + error: { + background: "color-mix(in srgb, {red.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {red.700}, transparent 64%)", + color: "{red.500}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {red.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{red.500}", + shadow: "none" + } + }, + outlined: { + color: "{red.500}", + borderColor: "{red.500}" + }, + simple: { + color: "{red.500}" + } + }, + secondary: { + background: "{surface.800}", + borderColor: "{surface.700}", + color: "{surface.300}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.500}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.700}", + focusRing: { + color: "{surface.300}", + shadow: "none" + } + }, + outlined: { + color: "{surface.400}", + borderColor: "{surface.400}" + }, + simple: { + color: "{surface.400}" + } + }, + contrast: { + background: "{surface.0}", + borderColor: "{surface.100}", + color: "{surface.950}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.950}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.100}", + focusRing: { + color: "{surface.950}", + shadow: "none" + } + }, + outlined: { + color: "{surface.0}", + borderColor: "{surface.0}" + }, + simple: { + color: "{surface.0}" + } + } + } + } +}; +var index$J = { + root: { + borderRadius: "{content.border.radius}", + gap: "1rem" + }, + meters: { + background: "{content.border.color}", + size: "0.5rem" + }, + label: { + gap: "0.5rem" + }, + labelMarker: { + size: "0.5rem" + }, + labelIcon: { + size: "1rem" + }, + labelList: { + verticalGap: "0.5rem", + horizontalGap: "1rem" + } +}; +var index$I = { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + } + }, + dropdown: { + width: "2.5rem", + color: "{form.field.icon.color}" + }, + overlay: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}" + }, + list: { + padding: "{list.padding}", + gap: "{list.gap}", + header: { + padding: "{list.header.padding}" + } + }, + option: { + focusBackground: "{list.option.focus.background}", + selectedBackground: "{list.option.selected.background}", + selectedFocusBackground: "{list.option.selected.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + selectedColor: "{list.option.selected.color}", + selectedFocusColor: "{list.option.selected.focus.color}", + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}", + gap: "0.5rem" + }, + optionGroup: { + background: "{list.option.group.background}", + color: "{list.option.group.color}", + fontWeight: "{list.option.group.font.weight}", + padding: "{list.option.group.padding}" + }, + clearIcon: { + color: "{form.field.icon.color}" + }, + chip: { + borderRadius: "{border.radius.sm}" + }, + emptyMessage: { + padding: "{list.option.padding}" + } +}; +var index$H = { + root: { + gap: "1.125rem" + }, + controls: { + gap: "0.5rem" + } +}; +var index$G = { + root: { + gutter: "0.75rem", + transitionDuration: "{transition.duration}" + }, + node: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + selectedColor: "{highlight.color}", + hoverColor: "{content.hover.color}", + padding: "0.75rem 1rem", + toggleablePadding: "0.75rem 1rem 1.25rem 1rem", + borderRadius: "{content.border.radius}" + }, + nodeToggleButton: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + borderColor: "{content.border.color}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + size: "1.5rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + connector: { + color: "{content.border.color}", + borderRadius: "{content.border.radius}", + height: "24px" + } +}; +var index$F = { + root: { + outline: { + width: "2px", + color: "{content.background}" + } + } +}; +var index$E = { + root: { + padding: "0.5rem 1rem", + gap: "0.25rem", + borderRadius: "{content.border.radius}", + background: "{content.background}", + color: "{content.color}", + transitionDuration: "{transition.duration}" + }, + navButton: { + background: "transparent", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + selectedColor: "{highlight.color}", + width: "2.5rem", + height: "2.5rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + currentPageReport: { + color: "{text.muted.color}" + }, + jumpToPageInput: { + maxWidth: "2.5rem" + } +}; +var index$D = { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}" + }, + header: { + background: "transparent", + color: "{text.color}", + padding: "1.125rem", + borderColor: "{content.border.color}", + borderWidth: "0", + borderRadius: "0" + }, + toggleableHeader: { + padding: "0.375rem 1.125rem" + }, + title: { + fontWeight: "600" + }, + content: { + padding: "0 1.125rem 1.125rem 1.125rem" + }, + footer: { + padding: "0 1.125rem 1.125rem 1.125rem" + } +}; +var index$C = { + root: { + gap: "0.5rem", + transitionDuration: "{transition.duration}" + }, + panel: { + background: "{content.background}", + borderColor: "{content.border.color}", + borderWidth: "1px", + color: "{content.color}", + padding: "0.25rem 0.25rem", + borderRadius: "{content.border.radius}", + first: { + borderWidth: "1px", + topBorderRadius: "{content.border.radius}" + }, + last: { + borderWidth: "1px", + bottomBorderRadius: "{content.border.radius}" + } + }, + item: { + focusBackground: "{navigation.item.focus.background}", + color: "{navigation.item.color}", + focusColor: "{navigation.item.focus.color}", + gap: "0.5rem", + padding: "{navigation.item.padding}", + borderRadius: "{content.border.radius}", + icon: { + color: "{navigation.item.icon.color}", + focusColor: "{navigation.item.icon.focus.color}" + } + }, + submenu: { + indent: "1rem" + }, + submenuIcon: { + color: "{navigation.submenu.icon.color}", + focusColor: "{navigation.submenu.icon.focus.color}" + } +}; +var index$B = { + meter: { + background: "{content.border.color}", + borderRadius: "{content.border.radius}", + height: ".75rem" + }, + icon: { + color: "{form.field.icon.color}" + }, + overlay: { + background: "{overlay.popover.background}", + borderColor: "{overlay.popover.border.color}", + borderRadius: "{overlay.popover.border.radius}", + color: "{overlay.popover.color}", + padding: "{overlay.popover.padding}", + shadow: "{overlay.popover.shadow}" + }, + content: { + gap: "0.5rem" + }, + colorScheme: { + light: { + strength: { + weakBackground: "{red.500}", + mediumBackground: "{amber.500}", + strongBackground: "{green.500}" + } + }, + dark: { + strength: { + weakBackground: "{red.400}", + mediumBackground: "{amber.400}", + strongBackground: "{green.400}" + } + } + } +}; +var index$A = { + root: { + gap: "1.125rem" + }, + controls: { + gap: "0.5rem" + } +}; +var index$z = { + root: { + background: "{overlay.popover.background}", + borderColor: "{overlay.popover.border.color}", + color: "{overlay.popover.color}", + borderRadius: "{overlay.popover.border.radius}", + shadow: "{overlay.popover.shadow}", + gutter: "10px", + arrowOffset: "1.25rem" + }, + content: { + padding: "{overlay.popover.padding}" + } +}; +var index$y = { + root: { + background: "{content.border.color}", + borderRadius: "{content.border.radius}", + height: "1.25rem" + }, + value: { + background: "{primary.color}" + }, + label: { + color: "{primary.contrast.color}", + fontSize: "0.75rem", + fontWeight: "600" + } +}; +var index$x = { + colorScheme: { + light: { + root: { + "color.1": "{red.500}", + "color.2": "{blue.500}", + "color.3": "{green.500}", + "color.4": "{yellow.500}" + } + }, + dark: { + root: { + "color.1": "{red.400}", + "color.2": "{blue.400}", + "color.3": "{green.400}", + "color.4": "{yellow.400}" + } + } + } +}; +var index$w = { + root: { + width: "1.25rem", + height: "1.25rem", + background: "{form.field.background}", + checkedBackground: "{primary.color}", + checkedHoverBackground: "{primary.hover.color}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.border.color}", + checkedBorderColor: "{primary.color}", + checkedHoverBorderColor: "{primary.hover.color}", + checkedFocusBorderColor: "{primary.color}", + checkedDisabledBorderColor: "{form.field.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + shadow: "{form.field.shadow}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + width: "1rem", + height: "1rem" + }, + lg: { + width: "1.5rem", + height: "1.5rem" + } + }, + icon: { + size: "0.75rem", + checkedColor: "{primary.contrast.color}", + checkedHoverColor: "{primary.contrast.color}", + disabledColor: "{form.field.disabled.color}", + sm: { + size: "0.5rem" + }, + lg: { + size: "1rem" + } + } +}; +var index$v = { + root: { + gap: "0.25rem", + transitionDuration: "{transition.duration}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + icon: { + size: "1rem", + color: "{text.muted.color}", + hoverColor: "{primary.color}", + activeColor: "{primary.color}" + } +}; +var index$u = { + colorScheme: { + light: { + root: { + background: "rgba(0,0,0,0.1)" + } + }, + dark: { + root: { + background: "rgba(255,255,255,0.3)" + } + } + } +}; +var index$t = { + root: { + transitionDuration: "{transition.duration}" + }, + bar: { + size: "9px", + borderRadius: "{border.radius.sm}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + colorScheme: { + light: { + bar: { + background: "{surface.100}" + } + }, + dark: { + bar: { + background: "{surface.800}" + } + } + } +}; +var index$s = { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + } + }, + dropdown: { + width: "2.5rem", + color: "{form.field.icon.color}" + }, + overlay: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}" + }, + list: { + padding: "{list.padding}", + gap: "{list.gap}", + header: { + padding: "{list.header.padding}" + } + }, + option: { + focusBackground: "{list.option.focus.background}", + selectedBackground: "{list.option.selected.background}", + selectedFocusBackground: "{list.option.selected.focus.background}", + color: "{list.option.color}", + focusColor: "{list.option.focus.color}", + selectedColor: "{list.option.selected.color}", + selectedFocusColor: "{list.option.selected.focus.color}", + padding: "{list.option.padding}", + borderRadius: "{list.option.border.radius}" + }, + optionGroup: { + background: "{list.option.group.background}", + color: "{list.option.group.color}", + fontWeight: "{list.option.group.font.weight}", + padding: "{list.option.group.padding}" + }, + clearIcon: { + color: "{form.field.icon.color}" + }, + checkmark: { + color: "{list.option.color}", + gutterStart: "-0.375rem", + gutterEnd: "0.375rem" + }, + emptyMessage: { + padding: "{list.option.padding}" + } +}; +var index$r = { + root: { + borderRadius: "{form.field.border.radius}" + }, + colorScheme: { + light: { + root: { + invalidBorderColor: "{form.field.invalid.border.color}" + } + }, + dark: { + root: { + invalidBorderColor: "{form.field.invalid.border.color}" + } + } + } +}; +var index$q = { + root: { + borderRadius: "{content.border.radius}" + }, + colorScheme: { + light: { + root: { + background: "{surface.200}", + animationBackground: "rgba(255,255,255,0.4)" + } + }, + dark: { + root: { + background: "rgba(255, 255, 255, 0.06)", + animationBackground: "rgba(255, 255, 255, 0.04)" + } + } + } +}; +var index$p = { + root: { + transitionDuration: "{transition.duration}" + }, + track: { + background: "{content.border.color}", + borderRadius: "{content.border.radius}", + size: "3px" + }, + range: { + background: "{primary.color}" + }, + handle: { + width: "20px", + height: "20px", + borderRadius: "50%", + background: "{content.border.color}", + hoverBackground: "{content.border.color}", + content: { + borderRadius: "50%", + hoverBackground: "{content.background}", + width: "16px", + height: "16px", + shadow: "0px 0.5px 0px 0px rgba(0, 0, 0, 0.08), 0px 1px 1px 0px rgba(0, 0, 0, 0.14)" + }, + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + colorScheme: { + light: { + handle: { + contentBackground: "{surface.0}" + } + }, + dark: { + handle: { + contentBackground: "{surface.950}" + } + } + } +}; +var index$o = { + root: { + gap: "0.5rem", + transitionDuration: "{transition.duration}" + } +}; +var index$n = { + root: { + borderRadius: "{form.field.border.radius}", + roundedBorderRadius: "2rem", + raisedShadow: "0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12)" + } +}; +var index$m = { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + transitionDuration: "{transition.duration}" + }, + gutter: { + background: "{content.border.color}" + }, + handle: { + size: "24px", + background: "transparent", + borderRadius: "{content.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + } +}; +var index$l = { + root: { + transitionDuration: "{transition.duration}" + }, + separator: { + background: "{content.border.color}", + activeBackground: "{primary.color}", + margin: "0 0 0 1.625rem", + size: "2px" + }, + step: { + padding: "0.5rem", + gap: "1rem" + }, + stepHeader: { + padding: "0", + borderRadius: "{content.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + gap: "0.5rem" + }, + stepTitle: { + color: "{text.muted.color}", + activeColor: "{primary.color}", + fontWeight: "500" + }, + stepNumber: { + background: "{content.background}", + activeBackground: "{content.background}", + borderColor: "{content.border.color}", + activeBorderColor: "{content.border.color}", + color: "{text.muted.color}", + activeColor: "{primary.color}", + size: "2rem", + fontSize: "1.143rem", + fontWeight: "500", + borderRadius: "50%", + shadow: "0px 0.5px 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12)" + }, + steppanels: { + padding: "0.875rem 0.5rem 1.125rem 0.5rem" + }, + steppanel: { + background: "{content.background}", + color: "{content.color}", + padding: "0", + indent: "1rem" + } +}; +var index$k = { + root: { + transitionDuration: "{transition.duration}" + }, + separator: { + background: "{content.border.color}" + }, + itemLink: { + borderRadius: "{content.border.radius}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + gap: "0.5rem" + }, + itemLabel: { + color: "{text.muted.color}", + activeColor: "{primary.color}", + fontWeight: "500" + }, + itemNumber: { + background: "{content.background}", + activeBackground: "{content.background}", + borderColor: "{content.border.color}", + activeBorderColor: "{content.border.color}", + color: "{text.muted.color}", + activeColor: "{primary.color}", + size: "2rem", + fontSize: "1.143rem", + fontWeight: "500", + borderRadius: "50%", + shadow: "0px 0.5px 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12)" + } +}; +var index$j = { + root: { + transitionDuration: "{transition.duration}" + }, + tablist: { + borderWidth: "0 0 1px 0", + background: "{content.background}", + borderColor: "{content.border.color}" + }, + item: { + background: "transparent", + hoverBackground: "transparent", + activeBackground: "transparent", + borderWidth: "0 0 1px 0", + borderColor: "{content.border.color}", + hoverBorderColor: "{content.border.color}", + activeBorderColor: "{primary.color}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{primary.color}", + padding: "1rem 1.125rem", + fontWeight: "600", + margin: "0 0 -1px 0", + gap: "0.5rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + itemIcon: { + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{primary.color}" + }, + activeBar: { + height: "1px", + bottom: "-1px", + background: "{primary.color}" + } +}; +var index$i = { + root: { + transitionDuration: "{transition.duration}" + }, + tablist: { + borderWidth: "0 0 1px 0", + background: "{content.background}", + borderColor: "{content.border.color}" + }, + tab: { + background: "transparent", + hoverBackground: "transparent", + activeBackground: "transparent", + borderWidth: "0 0 1px 0", + borderColor: "{content.border.color}", + hoverBorderColor: "{content.border.color}", + activeBorderColor: "{primary.color}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{primary.color}", + padding: "1rem 1.125rem", + fontWeight: "600", + margin: "0 0 -1px 0", + gap: "0.5rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + } + }, + tabpanel: { + background: "{content.background}", + color: "{content.color}", + padding: "0.875rem 1.125rem 1.125rem 1.125rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "inset {focus.ring.shadow}" + } + }, + navButton: { + background: "{content.background}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + width: "2.5rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + } + }, + activeBar: { + height: "1px", + bottom: "-1px", + background: "{primary.color}" + }, + colorScheme: { + light: { + navButton: { + shadow: "0px 0px 10px 50px rgba(255, 255, 255, 0.6)" + } + }, + dark: { + navButton: { + shadow: "0px 0px 10px 50px color-mix(in srgb, {content.background}, transparent 50%)" + } + } + } +}; +var index$h = { + root: { + transitionDuration: "{transition.duration}" + }, + tabList: { + background: "{content.background}", + borderColor: "{content.border.color}" + }, + tab: { + borderColor: "{content.border.color}", + activeBorderColor: "{primary.color}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + activeColor: "{primary.color}" + }, + tabPanel: { + background: "{content.background}", + color: "{content.color}" + }, + navButton: { + background: "{content.background}", + color: "{text.muted.color}", + hoverColor: "{text.color}" + }, + colorScheme: { + light: { + navButton: { + shadow: "0px 0px 10px 50px rgba(255, 255, 255, 0.6)" + } + }, + dark: { + navButton: { + shadow: "0px 0px 10px 50px color-mix(in srgb, {content.background}, transparent 50%)" + } + } + } +}; +var index$g = { + root: { + fontSize: "0.875rem", + fontWeight: "700", + padding: "0.25rem 0.5rem", + gap: "0.25rem", + borderRadius: "{content.border.radius}", + roundedBorderRadius: "{border.radius.xl}" + }, + icon: { + size: "0.75rem" + }, + colorScheme: { + light: { + primary: { + background: "{primary.100}", + color: "{primary.700}" + }, + secondary: { + background: "{surface.100}", + color: "{surface.600}" + }, + success: { + background: "{green.100}", + color: "{green.700}" + }, + info: { + background: "{sky.100}", + color: "{sky.700}" + }, + warn: { + background: "{orange.100}", + color: "{orange.700}" + }, + danger: { + background: "{red.100}", + color: "{red.700}" + }, + contrast: { + background: "{surface.950}", + color: "{surface.0}" + } + }, + dark: { + primary: { + background: "color-mix(in srgb, {primary.500}, transparent 84%)", + color: "{primary.300}" + }, + secondary: { + background: "{surface.800}", + color: "{surface.300}" + }, + success: { + background: "color-mix(in srgb, {green.500}, transparent 84%)", + color: "{green.300}" + }, + info: { + background: "color-mix(in srgb, {sky.500}, transparent 84%)", + color: "{sky.300}" + }, + warn: { + background: "color-mix(in srgb, {orange.500}, transparent 84%)", + color: "{orange.300}" + }, + danger: { + background: "color-mix(in srgb, {red.500}, transparent 84%)", + color: "{red.300}" + }, + contrast: { + background: "{surface.0}", + color: "{surface.950}" + } + } + } +}; +var index$f = { + root: { + background: "{form.field.background}", + borderColor: "{form.field.border.color}", + color: "{form.field.color}", + height: "18rem", + padding: "{form.field.padding.y} {form.field.padding.x}", + borderRadius: "{form.field.border.radius}" + }, + prompt: { + gap: "0.25rem" + }, + commandResponse: { + margin: "2px 0" + } +}; +var index$e = { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + } + } +}; +var index$d = { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + color: "{content.color}", + borderRadius: "{content.border.radius}", + shadow: "{overlay.navigation.shadow}", + transitionDuration: "{transition.duration}" + }, + list: { + padding: "{navigation.list.padding}", + gap: "{navigation.list.gap}" + }, + item: { + focusBackground: "{navigation.item.focus.background}", + activeBackground: "{navigation.item.active.background}", + color: "{navigation.item.color}", + focusColor: "{navigation.item.focus.color}", + activeColor: "{navigation.item.active.color}", + padding: "{navigation.item.padding}", + borderRadius: "{navigation.item.border.radius}", + gap: "{navigation.item.gap}", + icon: { + color: "{navigation.item.icon.color}", + focusColor: "{navigation.item.icon.focus.color}", + activeColor: "{navigation.item.icon.active.color}" + } + }, + submenu: { + mobileIndent: "1rem" + }, + submenuIcon: { + size: "{navigation.submenu.icon.size}", + color: "{navigation.submenu.icon.color}", + focusColor: "{navigation.submenu.icon.focus.color}", + activeColor: "{navigation.submenu.icon.active.color}" + }, + separator: { + borderColor: "{content.border.color}" + } +}; +var index$c = { + event: { + minHeight: "5rem" + }, + horizontal: { + eventContent: { + padding: "1rem 0" + } + }, + vertical: { + eventContent: { + padding: "0 1rem" + } + }, + eventMarker: { + size: "1.125rem", + borderRadius: "50%", + borderWidth: "2px", + background: "{content.background}", + borderColor: "{content.border.color}", + content: { + borderRadius: "50%", + size: "0.375rem", + background: "{primary.color}", + insetShadow: "0px 0.5px 0px 0px rgba(0, 0, 0, 0.06), 0px 1px 1px 0px rgba(0, 0, 0, 0.12)" + } + }, + eventConnector: { + color: "{content.border.color}", + size: "2px" + } +}; +var index$b = { + root: { + width: "25rem", + borderRadius: "{content.border.radius}", + borderWidth: "1px", + transitionDuration: "{transition.duration}" + }, + icon: { + size: "1.125rem" + }, + content: { + padding: "{overlay.popover.padding}", + gap: "0.5rem" + }, + text: { + gap: "0.5rem" + }, + summary: { + fontWeight: "500", + fontSize: "1rem" + }, + detail: { + fontWeight: "500", + fontSize: "0.875rem" + }, + closeButton: { + width: "1.75rem", + height: "1.75rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + offset: "{focus.ring.offset}" + } + }, + closeIcon: { + size: "1rem" + }, + colorScheme: { + light: { + blur: "1.5px", + info: { + background: "color-mix(in srgb, {blue.50}, transparent 5%)", + borderColor: "{blue.200}", + color: "{blue.600}", + detailColor: "{surface.700}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {blue.500}, transparent 96%)", + closeButton: { + hoverBackground: "{blue.100}", + focusRing: { + color: "{blue.600}", + shadow: "none" + } + } + }, + success: { + background: "color-mix(in srgb, {green.50}, transparent 5%)", + borderColor: "{green.200}", + color: "{green.600}", + detailColor: "{surface.700}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {green.500}, transparent 96%)", + closeButton: { + hoverBackground: "{green.100}", + focusRing: { + color: "{green.600}", + shadow: "none" + } + } + }, + warn: { + background: "color-mix(in srgb,{yellow.50}, transparent 5%)", + borderColor: "{yellow.200}", + color: "{yellow.600}", + detailColor: "{surface.700}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {yellow.500}, transparent 96%)", + closeButton: { + hoverBackground: "{yellow.100}", + focusRing: { + color: "{yellow.600}", + shadow: "none" + } + } + }, + error: { + background: "color-mix(in srgb, {red.50}, transparent 5%)", + borderColor: "{red.200}", + color: "{red.600}", + detailColor: "{surface.700}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {red.500}, transparent 96%)", + closeButton: { + hoverBackground: "{red.100}", + focusRing: { + color: "{red.600}", + shadow: "none" + } + } + }, + secondary: { + background: "{surface.100}", + borderColor: "{surface.200}", + color: "{surface.600}", + detailColor: "{surface.700}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.500}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.200}", + focusRing: { + color: "{surface.600}", + shadow: "none" + } + } + }, + contrast: { + background: "{surface.900}", + borderColor: "{surface.950}", + color: "{surface.50}", + detailColor: "{surface.0}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.950}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.800}", + focusRing: { + color: "{surface.50}", + shadow: "none" + } + } + } + }, + dark: { + blur: "10px", + info: { + background: "color-mix(in srgb, {blue.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {blue.700}, transparent 64%)", + color: "{blue.500}", + detailColor: "{surface.0}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {blue.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{blue.500}", + shadow: "none" + } + } + }, + success: { + background: "color-mix(in srgb, {green.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {green.700}, transparent 64%)", + color: "{green.500}", + detailColor: "{surface.0}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {green.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{green.500}", + shadow: "none" + } + } + }, + warn: { + background: "color-mix(in srgb, {yellow.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {yellow.700}, transparent 64%)", + color: "{yellow.500}", + detailColor: "{surface.0}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {yellow.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{yellow.500}", + shadow: "none" + } + } + }, + error: { + background: "color-mix(in srgb, {red.500}, transparent 84%)", + borderColor: "color-mix(in srgb, {red.700}, transparent 64%)", + color: "{red.500}", + detailColor: "{surface.0}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {red.500}, transparent 96%)", + closeButton: { + hoverBackground: "rgba(255, 255, 255, 0.05)", + focusRing: { + color: "{red.500}", + shadow: "none" + } + } + }, + secondary: { + background: "{surface.800}", + borderColor: "{surface.700}", + color: "{surface.300}", + detailColor: "{surface.0}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.500}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.700}", + focusRing: { + color: "{surface.300}", + shadow: "none" + } + } + }, + contrast: { + background: "{surface.0}", + borderColor: "{surface.100}", + color: "{surface.950}", + detailColor: "{surface.950}", + shadow: "0px 4px 8px 0px color-mix(in srgb, {surface.950}, transparent 96%)", + closeButton: { + hoverBackground: "{surface.100}", + focusRing: { + color: "{surface.950}", + shadow: "none" + } + } + } + } + } +}; +var index$a = { + root: { + padding: "0.5rem 1rem", + borderRadius: "{content.border.radius}", + gap: "0.5rem", + fontWeight: "500", + disabledBackground: "{form.field.disabled.background}", + disabledBorderColor: "{form.field.disabled.background}", + disabledColor: "{form.field.disabled.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + padding: "0.375rem 0.75rem" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + padding: "0.625rem 1.25rem" + } + }, + icon: { + disabledColor: "{form.field.disabled.color}" + }, + content: { + left: "0.25rem", + top: "0.25rem", + checkedShadow: "0px 1px 2px 0px rgba(0, 0, 0, 0.02), 0px 1px 2px 0px rgba(0, 0, 0, 0.04)" + }, + colorScheme: { + light: { + root: { + background: "{surface.100}", + checkedBackground: "{surface.100}", + hoverBackground: "{surface.100}", + borderColor: "{surface.100}", + color: "{surface.500}", + hoverColor: "{surface.700}", + checkedColor: "{surface.900}", + checkedBorderColor: "{surface.100}" + }, + content: { + checkedBackground: "{surface.0}" + }, + icon: { + color: "{surface.500}", + hoverColor: "{surface.700}", + checkedColor: "{surface.900}" + } + }, + dark: { + root: { + background: "{surface.950}", + checkedBackground: "{surface.950}", + hoverBackground: "{surface.950}", + borderColor: "{surface.950}", + color: "{surface.400}", + hoverColor: "{surface.300}", + checkedColor: "{surface.0}", + checkedBorderColor: "{surface.950}" + }, + content: { + checkedBackground: "{surface.800}" + }, + icon: { + color: "{surface.400}", + hoverColor: "{surface.300}", + checkedColor: "{surface.0}" + } + } + } +}; +var index$9 = { + root: { + width: "2.5rem", + height: "1.5rem", + borderRadius: "30px", + gap: "0.25rem", + shadow: "{form.field.shadow}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + }, + borderWidth: "1px", + borderColor: "transparent", + hoverBorderColor: "transparent", + checkedBorderColor: "transparent", + checkedHoverBorderColor: "transparent", + invalidBorderColor: "{form.field.invalid.border.color}", + transitionDuration: "{form.field.transition.duration}", + slideDuration: "0.2s" + }, + handle: { + borderRadius: "50%", + size: "1rem" + }, + colorScheme: { + light: { + root: { + background: "{surface.300}", + disabledBackground: "{form.field.disabled.background}", + hoverBackground: "{surface.400}", + checkedBackground: "{primary.color}", + checkedHoverBackground: "{primary.hover.color}" + }, + handle: { + background: "{surface.0}", + disabledBackground: "{form.field.disabled.color}", + hoverBackground: "{surface.0}", + checkedBackground: "{surface.0}", + checkedHoverBackground: "{surface.0}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + checkedColor: "{primary.color}", + checkedHoverColor: "{primary.hover.color}" + } + }, + dark: { + root: { + background: "{surface.700}", + disabledBackground: "{surface.600}", + hoverBackground: "{surface.600}", + checkedBackground: "{primary.color}", + checkedHoverBackground: "{primary.hover.color}" + }, + handle: { + background: "{surface.400}", + disabledBackground: "{surface.900}", + hoverBackground: "{surface.300}", + checkedBackground: "{surface.900}", + checkedHoverBackground: "{surface.900}", + color: "{surface.900}", + hoverColor: "{surface.800}", + checkedColor: "{primary.color}", + checkedHoverColor: "{primary.hover.color}" + } + } + } +}; +var index$8 = { + root: { + background: "{content.background}", + borderColor: "{content.border.color}", + borderRadius: "{content.border.radius}", + color: "{content.color}", + gap: "0.5rem", + padding: "0.75rem" + } +}; +var index$7 = { + root: { + maxWidth: "12.5rem", + gutter: "0.25rem", + shadow: "{overlay.popover.shadow}", + padding: "0.5rem 0.75rem", + borderRadius: "{overlay.popover.border.radius}" + }, + colorScheme: { + light: { + root: { + background: "{surface.700}", + color: "{surface.0}" + } + }, + dark: { + root: { + background: "{surface.700}", + color: "{surface.0}" + } + } + } +}; +var index$6 = { + root: { + background: "{content.background}", + color: "{content.color}", + padding: "1rem", + gap: "2px", + indent: "1rem", + transitionDuration: "{transition.duration}" + }, + node: { + padding: "0.25rem 0.5rem", + borderRadius: "{content.border.radius}", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + color: "{text.color}", + hoverColor: "{text.hover.color}", + selectedColor: "{highlight.color}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + }, + gap: "0.25rem" + }, + nodeIcon: { + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + selectedColor: "{highlight.color}" + }, + nodeToggleButton: { + borderRadius: "50%", + size: "1.75rem", + hoverBackground: "{content.hover.background}", + selectedHoverBackground: "{content.background}", + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + selectedHoverColor: "{primary.color}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + loadingIcon: { + size: "2rem" + }, + filter: { + margin: "0 0 0.5rem 0" + } +}; +var index$5 = { + root: { + background: "{form.field.background}", + disabledBackground: "{form.field.disabled.background}", + filledBackground: "{form.field.filled.background}", + filledHoverBackground: "{form.field.filled.hover.background}", + filledFocusBackground: "{form.field.filled.focus.background}", + borderColor: "{form.field.border.color}", + hoverBorderColor: "{form.field.hover.border.color}", + focusBorderColor: "{form.field.focus.border.color}", + invalidBorderColor: "{form.field.invalid.border.color}", + color: "{form.field.color}", + disabledColor: "{form.field.disabled.color}", + placeholderColor: "{form.field.placeholder.color}", + invalidPlaceholderColor: "{form.field.invalid.placeholder.color}", + shadow: "{form.field.shadow}", + paddingX: "{form.field.padding.x}", + paddingY: "{form.field.padding.y}", + borderRadius: "{form.field.border.radius}", + focusRing: { + width: "{form.field.focus.ring.width}", + style: "{form.field.focus.ring.style}", + color: "{form.field.focus.ring.color}", + offset: "{form.field.focus.ring.offset}", + shadow: "{form.field.focus.ring.shadow}" + }, + transitionDuration: "{form.field.transition.duration}", + sm: { + fontSize: "{form.field.sm.font.size}", + paddingX: "{form.field.sm.padding.x}", + paddingY: "{form.field.sm.padding.y}" + }, + lg: { + fontSize: "{form.field.lg.font.size}", + paddingX: "{form.field.lg.padding.x}", + paddingY: "{form.field.lg.padding.y}" + } + }, + dropdown: { + width: "2.5rem", + color: "{form.field.icon.color}" + }, + overlay: { + background: "{overlay.select.background}", + borderColor: "{overlay.select.border.color}", + borderRadius: "{overlay.select.border.radius}", + color: "{overlay.select.color}", + shadow: "{overlay.select.shadow}" + }, + tree: { + padding: "{list.padding}" + }, + clearIcon: { + color: "{form.field.icon.color}" + }, + emptyMessage: { + padding: "{list.option.padding}" + }, + chip: { + borderRadius: "{border.radius.sm}" + } +}; +var index$4 = { + root: { + transitionDuration: "{transition.duration}" + }, + header: { + background: "{content.background}", + borderColor: "{treetable.border.color}", + color: "{content.color}", + borderWidth: "0 0 1px 0", + padding: "0.75rem 1rem" + }, + headerCell: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + borderColor: "{treetable.border.color}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + selectedColor: "{highlight.color}", + gap: "0.5rem", + padding: "0.75rem 1rem", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + } + }, + columnTitle: { + fontWeight: "600" + }, + row: { + background: "{content.background}", + hoverBackground: "{content.hover.background}", + selectedBackground: "{highlight.background}", + color: "{content.color}", + hoverColor: "{content.hover.color}", + selectedColor: "{highlight.color}", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "-1px", + shadow: "{focus.ring.shadow}" + } + }, + bodyCell: { + borderColor: "{treetable.border.color}", + padding: "0.75rem 1rem", + gap: "0.5rem" + }, + footerCell: { + background: "{content.background}", + borderColor: "{treetable.border.color}", + color: "{content.color}", + padding: "0.75rem 1rem" + }, + columnFooter: { + fontWeight: "600" + }, + footer: { + background: "{content.background}", + borderColor: "{treetable.border.color}", + color: "{content.color}", + borderWidth: "0 0 1px 0", + padding: "0.75rem 1rem" + }, + columnResizerWidth: "0.5rem", + resizeIndicator: { + width: "1px", + color: "{primary.color}" + }, + sortIcon: { + color: "{text.muted.color}", + hoverColor: "{text.hover.muted.color}", + size: "0.875rem" + }, + loadingIcon: { + size: "2rem" + }, + nodeToggleButton: { + hoverBackground: "{content.hover.background}", + selectedHoverBackground: "{content.background}", + color: "{text.muted.color}", + hoverColor: "{text.color}", + selectedHoverColor: "{primary.color}", + size: "1.75rem", + borderRadius: "50%", + focusRing: { + width: "{focus.ring.width}", + style: "{focus.ring.style}", + color: "{focus.ring.color}", + offset: "{focus.ring.offset}", + shadow: "{focus.ring.shadow}" + } + }, + paginatorTop: { + borderColor: "{content.border.color}", + borderWidth: "0 0 1px 0" + }, + paginatorBottom: { + borderColor: "{content.border.color}", + borderWidth: "0 0 1px 0" + }, + colorScheme: { + light: { + root: { + borderColor: "{content.border.color}" + }, + bodyCell: { + selectedBorderColor: "{primary.100}" + } + }, + dark: { + root: { + borderColor: "{surface.800}" + }, + bodyCell: { + selectedBorderColor: "{primary.900}" + } + } + } +}; +var index$3 = { + loader: { + mask: { + background: "{content.background}", + color: "{text.muted.color}" + }, + icon: { + size: "2rem" + } + } +}; +function _typeof$t(o2) { + "@babel/helpers - typeof"; + return _typeof$t = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o3) { + return typeof o3; + } : function(o3) { + return o3 && "function" == typeof Symbol && o3.constructor === Symbol && o3 !== Symbol.prototype ? "symbol" : typeof o3; + }, _typeof$t(o2); +} +__name(_typeof$t, "_typeof$t"); +function ownKeys$r(e2, r2) { + var t2 = Object.keys(e2); + if (Object.getOwnPropertySymbols) { + var o2 = Object.getOwnPropertySymbols(e2); + r2 && (o2 = o2.filter(function(r3) { + return Object.getOwnPropertyDescriptor(e2, r3).enumerable; + })), t2.push.apply(t2, o2); + } + return t2; +} +__name(ownKeys$r, "ownKeys$r"); +function _objectSpread$r(e2) { + for (var r2 = 1; r2 < arguments.length; r2++) { + var t2 = null != arguments[r2] ? arguments[r2] : {}; + r2 % 2 ? ownKeys$r(Object(t2), true).forEach(function(r3) { + _defineProperty$v(e2, r3, t2[r3]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e2, Object.getOwnPropertyDescriptors(t2)) : ownKeys$r(Object(t2)).forEach(function(r3) { + Object.defineProperty(e2, r3, Object.getOwnPropertyDescriptor(t2, r3)); + }); + } + return e2; +} +__name(_objectSpread$r, "_objectSpread$r"); +function _defineProperty$v(e2, r2, t2) { + return (r2 = _toPropertyKey$s(r2)) in e2 ? Object.defineProperty(e2, r2, { value: t2, enumerable: true, configurable: true, writable: true }) : e2[r2] = t2, e2; +} +__name(_defineProperty$v, "_defineProperty$v"); +function _toPropertyKey$s(t2) { + var i2 = _toPrimitive$s(t2, "string"); + return "symbol" == _typeof$t(i2) ? i2 : i2 + ""; +} +__name(_toPropertyKey$s, "_toPropertyKey$s"); +function _toPrimitive$s(t2, r2) { + if ("object" != _typeof$t(t2) || !t2) return t2; + var e2 = t2[Symbol.toPrimitive]; + if (void 0 !== e2) { + var i2 = e2.call(t2, r2 || "default"); + if ("object" != _typeof$t(i2)) return i2; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r2 ? String : Number)(t2); +} +__name(_toPrimitive$s, "_toPrimitive$s"); +var index$2 = _objectSpread$r(_objectSpread$r({}, index$1n), {}, { + components: { + accordion: index$1r, + autocomplete: index$1q, + avatar: index$1p, + badge: index$1o, + blockui: index$1m, + breadcrumb: index$1l, + button: index$1k, + datepicker: index$18, + card: index$1j, + carousel: index$1i, + cascadeselect: index$1h, + checkbox: index$1g, + chip: index$1f, + colorpicker: index$1e, + confirmdialog: index$1d, + confirmpopup: index$1c, + contextmenu: index$1b, + dataview: index$19, + datatable: index$1a, + dialog: index$17, + divider: index$16, + dock: index$15, + drawer: index$14, + editor: index$13, + fieldset: index$12, + fileupload: index$11, + iftalabel: index$Z, + floatlabel: index$10, + galleria: index$$, + iconfield: index$_, + image: index$Y, + imagecompare: index$X, + inlinemessage: index$W, + inplace: index$V, + inputchips: index$U, + inputgroup: index$T, + inputnumber: index$S, + inputotp: index$R, + inputtext: index$Q, + knob: index$P, + listbox: index$O, + megamenu: index$N, + menu: index$M, + menubar: index$L, + message: index$K, + metergroup: index$J, + multiselect: index$I, + orderlist: index$H, + organizationchart: index$G, + overlaybadge: index$F, + popover: index$z, + paginator: index$E, + password: index$B, + panel: index$D, + panelmenu: index$C, + picklist: index$A, + progressbar: index$y, + progressspinner: index$x, + radiobutton: index$w, + rating: index$v, + scrollpanel: index$t, + select: index$s, + selectbutton: index$r, + skeleton: index$q, + slider: index$p, + speeddial: index$o, + splitter: index$m, + splitbutton: index$n, + stepper: index$l, + steps: index$k, + tabmenu: index$j, + tabs: index$i, + tabview: index$h, + textarea: index$e, + tieredmenu: index$d, + tag: index$g, + terminal: index$f, + timeline: index$c, + togglebutton: index$a, + toggleswitch: index$9, + tree: index$6, + treeselect: index$5, + treetable: index$4, + toast: index$b, + toolbar: index$8, + virtualscroller: index$3 + }, + directives: { + tooltip: index$7, + ripple: index$u + } +}); +const DEBUG_BUILD$6 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; +const SDK_VERSION = "8.48.0"; +const GLOBAL_OBJ = globalThis; +function getGlobalSingleton(name2, creator, obj) { + const gbl = obj || GLOBAL_OBJ; + const __SENTRY__ = gbl.__SENTRY__ = gbl.__SENTRY__ || {}; + const versionedCarrier = __SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {}; + return versionedCarrier[name2] || (versionedCarrier[name2] = creator()); +} +__name(getGlobalSingleton, "getGlobalSingleton"); +const DEBUG_BUILD$5 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; +const PREFIX$2 = "Sentry Logger "; +const CONSOLE_LEVELS$1 = [ + "debug", + "info", + "warn", + "error", + "log", + "assert", + "trace" +]; +const originalConsoleMethods = {}; +function consoleSandbox(callback) { + if (!("console" in GLOBAL_OBJ)) { + return callback(); + } + const console2 = GLOBAL_OBJ.console; + const wrappedFuncs = {}; + const wrappedLevels = Object.keys(originalConsoleMethods); + wrappedLevels.forEach((level) => { + const originalConsoleMethod = originalConsoleMethods[level]; + wrappedFuncs[level] = console2[level]; + console2[level] = originalConsoleMethod; + }); + try { + return callback(); + } finally { + wrappedLevels.forEach((level) => { + console2[level] = wrappedFuncs[level]; + }); + } +} +__name(consoleSandbox, "consoleSandbox"); +function makeLogger() { + let enabled = false; + const logger2 = { + enable: /* @__PURE__ */ __name(() => { + enabled = true; + }, "enable"), + disable: /* @__PURE__ */ __name(() => { + enabled = false; + }, "disable"), + isEnabled: /* @__PURE__ */ __name(() => enabled, "isEnabled") + }; + if (DEBUG_BUILD$5) { + CONSOLE_LEVELS$1.forEach((name2) => { + logger2[name2] = (...args) => { + if (enabled) { + consoleSandbox(() => { + GLOBAL_OBJ.console[name2](`${PREFIX$2}[${name2}]:`, ...args); + }); + } + }; + }); + } else { + CONSOLE_LEVELS$1.forEach((name2) => { + logger2[name2] = () => void 0; + }); + } + return logger2; +} +__name(makeLogger, "makeLogger"); +const logger$2 = getGlobalSingleton("logger", makeLogger); +const STACKTRACE_FRAME_LIMIT = 50; +const UNKNOWN_FUNCTION = "?"; +const WEBPACK_ERROR_REGEXP = /\(error: (.*)\)/; +const STRIP_FRAME_REGEXP = /captureMessage|captureException/; +function createStackParser(...parsers) { + const sortedParsers = parsers.sort((a2, b2) => a2[0] - b2[0]).map((p2) => p2[1]); + return (stack2, skipFirstLines = 0, framesToPop = 0) => { + const frames = []; + const lines = stack2.split("\n"); + for (let i2 = skipFirstLines; i2 < lines.length; i2++) { + const line = lines[i2]; + if (line.length > 1024) { + continue; + } + const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, "$1") : line; + if (cleanedLine.match(/\S*Error: /)) { + continue; + } + for (const parser of sortedParsers) { + const frame = parser(cleanedLine); + if (frame) { + frames.push(frame); + break; + } + } + if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) { + break; + } + } + return stripSentryFramesAndReverse(frames.slice(framesToPop)); + }; +} +__name(createStackParser, "createStackParser"); +function stackParserFromStackParserOptions(stackParser) { + if (Array.isArray(stackParser)) { + return createStackParser(...stackParser); + } + return stackParser; +} +__name(stackParserFromStackParserOptions, "stackParserFromStackParserOptions"); +function stripSentryFramesAndReverse(stack2) { + if (!stack2.length) { + return []; + } + const localStack = Array.from(stack2); + if (/sentryWrapped/.test(getLastStackFrame(localStack).function || "")) { + localStack.pop(); + } + localStack.reverse(); + if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || "")) { + localStack.pop(); + if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || "")) { + localStack.pop(); + } + } + return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map((frame) => ({ + ...frame, + filename: frame.filename || getLastStackFrame(localStack).filename, + function: frame.function || UNKNOWN_FUNCTION + })); +} +__name(stripSentryFramesAndReverse, "stripSentryFramesAndReverse"); +function getLastStackFrame(arr) { + return arr[arr.length - 1] || {}; +} +__name(getLastStackFrame, "getLastStackFrame"); +const defaultFunctionName = ""; +function getFunctionName(fn) { + try { + if (!fn || typeof fn !== "function") { + return defaultFunctionName; + } + return fn.name || defaultFunctionName; + } catch (e2) { + return defaultFunctionName; + } +} +__name(getFunctionName, "getFunctionName"); +function getFramesFromEvent(event) { + const exception = event.exception; + if (exception) { + const frames = []; + try { + exception.values.forEach((value4) => { + if (value4.stacktrace.frames) { + frames.push(...value4.stacktrace.frames); + } + }); + return frames; + } catch (_oO) { + return void 0; + } + } + return void 0; +} +__name(getFramesFromEvent, "getFramesFromEvent"); +const handlers$4 = {}; +const instrumented$1 = {}; +function addHandler$1(type, handler12) { + handlers$4[type] = handlers$4[type] || []; + handlers$4[type].push(handler12); +} +__name(addHandler$1, "addHandler$1"); +function resetInstrumentationHandlers() { + Object.keys(handlers$4).forEach((key) => { + handlers$4[key] = void 0; + }); +} +__name(resetInstrumentationHandlers, "resetInstrumentationHandlers"); +function maybeInstrument(type, instrumentFn) { + if (!instrumented$1[type]) { + instrumented$1[type] = true; + try { + instrumentFn(); + } catch (e2) { + DEBUG_BUILD$5 && logger$2.error(`Error while instrumenting ${type}`, e2); + } + } +} +__name(maybeInstrument, "maybeInstrument"); +function triggerHandlers$1(type, data26) { + const typeHandlers = type && handlers$4[type]; + if (!typeHandlers) { + return; + } + for (const handler12 of typeHandlers) { + try { + handler12(data26); + } catch (e2) { + DEBUG_BUILD$5 && logger$2.error( + `Error while triggering instrumentation handler. +Type: ${type} +Name: ${getFunctionName(handler12)} +Error:`, + e2 + ); + } + } +} +__name(triggerHandlers$1, "triggerHandlers$1"); +let _oldOnErrorHandler = null; +function addGlobalErrorInstrumentationHandler(handler12) { + const type = "error"; + addHandler$1(type, handler12); + maybeInstrument(type, instrumentError); +} +__name(addGlobalErrorInstrumentationHandler, "addGlobalErrorInstrumentationHandler"); +function instrumentError() { + _oldOnErrorHandler = GLOBAL_OBJ.onerror; + GLOBAL_OBJ.onerror = function(msg, url, line, column, error2) { + const handlerData = { + column, + error: error2, + line, + msg, + url + }; + triggerHandlers$1("error", handlerData); + if (_oldOnErrorHandler) { + return _oldOnErrorHandler.apply(this, arguments); + } + return false; + }; + GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true; +} +__name(instrumentError, "instrumentError"); +let _oldOnUnhandledRejectionHandler = null; +function addGlobalUnhandledRejectionInstrumentationHandler(handler12) { + const type = "unhandledrejection"; + addHandler$1(type, handler12); + maybeInstrument(type, instrumentUnhandledRejection); +} +__name(addGlobalUnhandledRejectionInstrumentationHandler, "addGlobalUnhandledRejectionInstrumentationHandler"); +function instrumentUnhandledRejection() { + _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection; + GLOBAL_OBJ.onunhandledrejection = function(e2) { + const handlerData = e2; + triggerHandlers$1("unhandledrejection", handlerData); + if (_oldOnUnhandledRejectionHandler) { + return _oldOnUnhandledRejectionHandler.apply(this, arguments); + } + return true; + }; + GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true; +} +__name(instrumentUnhandledRejection, "instrumentUnhandledRejection"); +function getMainCarrier() { + getSentryCarrier(GLOBAL_OBJ); + return GLOBAL_OBJ; +} +__name(getMainCarrier, "getMainCarrier"); +function getSentryCarrier(carrier) { + const __SENTRY__ = carrier.__SENTRY__ = carrier.__SENTRY__ || {}; + __SENTRY__.version = __SENTRY__.version || SDK_VERSION; + return __SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {}; +} +__name(getSentryCarrier, "getSentryCarrier"); +const objectToString$4 = Object.prototype.toString; +function isError(wat) { + switch (objectToString$4.call(wat)) { + case "[object Error]": + case "[object Exception]": + case "[object DOMException]": + case "[object WebAssembly.Exception]": + return true; + default: + return isInstanceOf(wat, Error); + } +} +__name(isError, "isError"); +function isBuiltin(wat, className) { + return objectToString$4.call(wat) === `[object ${className}]`; +} +__name(isBuiltin, "isBuiltin"); +function isErrorEvent$2(wat) { + return isBuiltin(wat, "ErrorEvent"); +} +__name(isErrorEvent$2, "isErrorEvent$2"); +function isDOMError(wat) { + return isBuiltin(wat, "DOMError"); +} +__name(isDOMError, "isDOMError"); +function isDOMException(wat) { + return isBuiltin(wat, "DOMException"); +} +__name(isDOMException, "isDOMException"); +function isString$a(wat) { + return isBuiltin(wat, "String"); +} +__name(isString$a, "isString$a"); +function isParameterizedString(wat) { + return typeof wat === "object" && wat !== null && "__sentry_template_string__" in wat && "__sentry_template_values__" in wat; +} +__name(isParameterizedString, "isParameterizedString"); +function isPrimitive(wat) { + return wat === null || isParameterizedString(wat) || typeof wat !== "object" && typeof wat !== "function"; +} +__name(isPrimitive, "isPrimitive"); +function isPlainObject$5(wat) { + return isBuiltin(wat, "Object"); +} +__name(isPlainObject$5, "isPlainObject$5"); +function isEvent(wat) { + return typeof Event !== "undefined" && isInstanceOf(wat, Event); +} +__name(isEvent, "isEvent"); +function isElement$3(wat) { + return typeof Element !== "undefined" && isInstanceOf(wat, Element); +} +__name(isElement$3, "isElement$3"); +function isRegExp$5(wat) { + return isBuiltin(wat, "RegExp"); +} +__name(isRegExp$5, "isRegExp$5"); +function isThenable$1(wat) { + return Boolean(wat && wat.then && typeof wat.then === "function"); +} +__name(isThenable$1, "isThenable$1"); +function isSyntheticEvent(wat) { + return isPlainObject$5(wat) && "nativeEvent" in wat && "preventDefault" in wat && "stopPropagation" in wat; +} +__name(isSyntheticEvent, "isSyntheticEvent"); +function isInstanceOf(wat, base2) { + try { + return wat instanceof base2; + } catch (_e) { + return false; + } +} +__name(isInstanceOf, "isInstanceOf"); +function isVueViewModel(wat) { + return !!(typeof wat === "object" && wat !== null && (wat.__isVue || wat._isVue)); +} +__name(isVueViewModel, "isVueViewModel"); +const WINDOW$8 = GLOBAL_OBJ; +const DEFAULT_MAX_STRING_LENGTH = 80; +function htmlTreeAsString(elem, options4 = {}) { + if (!elem) { + return ""; + } + try { + let currentElem = elem; + const MAX_TRAVERSE_HEIGHT = 5; + const out = []; + let height = 0; + let len = 0; + const separator = " > "; + const sepLength = separator.length; + let nextStr; + const keyAttrs = Array.isArray(options4) ? options4 : options4.keyAttrs; + const maxStringLength = !Array.isArray(options4) && options4.maxStringLength || DEFAULT_MAX_STRING_LENGTH; + while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) { + nextStr = _htmlElementAsString(currentElem, keyAttrs); + if (nextStr === "html" || height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength) { + break; + } + out.push(nextStr); + len += nextStr.length; + currentElem = currentElem.parentNode; + } + return out.reverse().join(separator); + } catch (_oO) { + return ""; + } +} +__name(htmlTreeAsString, "htmlTreeAsString"); +function _htmlElementAsString(el, keyAttrs) { + const elem = el; + const out = []; + if (!elem || !elem.tagName) { + return ""; + } + if (WINDOW$8.HTMLElement) { + if (elem instanceof HTMLElement && elem.dataset) { + if (elem.dataset["sentryComponent"]) { + return elem.dataset["sentryComponent"]; + } + if (elem.dataset["sentryElement"]) { + return elem.dataset["sentryElement"]; + } + } + } + out.push(elem.tagName.toLowerCase()); + const keyAttrPairs = keyAttrs && keyAttrs.length ? keyAttrs.filter((keyAttr) => elem.getAttribute(keyAttr)).map((keyAttr) => [keyAttr, elem.getAttribute(keyAttr)]) : null; + if (keyAttrPairs && keyAttrPairs.length) { + keyAttrPairs.forEach((keyAttrPair) => { + out.push(`[${keyAttrPair[0]}="${keyAttrPair[1]}"]`); + }); + } else { + if (elem.id) { + out.push(`#${elem.id}`); + } + const className = elem.className; + if (className && isString$a(className)) { + const classes2 = className.split(/\s+/); + for (const c2 of classes2) { + out.push(`.${c2}`); + } + } + } + const allowedAttrs = ["aria-label", "type", "name", "title", "alt"]; + for (const k2 of allowedAttrs) { + const attr = elem.getAttribute(k2); + if (attr) { + out.push(`[${k2}="${attr}"]`); + } + } + return out.join(""); +} +__name(_htmlElementAsString, "_htmlElementAsString"); +function getLocationHref() { + try { + return WINDOW$8.document.location.href; + } catch (oO) { + return ""; + } +} +__name(getLocationHref, "getLocationHref"); +function getDomElement(selector) { + if (WINDOW$8.document && WINDOW$8.document.querySelector) { + return WINDOW$8.document.querySelector(selector); + } + return null; +} +__name(getDomElement, "getDomElement"); +function getComponentName$1(elem) { + if (!WINDOW$8.HTMLElement) { + return null; + } + let currentElem = elem; + const MAX_TRAVERSE_HEIGHT = 5; + for (let i2 = 0; i2 < MAX_TRAVERSE_HEIGHT; i2++) { + if (!currentElem) { + return null; + } + if (currentElem instanceof HTMLElement) { + if (currentElem.dataset["sentryComponent"]) { + return currentElem.dataset["sentryComponent"]; + } + if (currentElem.dataset["sentryElement"]) { + return currentElem.dataset["sentryElement"]; + } + } + currentElem = currentElem.parentNode; + } + return null; +} +__name(getComponentName$1, "getComponentName$1"); +function truncate(str, max = 0) { + if (typeof str !== "string" || max === 0) { + return str; + } + return str.length <= max ? str : `${str.slice(0, max)}...`; +} +__name(truncate, "truncate"); +function snipLine(line, colno) { + let newLine = line; + const lineLength = newLine.length; + if (lineLength <= 150) { + return newLine; + } + if (colno > lineLength) { + colno = lineLength; + } + let start2 = Math.max(colno - 60, 0); + if (start2 < 5) { + start2 = 0; + } + let end = Math.min(start2 + 140, lineLength); + if (end > lineLength - 5) { + end = lineLength; + } + if (end === lineLength) { + start2 = Math.max(end - 140, 0); + } + newLine = newLine.slice(start2, end); + if (start2 > 0) { + newLine = `'{snip} ${newLine}`; + } + if (end < lineLength) { + newLine += " {snip}"; + } + return newLine; +} +__name(snipLine, "snipLine"); +function safeJoin(input, delimiter2) { + if (!Array.isArray(input)) { + return ""; + } + const output = []; + for (let i2 = 0; i2 < input.length; i2++) { + const value4 = input[i2]; + try { + if (isVueViewModel(value4)) { + output.push("[VueViewModel]"); + } else { + output.push(String(value4)); + } + } catch (e2) { + output.push("[value cannot be serialized]"); + } + } + return output.join(delimiter2); +} +__name(safeJoin, "safeJoin"); +function isMatchingPattern(value4, pattern, requireExactStringMatch = false) { + if (!isString$a(value4)) { + return false; + } + if (isRegExp$5(pattern)) { + return pattern.test(value4); + } + if (isString$a(pattern)) { + return requireExactStringMatch ? value4 === pattern : value4.includes(pattern); + } + return false; +} +__name(isMatchingPattern, "isMatchingPattern"); +function stringMatchesSomePattern(testString, patterns = [], requireExactStringMatch = false) { + return patterns.some((pattern) => isMatchingPattern(testString, pattern, requireExactStringMatch)); +} +__name(stringMatchesSomePattern, "stringMatchesSomePattern"); +function fill(source, name2, replacementFactory) { + if (!(name2 in source)) { + return; + } + const original = source[name2]; + const wrapped = replacementFactory(original); + if (typeof wrapped === "function") { + markFunctionWrapped(wrapped, original); + } + try { + source[name2] = wrapped; + } catch (e2) { + DEBUG_BUILD$5 && logger$2.log(`Failed to replace method "${name2}" in object`, source); + } +} +__name(fill, "fill"); +function addNonEnumerableProperty(obj, name2, value4) { + try { + Object.defineProperty(obj, name2, { + // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it + value: value4, + writable: true, + configurable: true + }); + } catch (o_O) { + DEBUG_BUILD$5 && logger$2.log(`Failed to add non-enumerable property "${name2}" to object`, obj); + } +} +__name(addNonEnumerableProperty, "addNonEnumerableProperty"); +function markFunctionWrapped(wrapped, original) { + try { + const proto = original.prototype || {}; + wrapped.prototype = original.prototype = proto; + addNonEnumerableProperty(wrapped, "__sentry_original__", original); + } catch (o_O) { + } +} +__name(markFunctionWrapped, "markFunctionWrapped"); +function getOriginalFunction(func) { + return func.__sentry_original__; +} +__name(getOriginalFunction, "getOriginalFunction"); +function urlEncode(object) { + return Object.entries(object).map(([key, value4]) => `${encodeURIComponent(key)}=${encodeURIComponent(value4)}`).join("&"); +} +__name(urlEncode, "urlEncode"); +function convertToPlainObject(value4) { + if (isError(value4)) { + return { + message: value4.message, + name: value4.name, + stack: value4.stack, + ...getOwnProperties(value4) + }; + } else if (isEvent(value4)) { + const newObj = { + type: value4.type, + target: serializeEventTarget(value4.target), + currentTarget: serializeEventTarget(value4.currentTarget), + ...getOwnProperties(value4) + }; + if (typeof CustomEvent !== "undefined" && isInstanceOf(value4, CustomEvent)) { + newObj.detail = value4.detail; + } + return newObj; + } else { + return value4; + } +} +__name(convertToPlainObject, "convertToPlainObject"); +function serializeEventTarget(target2) { + try { + return isElement$3(target2) ? htmlTreeAsString(target2) : Object.prototype.toString.call(target2); + } catch (_oO) { + return ""; + } +} +__name(serializeEventTarget, "serializeEventTarget"); +function getOwnProperties(obj) { + if (typeof obj === "object" && obj !== null) { + const extractedProps = {}; + for (const property in obj) { + if (Object.prototype.hasOwnProperty.call(obj, property)) { + extractedProps[property] = obj[property]; + } + } + return extractedProps; + } else { + return {}; + } +} +__name(getOwnProperties, "getOwnProperties"); +function extractExceptionKeysForMessage(exception, maxLength = 40) { + const keys2 = Object.keys(convertToPlainObject(exception)); + keys2.sort(); + const firstKey = keys2[0]; + if (!firstKey) { + return "[object has no keys]"; + } + if (firstKey.length >= maxLength) { + return truncate(firstKey, maxLength); + } + for (let includedKeys = keys2.length; includedKeys > 0; includedKeys--) { + const serialized = keys2.slice(0, includedKeys).join(", "); + if (serialized.length > maxLength) { + continue; + } + if (includedKeys === keys2.length) { + return serialized; + } + return truncate(serialized, maxLength); + } + return ""; +} +__name(extractExceptionKeysForMessage, "extractExceptionKeysForMessage"); +function dropUndefinedKeys(inputValue) { + const memoizationMap = /* @__PURE__ */ new Map(); + return _dropUndefinedKeys(inputValue, memoizationMap); +} +__name(dropUndefinedKeys, "dropUndefinedKeys"); +function _dropUndefinedKeys(inputValue, memoizationMap) { + if (isPojo(inputValue)) { + const memoVal = memoizationMap.get(inputValue); + if (memoVal !== void 0) { + return memoVal; + } + const returnValue = {}; + memoizationMap.set(inputValue, returnValue); + for (const key of Object.getOwnPropertyNames(inputValue)) { + if (typeof inputValue[key] !== "undefined") { + returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap); + } + } + return returnValue; + } + if (Array.isArray(inputValue)) { + const memoVal = memoizationMap.get(inputValue); + if (memoVal !== void 0) { + return memoVal; + } + const returnValue = []; + memoizationMap.set(inputValue, returnValue); + inputValue.forEach((item3) => { + returnValue.push(_dropUndefinedKeys(item3, memoizationMap)); + }); + return returnValue; + } + return inputValue; +} +__name(_dropUndefinedKeys, "_dropUndefinedKeys"); +function isPojo(input) { + if (!isPlainObject$5(input)) { + return false; + } + try { + const name2 = Object.getPrototypeOf(input).constructor.name; + return !name2 || name2 === "Object"; + } catch (e2) { + return true; + } +} +__name(isPojo, "isPojo"); +function objectify(wat) { + let objectified; + switch (true) { + case wat == void 0: + objectified = new String(wat); + break; + case (typeof wat === "symbol" || typeof wat === "bigint"): + objectified = Object(wat); + break; + case isPrimitive(wat): + objectified = new wat.constructor(wat); + break; + default: + objectified = wat; + break; + } + return objectified; +} +__name(objectify, "objectify"); +const ONE_SECOND_IN_MS = 1e3; +function dateTimestampInSeconds() { + return Date.now() / ONE_SECOND_IN_MS; +} +__name(dateTimestampInSeconds, "dateTimestampInSeconds"); +function createUnixTimestampInSecondsFunc() { + const { performance: performance2 } = GLOBAL_OBJ; + if (!performance2 || !performance2.now) { + return dateTimestampInSeconds; + } + const approxStartingTimeOrigin = Date.now() - performance2.now(); + const timeOrigin = performance2.timeOrigin == void 0 ? approxStartingTimeOrigin : performance2.timeOrigin; + return () => { + return (timeOrigin + performance2.now()) / ONE_SECOND_IN_MS; + }; +} +__name(createUnixTimestampInSecondsFunc, "createUnixTimestampInSecondsFunc"); +const timestampInSeconds = createUnixTimestampInSecondsFunc(); +let _browserPerformanceTimeOriginMode; +const browserPerformanceTimeOrigin = (() => { + const { performance: performance2 } = GLOBAL_OBJ; + if (!performance2 || !performance2.now) { + _browserPerformanceTimeOriginMode = "none"; + return void 0; + } + const threshold = 3600 * 1e3; + const performanceNow = performance2.now(); + const dateNow = Date.now(); + const timeOriginDelta = performance2.timeOrigin ? Math.abs(performance2.timeOrigin + performanceNow - dateNow) : threshold; + const timeOriginIsReliable = timeOriginDelta < threshold; + const navigationStart = performance2.timing && performance2.timing.navigationStart; + const hasNavigationStart = typeof navigationStart === "number"; + const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold; + const navigationStartIsReliable = navigationStartDelta < threshold; + if (timeOriginIsReliable || navigationStartIsReliable) { + if (timeOriginDelta <= navigationStartDelta) { + _browserPerformanceTimeOriginMode = "timeOrigin"; + return performance2.timeOrigin; + } else { + _browserPerformanceTimeOriginMode = "navigationStart"; + return navigationStart; + } + } + _browserPerformanceTimeOriginMode = "dateNow"; + return dateNow; +})(); +function uuid4() { + const gbl = GLOBAL_OBJ; + const crypto = gbl.crypto || gbl.msCrypto; + let getRandomByte = /* @__PURE__ */ __name(() => Math.random() * 16, "getRandomByte"); + try { + if (crypto && crypto.randomUUID) { + return crypto.randomUUID().replace(/-/g, ""); + } + if (crypto && crypto.getRandomValues) { + getRandomByte = /* @__PURE__ */ __name(() => { + const typedArray = new Uint8Array(1); + crypto.getRandomValues(typedArray); + return typedArray[0]; + }, "getRandomByte"); + } + } catch (_2) { + } + return ("10000000100040008000" + 1e11).replace( + /[018]/g, + (c2) => ( + // eslint-disable-next-line no-bitwise + (c2 ^ (getRandomByte() & 15) >> c2 / 4).toString(16) + ) + ); +} +__name(uuid4, "uuid4"); +function getFirstException(event) { + return event.exception && event.exception.values ? event.exception.values[0] : void 0; +} +__name(getFirstException, "getFirstException"); +function getEventDescription(event) { + const { message: message3, event_id: eventId } = event; + if (message3) { + return message3; + } + const firstException = getFirstException(event); + if (firstException) { + if (firstException.type && firstException.value) { + return `${firstException.type}: ${firstException.value}`; + } + return firstException.type || firstException.value || eventId || ""; + } + return eventId || ""; +} +__name(getEventDescription, "getEventDescription"); +function addExceptionTypeValue(event, value4, type) { + const exception = event.exception = event.exception || {}; + const values = exception.values = exception.values || []; + const firstException = values[0] = values[0] || {}; + if (!firstException.value) { + firstException.value = value4 || ""; + } + if (!firstException.type) { + firstException.type = type || "Error"; + } +} +__name(addExceptionTypeValue, "addExceptionTypeValue"); +function addExceptionMechanism(event, newMechanism) { + const firstException = getFirstException(event); + if (!firstException) { + return; + } + const defaultMechanism = { type: "generic", handled: true }; + const currentMechanism = firstException.mechanism; + firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism }; + if (newMechanism && "data" in newMechanism) { + const mergedData = { ...currentMechanism && currentMechanism.data, ...newMechanism.data }; + firstException.mechanism.data = mergedData; + } +} +__name(addExceptionMechanism, "addExceptionMechanism"); +const SEMVER_REGEXP = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; +function _parseInt(input) { + return parseInt(input || "", 10); +} +__name(_parseInt, "_parseInt"); +function parseSemver(input) { + const match2 = input.match(SEMVER_REGEXP) || []; + const major = _parseInt(match2[1]); + const minor = _parseInt(match2[2]); + const patch2 = _parseInt(match2[3]); + return { + buildmetadata: match2[5], + major: isNaN(major) ? void 0 : major, + minor: isNaN(minor) ? void 0 : minor, + patch: isNaN(patch2) ? void 0 : patch2, + prerelease: match2[4] + }; +} +__name(parseSemver, "parseSemver"); +function addContextToFrame(lines, frame, linesOfContext = 5) { + if (frame.lineno === void 0) { + return; + } + const maxLines = lines.length; + const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0); + frame.pre_context = lines.slice(Math.max(0, sourceLine - linesOfContext), sourceLine).map((line) => snipLine(line, 0)); + const lineIndex = Math.min(maxLines - 1, sourceLine); + frame.context_line = snipLine(lines[lineIndex], frame.colno || 0); + frame.post_context = lines.slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext).map((line) => snipLine(line, 0)); +} +__name(addContextToFrame, "addContextToFrame"); +function checkOrSetAlreadyCaught(exception) { + if (isAlreadyCaptured(exception)) { + return true; + } + try { + addNonEnumerableProperty(exception, "__sentry_captured__", true); + } catch (err) { + } + return false; +} +__name(checkOrSetAlreadyCaught, "checkOrSetAlreadyCaught"); +function isAlreadyCaptured(exception) { + try { + return exception.__sentry_captured__; + } catch (e2) { + } +} +__name(isAlreadyCaptured, "isAlreadyCaptured"); +function arrayify(maybeArray) { + return Array.isArray(maybeArray) ? maybeArray : [maybeArray]; +} +__name(arrayify, "arrayify"); +var States; +(function(States2) { + const PENDING = 0; + States2[States2["PENDING"] = PENDING] = "PENDING"; + const RESOLVED = 1; + States2[States2["RESOLVED"] = RESOLVED] = "RESOLVED"; + const REJECTED = 2; + States2[States2["REJECTED"] = REJECTED] = "REJECTED"; +})(States || (States = {})); +function resolvedSyncPromise(value4) { + return new SyncPromise((resolve2) => { + resolve2(value4); + }); +} +__name(resolvedSyncPromise, "resolvedSyncPromise"); +function rejectedSyncPromise(reason) { + return new SyncPromise((_2, reject3) => { + reject3(reason); + }); +} +__name(rejectedSyncPromise, "rejectedSyncPromise"); +class SyncPromise { + static { + __name(this, "SyncPromise"); + } + constructor(executor) { + SyncPromise.prototype.__init.call(this); + SyncPromise.prototype.__init2.call(this); + SyncPromise.prototype.__init3.call(this); + SyncPromise.prototype.__init4.call(this); + this._state = States.PENDING; + this._handlers = []; + try { + executor(this._resolve, this._reject); + } catch (e2) { + this._reject(e2); + } + } + /** JSDoc */ + then(onfulfilled, onrejected) { + return new SyncPromise((resolve2, reject3) => { + this._handlers.push([ + false, + (result) => { + if (!onfulfilled) { + resolve2(result); + } else { + try { + resolve2(onfulfilled(result)); + } catch (e2) { + reject3(e2); + } + } + }, + (reason) => { + if (!onrejected) { + reject3(reason); + } else { + try { + resolve2(onrejected(reason)); + } catch (e2) { + reject3(e2); + } + } + } + ]); + this._executeHandlers(); + }); + } + /** JSDoc */ + catch(onrejected) { + return this.then((val) => val, onrejected); + } + /** JSDoc */ + finally(onfinally) { + return new SyncPromise((resolve2, reject3) => { + let val; + let isRejected; + return this.then( + (value4) => { + isRejected = false; + val = value4; + if (onfinally) { + onfinally(); + } + }, + (reason) => { + isRejected = true; + val = reason; + if (onfinally) { + onfinally(); + } + } + ).then(() => { + if (isRejected) { + reject3(val); + return; + } + resolve2(val); + }); + }); + } + /** JSDoc */ + __init() { + this._resolve = (value4) => { + this._setResult(States.RESOLVED, value4); + }; + } + /** JSDoc */ + __init2() { + this._reject = (reason) => { + this._setResult(States.REJECTED, reason); + }; + } + /** JSDoc */ + __init3() { + this._setResult = (state, value4) => { + if (this._state !== States.PENDING) { + return; + } + if (isThenable$1(value4)) { + void value4.then(this._resolve, this._reject); + return; + } + this._state = state; + this._value = value4; + this._executeHandlers(); + }; + } + /** JSDoc */ + __init4() { + this._executeHandlers = () => { + if (this._state === States.PENDING) { + return; + } + const cachedHandlers = this._handlers.slice(); + this._handlers = []; + cachedHandlers.forEach((handler12) => { + if (handler12[0]) { + return; + } + if (this._state === States.RESOLVED) { + handler12[1](this._value); + } + if (this._state === States.REJECTED) { + handler12[2](this._value); + } + handler12[0] = true; + }); + }; + } +} +function makeSession$1(context) { + const startingTime = timestampInSeconds(); + const session = { + sid: uuid4(), + init: true, + timestamp: startingTime, + started: startingTime, + duration: 0, + status: "ok", + errors: 0, + ignoreDuration: false, + toJSON: /* @__PURE__ */ __name(() => sessionToJSON(session), "toJSON") + }; + if (context) { + updateSession(session, context); + } + return session; +} +__name(makeSession$1, "makeSession$1"); +function updateSession(session, context = {}) { + if (context.user) { + if (!session.ipAddress && context.user.ip_address) { + session.ipAddress = context.user.ip_address; + } + if (!session.did && !context.did) { + session.did = context.user.id || context.user.email || context.user.username; + } + } + session.timestamp = context.timestamp || timestampInSeconds(); + if (context.abnormal_mechanism) { + session.abnormal_mechanism = context.abnormal_mechanism; + } + if (context.ignoreDuration) { + session.ignoreDuration = context.ignoreDuration; + } + if (context.sid) { + session.sid = context.sid.length === 32 ? context.sid : uuid4(); + } + if (context.init !== void 0) { + session.init = context.init; + } + if (!session.did && context.did) { + session.did = `${context.did}`; + } + if (typeof context.started === "number") { + session.started = context.started; + } + if (session.ignoreDuration) { + session.duration = void 0; + } else if (typeof context.duration === "number") { + session.duration = context.duration; + } else { + const duration = session.timestamp - session.started; + session.duration = duration >= 0 ? duration : 0; + } + if (context.release) { + session.release = context.release; + } + if (context.environment) { + session.environment = context.environment; + } + if (!session.ipAddress && context.ipAddress) { + session.ipAddress = context.ipAddress; + } + if (!session.userAgent && context.userAgent) { + session.userAgent = context.userAgent; + } + if (typeof context.errors === "number") { + session.errors = context.errors; + } + if (context.status) { + session.status = context.status; + } +} +__name(updateSession, "updateSession"); +function closeSession(session, status) { + let context = {}; + if (status) { + context = { status }; + } else if (session.status === "ok") { + context = { status: "exited" }; + } + updateSession(session, context); +} +__name(closeSession, "closeSession"); +function sessionToJSON(session) { + return dropUndefinedKeys({ + sid: `${session.sid}`, + init: session.init, + // Make sure that sec is converted to ms for date constructor + started: new Date(session.started * 1e3).toISOString(), + timestamp: new Date(session.timestamp * 1e3).toISOString(), + status: session.status, + errors: session.errors, + did: typeof session.did === "number" || typeof session.did === "string" ? `${session.did}` : void 0, + duration: session.duration, + abnormal_mechanism: session.abnormal_mechanism, + attrs: { + release: session.release, + environment: session.environment, + ip_address: session.ipAddress, + user_agent: session.userAgent + } + }); +} +__name(sessionToJSON, "sessionToJSON"); +function generatePropagationContext() { + return { + traceId: generateTraceId(), + spanId: generateSpanId() + }; +} +__name(generatePropagationContext, "generatePropagationContext"); +function generateTraceId() { + return uuid4(); +} +__name(generateTraceId, "generateTraceId"); +function generateSpanId() { + return uuid4().substring(16); +} +__name(generateSpanId, "generateSpanId"); +function merge$2(initialObj, mergeObj, levels = 2) { + if (!mergeObj || typeof mergeObj !== "object" || levels <= 0) { + return mergeObj; + } + if (initialObj && mergeObj && Object.keys(mergeObj).length === 0) { + return initialObj; + } + const output = { ...initialObj }; + for (const key in mergeObj) { + if (Object.prototype.hasOwnProperty.call(mergeObj, key)) { + output[key] = merge$2(output[key], mergeObj[key], levels - 1); + } + } + return output; +} +__name(merge$2, "merge$2"); +const SCOPE_SPAN_FIELD = "_sentrySpan"; +function _setSpanForScope(scope, span) { + if (span) { + addNonEnumerableProperty(scope, SCOPE_SPAN_FIELD, span); + } else { + delete scope[SCOPE_SPAN_FIELD]; + } +} +__name(_setSpanForScope, "_setSpanForScope"); +function _getSpanForScope(scope) { + return scope[SCOPE_SPAN_FIELD]; +} +__name(_getSpanForScope, "_getSpanForScope"); +const DEFAULT_MAX_BREADCRUMBS = 100; +class ScopeClass { + static { + __name(this, "ScopeClass"); + } + /** Flag if notifying is happening. */ + /** Callback for client to receive scope changes. */ + /** Callback list that will be called during event processing. */ + /** Array of breadcrumbs. */ + /** User */ + /** Tags */ + /** Extra */ + /** Contexts */ + /** Attachments */ + /** Propagation Context for distributed tracing */ + /** + * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get + * sent to Sentry + */ + /** Fingerprint */ + /** Severity */ + /** + * Transaction Name + * + * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects. + * It's purpose is to assign a transaction to the scope that's added to non-transaction events. + */ + /** Session */ + /** Request Mode Session Status */ + // eslint-disable-next-line deprecation/deprecation + /** The client on this scope */ + /** Contains the last event id of a captured event. */ + // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method. + constructor() { + this._notifyingListeners = false; + this._scopeListeners = []; + this._eventProcessors = []; + this._breadcrumbs = []; + this._attachments = []; + this._user = {}; + this._tags = {}; + this._extra = {}; + this._contexts = {}; + this._sdkProcessingMetadata = {}; + this._propagationContext = { + traceId: generateTraceId(), + spanId: generateSpanId() + }; + } + /** + * @inheritDoc + */ + clone() { + const newScope = new ScopeClass(); + newScope._breadcrumbs = [...this._breadcrumbs]; + newScope._tags = { ...this._tags }; + newScope._extra = { ...this._extra }; + newScope._contexts = { ...this._contexts }; + if (this._contexts.flags) { + newScope._contexts.flags = { + values: [...this._contexts.flags.values] + }; + } + newScope._user = this._user; + newScope._level = this._level; + newScope._session = this._session; + newScope._transactionName = this._transactionName; + newScope._fingerprint = this._fingerprint; + newScope._eventProcessors = [...this._eventProcessors]; + newScope._requestSession = this._requestSession; + newScope._attachments = [...this._attachments]; + newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata }; + newScope._propagationContext = { ...this._propagationContext }; + newScope._client = this._client; + newScope._lastEventId = this._lastEventId; + _setSpanForScope(newScope, _getSpanForScope(this)); + return newScope; + } + /** + * @inheritDoc + */ + setClient(client) { + this._client = client; + } + /** + * @inheritDoc + */ + setLastEventId(lastEventId2) { + this._lastEventId = lastEventId2; + } + /** + * @inheritDoc + */ + getClient() { + return this._client; + } + /** + * @inheritDoc + */ + lastEventId() { + return this._lastEventId; + } + /** + * @inheritDoc + */ + addScopeListener(callback) { + this._scopeListeners.push(callback); + } + /** + * @inheritDoc + */ + addEventProcessor(callback) { + this._eventProcessors.push(callback); + return this; + } + /** + * @inheritDoc + */ + setUser(user) { + this._user = user || { + email: void 0, + id: void 0, + ip_address: void 0, + username: void 0 + }; + if (this._session) { + updateSession(this._session, { user }); + } + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + getUser() { + return this._user; + } + /** + * @inheritDoc + */ + // eslint-disable-next-line deprecation/deprecation + getRequestSession() { + return this._requestSession; + } + /** + * @inheritDoc + */ + // eslint-disable-next-line deprecation/deprecation + setRequestSession(requestSession) { + this._requestSession = requestSession; + return this; + } + /** + * @inheritDoc + */ + setTags(tags) { + this._tags = { + ...this._tags, + ...tags + }; + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + setTag(key, value4) { + this._tags = { ...this._tags, [key]: value4 }; + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + setExtras(extras) { + this._extra = { + ...this._extra, + ...extras + }; + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + setExtra(key, extra) { + this._extra = { ...this._extra, [key]: extra }; + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + setFingerprint(fingerprint) { + this._fingerprint = fingerprint; + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + setLevel(level) { + this._level = level; + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + setTransactionName(name2) { + this._transactionName = name2; + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + setContext(key, context) { + if (context === null) { + delete this._contexts[key]; + } else { + this._contexts[key] = context; + } + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + setSession(session) { + if (!session) { + delete this._session; + } else { + this._session = session; + } + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + getSession() { + return this._session; + } + /** + * @inheritDoc + */ + update(captureContext) { + if (!captureContext) { + return this; + } + const scopeToMerge = typeof captureContext === "function" ? captureContext(this) : captureContext; + const [scopeInstance, requestSession] = scopeToMerge instanceof Scope ? ( + // eslint-disable-next-line deprecation/deprecation + [scopeToMerge.getScopeData(), scopeToMerge.getRequestSession()] + ) : isPlainObject$5(scopeToMerge) ? [captureContext, captureContext.requestSession] : []; + const { tags, extra, user, contexts, level, fingerprint = [], propagationContext } = scopeInstance || {}; + this._tags = { ...this._tags, ...tags }; + this._extra = { ...this._extra, ...extra }; + this._contexts = { ...this._contexts, ...contexts }; + if (user && Object.keys(user).length) { + this._user = user; + } + if (level) { + this._level = level; + } + if (fingerprint.length) { + this._fingerprint = fingerprint; + } + if (propagationContext) { + this._propagationContext = propagationContext; + } + if (requestSession) { + this._requestSession = requestSession; + } + return this; + } + /** + * @inheritDoc + */ + clear() { + this._breadcrumbs = []; + this._tags = {}; + this._extra = {}; + this._user = {}; + this._contexts = {}; + this._level = void 0; + this._transactionName = void 0; + this._fingerprint = void 0; + this._requestSession = void 0; + this._session = void 0; + _setSpanForScope(this, void 0); + this._attachments = []; + this.setPropagationContext({ traceId: generateTraceId() }); + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + addBreadcrumb(breadcrumb, maxBreadcrumbs) { + const maxCrumbs = typeof maxBreadcrumbs === "number" ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS; + if (maxCrumbs <= 0) { + return this; + } + const mergedBreadcrumb = { + timestamp: dateTimestampInSeconds(), + ...breadcrumb + }; + const breadcrumbs = this._breadcrumbs; + breadcrumbs.push(mergedBreadcrumb); + this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs; + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + getLastBreadcrumb() { + return this._breadcrumbs[this._breadcrumbs.length - 1]; + } + /** + * @inheritDoc + */ + clearBreadcrumbs() { + this._breadcrumbs = []; + this._notifyScopeListeners(); + return this; + } + /** + * @inheritDoc + */ + addAttachment(attachment) { + this._attachments.push(attachment); + return this; + } + /** + * @inheritDoc + */ + clearAttachments() { + this._attachments = []; + return this; + } + /** @inheritDoc */ + getScopeData() { + return { + breadcrumbs: this._breadcrumbs, + attachments: this._attachments, + contexts: this._contexts, + tags: this._tags, + extra: this._extra, + user: this._user, + level: this._level, + fingerprint: this._fingerprint || [], + eventProcessors: this._eventProcessors, + propagationContext: this._propagationContext, + sdkProcessingMetadata: this._sdkProcessingMetadata, + transactionName: this._transactionName, + span: _getSpanForScope(this) + }; + } + /** + * @inheritDoc + */ + setSDKProcessingMetadata(newData) { + this._sdkProcessingMetadata = merge$2(this._sdkProcessingMetadata, newData, 2); + return this; + } + /** + * @inheritDoc + */ + setPropagationContext(context) { + this._propagationContext = { + // eslint-disable-next-line deprecation/deprecation + spanId: generateSpanId(), + ...context + }; + return this; + } + /** + * @inheritDoc + */ + getPropagationContext() { + return this._propagationContext; + } + /** + * @inheritDoc + */ + captureException(exception, hint) { + const eventId = hint && hint.event_id ? hint.event_id : uuid4(); + if (!this._client) { + logger$2.warn("No client configured on scope - will not capture exception!"); + return eventId; + } + const syntheticException = new Error("Sentry syntheticException"); + this._client.captureException( + exception, + { + originalException: exception, + syntheticException, + ...hint, + event_id: eventId + }, + this + ); + return eventId; + } + /** + * @inheritDoc + */ + captureMessage(message3, level, hint) { + const eventId = hint && hint.event_id ? hint.event_id : uuid4(); + if (!this._client) { + logger$2.warn("No client configured on scope - will not capture message!"); + return eventId; + } + const syntheticException = new Error(message3); + this._client.captureMessage( + message3, + level, + { + originalException: message3, + syntheticException, + ...hint, + event_id: eventId + }, + this + ); + return eventId; + } + /** + * @inheritDoc + */ + captureEvent(event, hint) { + const eventId = hint && hint.event_id ? hint.event_id : uuid4(); + if (!this._client) { + logger$2.warn("No client configured on scope - will not capture event!"); + return eventId; + } + this._client.captureEvent(event, { ...hint, event_id: eventId }, this); + return eventId; + } + /** + * This will be called on every set call. + */ + _notifyScopeListeners() { + if (!this._notifyingListeners) { + this._notifyingListeners = true; + this._scopeListeners.forEach((callback) => { + callback(this); + }); + this._notifyingListeners = false; + } + } +} +const Scope = ScopeClass; +function getDefaultCurrentScope() { + return getGlobalSingleton("defaultCurrentScope", () => new Scope()); +} +__name(getDefaultCurrentScope, "getDefaultCurrentScope"); +function getDefaultIsolationScope() { + return getGlobalSingleton("defaultIsolationScope", () => new Scope()); +} +__name(getDefaultIsolationScope, "getDefaultIsolationScope"); +class AsyncContextStack { + static { + __name(this, "AsyncContextStack"); + } + constructor(scope, isolationScope) { + let assignedScope; + if (!scope) { + assignedScope = new Scope(); + } else { + assignedScope = scope; + } + let assignedIsolationScope; + if (!isolationScope) { + assignedIsolationScope = new Scope(); + } else { + assignedIsolationScope = isolationScope; + } + this._stack = [{ scope: assignedScope }]; + this._isolationScope = assignedIsolationScope; + } + /** + * Fork a scope for the stack. + */ + withScope(callback) { + const scope = this._pushScope(); + let maybePromiseResult; + try { + maybePromiseResult = callback(scope); + } catch (e2) { + this._popScope(); + throw e2; + } + if (isThenable$1(maybePromiseResult)) { + return maybePromiseResult.then( + (res) => { + this._popScope(); + return res; + }, + (e2) => { + this._popScope(); + throw e2; + } + ); + } + this._popScope(); + return maybePromiseResult; + } + /** + * Get the client of the stack. + */ + getClient() { + return this.getStackTop().client; + } + /** + * Returns the scope of the top stack. + */ + getScope() { + return this.getStackTop().scope; + } + /** + * Get the isolation scope for the stack. + */ + getIsolationScope() { + return this._isolationScope; + } + /** + * Returns the topmost scope layer in the order domain > local > process. + */ + getStackTop() { + return this._stack[this._stack.length - 1]; + } + /** + * Push a scope to the stack. + */ + _pushScope() { + const scope = this.getScope().clone(); + this._stack.push({ + client: this.getClient(), + scope + }); + return scope; + } + /** + * Pop a scope from the stack. + */ + _popScope() { + if (this._stack.length <= 1) return false; + return !!this._stack.pop(); + } +} +function getAsyncContextStack() { + const registry = getMainCarrier(); + const sentry = getSentryCarrier(registry); + return sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()); +} +__name(getAsyncContextStack, "getAsyncContextStack"); +function withScope$1(callback) { + return getAsyncContextStack().withScope(callback); +} +__name(withScope$1, "withScope$1"); +function withSetScope(scope, callback) { + const stack2 = getAsyncContextStack(); + return stack2.withScope(() => { + stack2.getStackTop().scope = scope; + return callback(scope); + }); +} +__name(withSetScope, "withSetScope"); +function withIsolationScope$1(callback) { + return getAsyncContextStack().withScope(() => { + return callback(getAsyncContextStack().getIsolationScope()); + }); +} +__name(withIsolationScope$1, "withIsolationScope$1"); +function getStackAsyncContextStrategy() { + return { + withIsolationScope: withIsolationScope$1, + withScope: withScope$1, + withSetScope, + withSetIsolationScope: /* @__PURE__ */ __name((_isolationScope, callback) => { + return withIsolationScope$1(callback); + }, "withSetIsolationScope"), + getCurrentScope: /* @__PURE__ */ __name(() => getAsyncContextStack().getScope(), "getCurrentScope"), + getIsolationScope: /* @__PURE__ */ __name(() => getAsyncContextStack().getIsolationScope(), "getIsolationScope") + }; +} +__name(getStackAsyncContextStrategy, "getStackAsyncContextStrategy"); +function setAsyncContextStrategy(strategy) { + const registry = getMainCarrier(); + const sentry = getSentryCarrier(registry); + sentry.acs = strategy; +} +__name(setAsyncContextStrategy, "setAsyncContextStrategy"); +function getAsyncContextStrategy(carrier) { + const sentry = getSentryCarrier(carrier); + if (sentry.acs) { + return sentry.acs; + } + return getStackAsyncContextStrategy(); +} +__name(getAsyncContextStrategy, "getAsyncContextStrategy"); +function getCurrentScope$1() { + const carrier = getMainCarrier(); + const acs = getAsyncContextStrategy(carrier); + return acs.getCurrentScope(); +} +__name(getCurrentScope$1, "getCurrentScope$1"); +function getIsolationScope() { + const carrier = getMainCarrier(); + const acs = getAsyncContextStrategy(carrier); + return acs.getIsolationScope(); +} +__name(getIsolationScope, "getIsolationScope"); +function getGlobalScope() { + return getGlobalSingleton("globalScope", () => new Scope()); +} +__name(getGlobalScope, "getGlobalScope"); +function withScope(...rest) { + const carrier = getMainCarrier(); + const acs = getAsyncContextStrategy(carrier); + if (rest.length === 2) { + const [scope, callback] = rest; + if (!scope) { + return acs.withScope(callback); + } + return acs.withSetScope(scope, callback); + } + return acs.withScope(rest[0]); +} +__name(withScope, "withScope"); +function withIsolationScope(...rest) { + const carrier = getMainCarrier(); + const acs = getAsyncContextStrategy(carrier); + if (rest.length === 2) { + const [isolationScope, callback] = rest; + if (!isolationScope) { + return acs.withIsolationScope(callback); + } + return acs.withSetIsolationScope(isolationScope, callback); + } + return acs.withIsolationScope(rest[0]); +} +__name(withIsolationScope, "withIsolationScope"); +function getClient() { + return getCurrentScope$1().getClient(); +} +__name(getClient, "getClient"); +function getTraceContextFromScope(scope) { + const propagationContext = scope.getPropagationContext(); + const { traceId, spanId, parentSpanId } = propagationContext; + const traceContext = dropUndefinedKeys({ + trace_id: traceId, + span_id: spanId, + parent_span_id: parentSpanId + }); + return traceContext; +} +__name(getTraceContextFromScope, "getTraceContextFromScope"); +const METRICS_SPAN_FIELD = "_sentryMetrics"; +function getMetricSummaryJsonForSpan(span) { + const storage = span[METRICS_SPAN_FIELD]; + if (!storage) { + return void 0; + } + const output = {}; + for (const [, [exportKey, summary]] of storage) { + const arr = output[exportKey] || (output[exportKey] = []); + arr.push(dropUndefinedKeys(summary)); + } + return output; +} +__name(getMetricSummaryJsonForSpan, "getMetricSummaryJsonForSpan"); +function updateMetricSummaryOnSpan(span, metricType, sanitizedName, value4, unit, tags, bucketKey) { + const existingStorage = span[METRICS_SPAN_FIELD]; + const storage = existingStorage || (span[METRICS_SPAN_FIELD] = /* @__PURE__ */ new Map()); + const exportKey = `${metricType}:${sanitizedName}@${unit}`; + const bucketItem = storage.get(bucketKey); + if (bucketItem) { + const [, summary] = bucketItem; + storage.set(bucketKey, [ + exportKey, + { + min: Math.min(summary.min, value4), + max: Math.max(summary.max, value4), + count: summary.count += 1, + sum: summary.sum += value4, + tags: summary.tags + } + ]); + } else { + storage.set(bucketKey, [ + exportKey, + { + min: value4, + max: value4, + count: 1, + sum: value4, + tags + } + ]); + } +} +__name(updateMetricSummaryOnSpan, "updateMetricSummaryOnSpan"); +const SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = "sentry.source"; +const SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = "sentry.sample_rate"; +const SEMANTIC_ATTRIBUTE_SENTRY_OP = "sentry.op"; +const SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = "sentry.origin"; +const SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = "sentry.idle_span_finish_reason"; +const SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = "sentry.measurement_unit"; +const SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = "sentry.measurement_value"; +const SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME = "sentry.custom_span_name"; +const SEMANTIC_ATTRIBUTE_PROFILE_ID = "sentry.profile_id"; +const SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = "sentry.exclusive_time"; +const SEMANTIC_ATTRIBUTE_CACHE_HIT = "cache.hit"; +const SEMANTIC_ATTRIBUTE_CACHE_KEY = "cache.key"; +const SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = "cache.item_size"; +const SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD = "http.request.method"; +const SEMANTIC_ATTRIBUTE_URL_FULL = "url.full"; +const SPAN_STATUS_UNSET = 0; +const SPAN_STATUS_OK = 1; +const SPAN_STATUS_ERROR = 2; +function getSpanStatusFromHttpCode(httpStatus) { + if (httpStatus < 400 && httpStatus >= 100) { + return { code: SPAN_STATUS_OK }; + } + if (httpStatus >= 400 && httpStatus < 500) { + switch (httpStatus) { + case 401: + return { code: SPAN_STATUS_ERROR, message: "unauthenticated" }; + case 403: + return { code: SPAN_STATUS_ERROR, message: "permission_denied" }; + case 404: + return { code: SPAN_STATUS_ERROR, message: "not_found" }; + case 409: + return { code: SPAN_STATUS_ERROR, message: "already_exists" }; + case 413: + return { code: SPAN_STATUS_ERROR, message: "failed_precondition" }; + case 429: + return { code: SPAN_STATUS_ERROR, message: "resource_exhausted" }; + case 499: + return { code: SPAN_STATUS_ERROR, message: "cancelled" }; + default: + return { code: SPAN_STATUS_ERROR, message: "invalid_argument" }; + } + } + if (httpStatus >= 500 && httpStatus < 600) { + switch (httpStatus) { + case 501: + return { code: SPAN_STATUS_ERROR, message: "unimplemented" }; + case 503: + return { code: SPAN_STATUS_ERROR, message: "unavailable" }; + case 504: + return { code: SPAN_STATUS_ERROR, message: "deadline_exceeded" }; + default: + return { code: SPAN_STATUS_ERROR, message: "internal_error" }; + } + } + return { code: SPAN_STATUS_ERROR, message: "unknown_error" }; +} +__name(getSpanStatusFromHttpCode, "getSpanStatusFromHttpCode"); +function setHttpStatus(span, httpStatus) { + span.setAttribute("http.response.status_code", httpStatus); + const spanStatus = getSpanStatusFromHttpCode(httpStatus); + if (spanStatus.message !== "unknown_error") { + span.setStatus(spanStatus); + } +} +__name(setHttpStatus, "setHttpStatus"); +const BAGGAGE_HEADER_NAME = "baggage"; +const SENTRY_BAGGAGE_KEY_PREFIX = "sentry-"; +const SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/; +const MAX_BAGGAGE_STRING_LENGTH = 8192; +function baggageHeaderToDynamicSamplingContext(baggageHeader) { + const baggageObject = parseBaggageHeader(baggageHeader); + if (!baggageObject) { + return void 0; + } + const dynamicSamplingContext = Object.entries(baggageObject).reduce((acc, [key, value4]) => { + if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) { + const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length); + acc[nonPrefixedKey] = value4; + } + return acc; + }, {}); + if (Object.keys(dynamicSamplingContext).length > 0) { + return dynamicSamplingContext; + } else { + return void 0; + } +} +__name(baggageHeaderToDynamicSamplingContext, "baggageHeaderToDynamicSamplingContext"); +function dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext) { + if (!dynamicSamplingContext) { + return void 0; + } + const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce( + (acc, [dscKey, dscValue]) => { + if (dscValue) { + acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue; + } + return acc; + }, + {} + ); + return objectToBaggageHeader(sentryPrefixedDSC); +} +__name(dynamicSamplingContextToSentryBaggageHeader, "dynamicSamplingContextToSentryBaggageHeader"); +function parseBaggageHeader(baggageHeader) { + if (!baggageHeader || !isString$a(baggageHeader) && !Array.isArray(baggageHeader)) { + return void 0; + } + if (Array.isArray(baggageHeader)) { + return baggageHeader.reduce((acc, curr) => { + const currBaggageObject = baggageHeaderToObject(curr); + Object.entries(currBaggageObject).forEach(([key, value4]) => { + acc[key] = value4; + }); + return acc; + }, {}); + } + return baggageHeaderToObject(baggageHeader); +} +__name(parseBaggageHeader, "parseBaggageHeader"); +function baggageHeaderToObject(baggageHeader) { + return baggageHeader.split(",").map((baggageEntry) => baggageEntry.split("=").map((keyOrValue) => decodeURIComponent(keyOrValue.trim()))).reduce((acc, [key, value4]) => { + if (key && value4) { + acc[key] = value4; + } + return acc; + }, {}); +} +__name(baggageHeaderToObject, "baggageHeaderToObject"); +function objectToBaggageHeader(object) { + if (Object.keys(object).length === 0) { + return void 0; + } + return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => { + const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`; + const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`; + if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) { + DEBUG_BUILD$5 && logger$2.warn( + `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.` + ); + return baggageHeader; + } else { + return newBaggageHeader; + } + }, ""); +} +__name(objectToBaggageHeader, "objectToBaggageHeader"); +const TRACEPARENT_REGEXP = new RegExp( + "^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$" + // whitespace +); +function extractTraceparentData(traceparent) { + if (!traceparent) { + return void 0; + } + const matches2 = traceparent.match(TRACEPARENT_REGEXP); + if (!matches2) { + return void 0; + } + let parentSampled; + if (matches2[3] === "1") { + parentSampled = true; + } else if (matches2[3] === "0") { + parentSampled = false; + } + return { + traceId: matches2[1], + parentSampled, + parentSpanId: matches2[2] + }; +} +__name(extractTraceparentData, "extractTraceparentData"); +function propagationContextFromHeaders(sentryTrace, baggage) { + const traceparentData = extractTraceparentData(sentryTrace); + const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage); + if (!traceparentData || !traceparentData.traceId) { + return { traceId: generateTraceId(), spanId: generateSpanId() }; + } + const { traceId, parentSpanId, parentSampled } = traceparentData; + const virtualSpanId = generateSpanId(); + return { + traceId, + parentSpanId, + spanId: virtualSpanId, + sampled: parentSampled, + dsc: dynamicSamplingContext || {} + // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it + }; +} +__name(propagationContextFromHeaders, "propagationContextFromHeaders"); +function generateSentryTraceHeader(traceId = generateTraceId(), spanId = generateSpanId(), sampled) { + let sampledString = ""; + if (sampled !== void 0) { + sampledString = sampled ? "-1" : "-0"; + } + return `${traceId}-${spanId}${sampledString}`; +} +__name(generateSentryTraceHeader, "generateSentryTraceHeader"); +const TRACE_FLAG_NONE = 0; +const TRACE_FLAG_SAMPLED = 1; +let hasShownSpanDropWarning = false; +function spanToTransactionTraceContext(span) { + const { spanId: span_id, traceId: trace_id } = span.spanContext(); + const { data: data26, op, parent_span_id, status, origin: origin2 } = spanToJSON(span); + return dropUndefinedKeys({ + parent_span_id, + span_id, + trace_id, + data: data26, + op, + status, + origin: origin2 + }); +} +__name(spanToTransactionTraceContext, "spanToTransactionTraceContext"); +function spanToTraceContext(span) { + const { spanId, traceId: trace_id, isRemote } = span.spanContext(); + const parent_span_id = isRemote ? spanId : spanToJSON(span).parent_span_id; + const span_id = isRemote ? generateSpanId() : spanId; + return dropUndefinedKeys({ + parent_span_id, + span_id, + trace_id + }); +} +__name(spanToTraceContext, "spanToTraceContext"); +function spanToTraceHeader(span) { + const { traceId, spanId } = span.spanContext(); + const sampled = spanIsSampled(span); + return generateSentryTraceHeader(traceId, spanId, sampled); +} +__name(spanToTraceHeader, "spanToTraceHeader"); +function spanTimeInputToSeconds(input) { + if (typeof input === "number") { + return ensureTimestampInSeconds(input); + } + if (Array.isArray(input)) { + return input[0] + input[1] / 1e9; + } + if (input instanceof Date) { + return ensureTimestampInSeconds(input.getTime()); + } + return timestampInSeconds(); +} +__name(spanTimeInputToSeconds, "spanTimeInputToSeconds"); +function ensureTimestampInSeconds(timestamp2) { + const isMs = timestamp2 > 9999999999; + return isMs ? timestamp2 / 1e3 : timestamp2; +} +__name(ensureTimestampInSeconds, "ensureTimestampInSeconds"); +function spanToJSON(span) { + if (spanIsSentrySpan(span)) { + return span.getSpanJSON(); + } + try { + const { spanId: span_id, traceId: trace_id } = span.spanContext(); + if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) { + const { attributes, startTime, name: name2, endTime, parentSpanId, status } = span; + return dropUndefinedKeys({ + span_id, + trace_id, + data: attributes, + description: name2, + parent_span_id: parentSpanId, + start_timestamp: spanTimeInputToSeconds(startTime), + // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time + timestamp: spanTimeInputToSeconds(endTime) || void 0, + status: getStatusMessage(status), + op: attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP], + origin: attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN], + _metrics_summary: getMetricSummaryJsonForSpan(span) + }); + } + return { + span_id, + trace_id + }; + } catch (e2) { + return {}; + } +} +__name(spanToJSON, "spanToJSON"); +function spanIsOpenTelemetrySdkTraceBaseSpan(span) { + const castSpan = span; + return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status; +} +__name(spanIsOpenTelemetrySdkTraceBaseSpan, "spanIsOpenTelemetrySdkTraceBaseSpan"); +function spanIsSentrySpan(span) { + return typeof span.getSpanJSON === "function"; +} +__name(spanIsSentrySpan, "spanIsSentrySpan"); +function spanIsSampled(span) { + const { traceFlags } = span.spanContext(); + return traceFlags === TRACE_FLAG_SAMPLED; +} +__name(spanIsSampled, "spanIsSampled"); +function getStatusMessage(status) { + if (!status || status.code === SPAN_STATUS_UNSET) { + return void 0; + } + if (status.code === SPAN_STATUS_OK) { + return "ok"; + } + return status.message || "unknown_error"; +} +__name(getStatusMessage, "getStatusMessage"); +const CHILD_SPANS_FIELD = "_sentryChildSpans"; +const ROOT_SPAN_FIELD = "_sentryRootSpan"; +function addChildSpanToSpan(span, childSpan) { + const rootSpan = span[ROOT_SPAN_FIELD] || span; + addNonEnumerableProperty(childSpan, ROOT_SPAN_FIELD, rootSpan); + if (span[CHILD_SPANS_FIELD]) { + span[CHILD_SPANS_FIELD].add(childSpan); + } else { + addNonEnumerableProperty(span, CHILD_SPANS_FIELD, /* @__PURE__ */ new Set([childSpan])); + } +} +__name(addChildSpanToSpan, "addChildSpanToSpan"); +function removeChildSpanFromSpan(span, childSpan) { + if (span[CHILD_SPANS_FIELD]) { + span[CHILD_SPANS_FIELD].delete(childSpan); + } +} +__name(removeChildSpanFromSpan, "removeChildSpanFromSpan"); +function getSpanDescendants(span) { + const resultSet = /* @__PURE__ */ new Set(); + function addSpanChildren(span2) { + if (resultSet.has(span2)) { + return; + } else if (spanIsSampled(span2)) { + resultSet.add(span2); + const childSpans = span2[CHILD_SPANS_FIELD] ? Array.from(span2[CHILD_SPANS_FIELD]) : []; + for (const childSpan of childSpans) { + addSpanChildren(childSpan); + } + } + } + __name(addSpanChildren, "addSpanChildren"); + addSpanChildren(span); + return Array.from(resultSet); +} +__name(getSpanDescendants, "getSpanDescendants"); +function getRootSpan(span) { + return span[ROOT_SPAN_FIELD] || span; +} +__name(getRootSpan, "getRootSpan"); +function getActiveSpan() { + const carrier = getMainCarrier(); + const acs = getAsyncContextStrategy(carrier); + if (acs.getActiveSpan) { + return acs.getActiveSpan(); + } + return _getSpanForScope(getCurrentScope$1()); +} +__name(getActiveSpan, "getActiveSpan"); +function updateMetricSummaryOnActiveSpan(metricType, sanitizedName, value4, unit, tags, bucketKey) { + const span = getActiveSpan(); + if (span) { + updateMetricSummaryOnSpan(span, metricType, sanitizedName, value4, unit, tags, bucketKey); + } +} +__name(updateMetricSummaryOnActiveSpan, "updateMetricSummaryOnActiveSpan"); +function showSpanDropWarning() { + if (!hasShownSpanDropWarning) { + consoleSandbox(() => { + console.warn( + "[Sentry] Deprecation warning: Returning null from `beforeSendSpan` will be disallowed from SDK version 9.0.0 onwards. The callback will only support mutating spans. To drop certain spans, configure the respective integrations directly." + ); + }); + hasShownSpanDropWarning = true; + } +} +__name(showSpanDropWarning, "showSpanDropWarning"); +function updateSpanName(span, name2) { + span.updateName(name2); + span.setAttributes({ + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "custom", + [SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]: name2 + }); +} +__name(updateSpanName, "updateSpanName"); +let errorsInstrumented = false; +function registerSpanErrorInstrumentation() { + if (errorsInstrumented) { + return; + } + errorsInstrumented = true; + addGlobalErrorInstrumentationHandler(errorCallback); + addGlobalUnhandledRejectionInstrumentationHandler(errorCallback); +} +__name(registerSpanErrorInstrumentation, "registerSpanErrorInstrumentation"); +function errorCallback() { + const activeSpan = getActiveSpan(); + const rootSpan = activeSpan && getRootSpan(activeSpan); + if (rootSpan) { + const message3 = "internal_error"; + DEBUG_BUILD$6 && logger$2.log(`[Tracing] Root span: ${message3} -> Global error occurred`); + rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: message3 }); + } +} +__name(errorCallback, "errorCallback"); +errorCallback.tag = "sentry_tracingErrorCallback"; +const SCOPE_ON_START_SPAN_FIELD = "_sentryScope"; +const ISOLATION_SCOPE_ON_START_SPAN_FIELD = "_sentryIsolationScope"; +function setCapturedScopesOnSpan(span, scope, isolationScope) { + if (span) { + addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, isolationScope); + addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope); + } +} +__name(setCapturedScopesOnSpan, "setCapturedScopesOnSpan"); +function getCapturedScopesOnSpan(span) { + return { + scope: span[SCOPE_ON_START_SPAN_FIELD], + isolationScope: span[ISOLATION_SCOPE_ON_START_SPAN_FIELD] + }; +} +__name(getCapturedScopesOnSpan, "getCapturedScopesOnSpan"); +function addTracingExtensions() { + registerSpanErrorInstrumentation(); +} +__name(addTracingExtensions, "addTracingExtensions"); +function hasTracingEnabled(maybeOptions) { + if (typeof __SENTRY_TRACING__ === "boolean" && !__SENTRY_TRACING__) { + return false; + } + const client = getClient(); + const options4 = maybeOptions || client && client.getOptions(); + return !!options4 && (options4.enableTracing || "tracesSampleRate" in options4 || "tracesSampler" in options4); +} +__name(hasTracingEnabled, "hasTracingEnabled"); +class SentryNonRecordingSpan { + static { + __name(this, "SentryNonRecordingSpan"); + } + constructor(spanContext = {}) { + this._traceId = spanContext.traceId || generateTraceId(); + this._spanId = spanContext.spanId || generateSpanId(); + } + /** @inheritdoc */ + spanContext() { + return { + spanId: this._spanId, + traceId: this._traceId, + traceFlags: TRACE_FLAG_NONE + }; + } + /** @inheritdoc */ + // eslint-disable-next-line @typescript-eslint/no-empty-function + end(_timestamp) { + } + /** @inheritdoc */ + setAttribute(_key, _value) { + return this; + } + /** @inheritdoc */ + setAttributes(_values) { + return this; + } + /** @inheritdoc */ + setStatus(_status) { + return this; + } + /** @inheritdoc */ + updateName(_name) { + return this; + } + /** @inheritdoc */ + isRecording() { + return false; + } + /** @inheritdoc */ + addEvent(_name, _attributesOrStartTime, _startTime) { + return this; + } + /** + * This should generally not be used, + * but we need it for being compliant with the OTEL Span interface. + * + * @hidden + * @internal + */ + addLink(_link) { + return this; + } + /** + * This should generally not be used, + * but we need it for being compliant with the OTEL Span interface. + * + * @hidden + * @internal + */ + addLinks(_links) { + return this; + } + /** + * This should generally not be used, + * but we need it for being compliant with the OTEL Span interface. + * + * @hidden + * @internal + */ + recordException(_exception, _time) { + } +} +function handleCallbackErrors(fn, onError, onFinally = () => { +}) { + let maybePromiseResult; + try { + maybePromiseResult = fn(); + } catch (e2) { + onError(e2); + onFinally(); + throw e2; + } + return maybeHandlePromiseRejection(maybePromiseResult, onError, onFinally); +} +__name(handleCallbackErrors, "handleCallbackErrors"); +function maybeHandlePromiseRejection(value4, onError, onFinally) { + if (isThenable$1(value4)) { + return value4.then( + (res) => { + onFinally(); + return res; + }, + (e2) => { + onError(e2); + onFinally(); + throw e2; + } + ); + } + onFinally(); + return value4; +} +__name(maybeHandlePromiseRejection, "maybeHandlePromiseRejection"); +const DEFAULT_ENVIRONMENT = "production"; +const FROZEN_DSC_FIELD = "_frozenDsc"; +function freezeDscOnSpan(span, dsc) { + const spanWithMaybeDsc = span; + addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc); +} +__name(freezeDscOnSpan, "freezeDscOnSpan"); +function getDynamicSamplingContextFromClient(trace_id, client) { + const options4 = client.getOptions(); + const { publicKey: public_key } = client.getDsn() || {}; + const dsc = dropUndefinedKeys({ + environment: options4.environment || DEFAULT_ENVIRONMENT, + release: options4.release, + public_key, + trace_id + }); + client.emit("createDsc", dsc); + return dsc; +} +__name(getDynamicSamplingContextFromClient, "getDynamicSamplingContextFromClient"); +function getDynamicSamplingContextFromScope(client, scope) { + const propagationContext = scope.getPropagationContext(); + return propagationContext.dsc || getDynamicSamplingContextFromClient(propagationContext.traceId, client); +} +__name(getDynamicSamplingContextFromScope, "getDynamicSamplingContextFromScope"); +function getDynamicSamplingContextFromSpan(span) { + const client = getClient(); + if (!client) { + return {}; + } + const rootSpan = getRootSpan(span); + const frozenDsc = rootSpan[FROZEN_DSC_FIELD]; + if (frozenDsc) { + return frozenDsc; + } + const traceState = rootSpan.spanContext().traceState; + const traceStateDsc = traceState && traceState.get("sentry.dsc"); + const dscOnTraceState = traceStateDsc && baggageHeaderToDynamicSamplingContext(traceStateDsc); + if (dscOnTraceState) { + return dscOnTraceState; + } + const dsc = getDynamicSamplingContextFromClient(span.spanContext().traceId, client); + const jsonSpan = spanToJSON(rootSpan); + const attributes = jsonSpan.data || {}; + const maybeSampleRate = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]; + if (maybeSampleRate != null) { + dsc.sample_rate = `${maybeSampleRate}`; + } + const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]; + const name2 = jsonSpan.description; + if (source !== "url" && name2) { + dsc.transaction = name2; + } + if (hasTracingEnabled()) { + dsc.sampled = String(spanIsSampled(rootSpan)); + } + client.emit("createDsc", dsc, rootSpan); + return dsc; +} +__name(getDynamicSamplingContextFromSpan, "getDynamicSamplingContextFromSpan"); +function spanToBaggageHeader(span) { + const dsc = getDynamicSamplingContextFromSpan(span); + return dynamicSamplingContextToSentryBaggageHeader(dsc); +} +__name(spanToBaggageHeader, "spanToBaggageHeader"); +function logSpanStart(span) { + if (!DEBUG_BUILD$6) return; + const { description = "< unknown name >", op = "< unknown op >", parent_span_id: parentSpanId } = spanToJSON(span); + const { spanId } = span.spanContext(); + const sampled = spanIsSampled(span); + const rootSpan = getRootSpan(span); + const isRootSpan = rootSpan === span; + const header3 = `[Tracing] Starting ${sampled ? "sampled" : "unsampled"} ${isRootSpan ? "root " : ""}span`; + const infoParts = [`op: ${op}`, `name: ${description}`, `ID: ${spanId}`]; + if (parentSpanId) { + infoParts.push(`parent ID: ${parentSpanId}`); + } + if (!isRootSpan) { + const { op: op2, description: description2 } = spanToJSON(rootSpan); + infoParts.push(`root ID: ${rootSpan.spanContext().spanId}`); + if (op2) { + infoParts.push(`root op: ${op2}`); + } + if (description2) { + infoParts.push(`root description: ${description2}`); + } + } + logger$2.log(`${header3} + ${infoParts.join("\n ")}`); +} +__name(logSpanStart, "logSpanStart"); +function logSpanEnd(span) { + if (!DEBUG_BUILD$6) return; + const { description = "< unknown name >", op = "< unknown op >" } = spanToJSON(span); + const { spanId } = span.spanContext(); + const rootSpan = getRootSpan(span); + const isRootSpan = rootSpan === span; + const msg = `[Tracing] Finishing "${op}" ${isRootSpan ? "root " : ""}span "${description}" with ID ${spanId}`; + logger$2.log(msg); +} +__name(logSpanEnd, "logSpanEnd"); +function parseSampleRate(sampleRate) { + if (typeof sampleRate === "boolean") { + return Number(sampleRate); + } + const rate = typeof sampleRate === "string" ? parseFloat(sampleRate) : sampleRate; + if (typeof rate !== "number" || isNaN(rate) || rate < 0 || rate > 1) { + DEBUG_BUILD$6 && logger$2.warn( + `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify( + sampleRate + )} of type ${JSON.stringify(typeof sampleRate)}.` + ); + return void 0; + } + return rate; +} +__name(parseSampleRate, "parseSampleRate"); +function sampleSpan(options4, samplingContext) { + if (!hasTracingEnabled(options4)) { + return [false]; + } + const normalizedRequest = getIsolationScope().getScopeData().sdkProcessingMetadata.normalizedRequest; + const enhancedSamplingContext = { + ...samplingContext, + normalizedRequest: samplingContext.normalizedRequest || normalizedRequest + }; + let sampleRate; + if (typeof options4.tracesSampler === "function") { + sampleRate = options4.tracesSampler(enhancedSamplingContext); + } else if (enhancedSamplingContext.parentSampled !== void 0) { + sampleRate = enhancedSamplingContext.parentSampled; + } else if (typeof options4.tracesSampleRate !== "undefined") { + sampleRate = options4.tracesSampleRate; + } else { + sampleRate = 1; + } + const parsedSampleRate = parseSampleRate(sampleRate); + if (parsedSampleRate === void 0) { + DEBUG_BUILD$6 && logger$2.warn("[Tracing] Discarding transaction because of invalid sample rate."); + return [false]; + } + if (!parsedSampleRate) { + DEBUG_BUILD$6 && logger$2.log( + `[Tracing] Discarding transaction because ${typeof options4.tracesSampler === "function" ? "tracesSampler returned 0 or false" : "a negative sampling decision was inherited or tracesSampleRate is set to 0"}` + ); + return [false, parsedSampleRate]; + } + const shouldSample = Math.random() < parsedSampleRate; + if (!shouldSample) { + DEBUG_BUILD$6 && logger$2.log( + `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number( + sampleRate + )})` + ); + return [false, parsedSampleRate]; + } + return [true, parsedSampleRate]; +} +__name(sampleSpan, "sampleSpan"); +const DSN_REGEX = /^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/; +function isValidProtocol(protocol) { + return protocol === "http" || protocol === "https"; +} +__name(isValidProtocol, "isValidProtocol"); +function dsnToString(dsn, withPassword = false) { + const { host, path, pass, port, projectId, protocol, publicKey } = dsn; + return `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ""}@${host}${port ? `:${port}` : ""}/${path ? `${path}/` : path}${projectId}`; +} +__name(dsnToString, "dsnToString"); +function dsnFromString(str) { + const match2 = DSN_REGEX.exec(str); + if (!match2) { + consoleSandbox(() => { + console.error(`Invalid Sentry Dsn: ${str}`); + }); + return void 0; + } + const [protocol, publicKey, pass = "", host = "", port = "", lastPath = ""] = match2.slice(1); + let path = ""; + let projectId = lastPath; + const split2 = projectId.split("/"); + if (split2.length > 1) { + path = split2.slice(0, -1).join("/"); + projectId = split2.pop(); + } + if (projectId) { + const projectMatch = projectId.match(/^\d+/); + if (projectMatch) { + projectId = projectMatch[0]; + } + } + return dsnFromComponents({ host, pass, path, projectId, port, protocol, publicKey }); +} +__name(dsnFromString, "dsnFromString"); +function dsnFromComponents(components) { + return { + protocol: components.protocol, + publicKey: components.publicKey || "", + pass: components.pass || "", + host: components.host, + port: components.port || "", + path: components.path || "", + projectId: components.projectId + }; +} +__name(dsnFromComponents, "dsnFromComponents"); +function validateDsn(dsn) { + if (!DEBUG_BUILD$5) { + return true; + } + const { port, projectId, protocol } = dsn; + const requiredComponents = ["protocol", "publicKey", "host", "projectId"]; + const hasMissingRequiredComponent = requiredComponents.find((component) => { + if (!dsn[component]) { + logger$2.error(`Invalid Sentry Dsn: ${component} missing`); + return true; + } + return false; + }); + if (hasMissingRequiredComponent) { + return false; + } + if (!projectId.match(/^\d+$/)) { + logger$2.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`); + return false; + } + if (!isValidProtocol(protocol)) { + logger$2.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`); + return false; + } + if (port && isNaN(parseInt(port, 10))) { + logger$2.error(`Invalid Sentry Dsn: Invalid port ${port}`); + return false; + } + return true; +} +__name(validateDsn, "validateDsn"); +function makeDsn(from2) { + const components = typeof from2 === "string" ? dsnFromString(from2) : dsnFromComponents(from2); + if (!components || !validateDsn(components)) { + return void 0; + } + return components; +} +__name(makeDsn, "makeDsn"); +function memoBuilder() { + const hasWeakSet = typeof WeakSet === "function"; + const inner = hasWeakSet ? /* @__PURE__ */ new WeakSet() : []; + function memoize(obj) { + if (hasWeakSet) { + if (inner.has(obj)) { + return true; + } + inner.add(obj); + return false; + } + for (let i2 = 0; i2 < inner.length; i2++) { + const value4 = inner[i2]; + if (value4 === obj) { + return true; + } + } + inner.push(obj); + return false; + } + __name(memoize, "memoize"); + function unmemoize(obj) { + if (hasWeakSet) { + inner.delete(obj); + } else { + for (let i2 = 0; i2 < inner.length; i2++) { + if (inner[i2] === obj) { + inner.splice(i2, 1); + break; + } + } + } + } + __name(unmemoize, "unmemoize"); + return [memoize, unmemoize]; +} +__name(memoBuilder, "memoBuilder"); +function normalize$2(input, depth = 100, maxProperties = Infinity) { + try { + return visit("", input, depth, maxProperties); + } catch (err) { + return { ERROR: `**non-serializable** (${err})` }; + } +} +__name(normalize$2, "normalize$2"); +function normalizeToSize(object, depth = 3, maxSize = 100 * 1024) { + const normalized = normalize$2(object, depth); + if (jsonSize(normalized) > maxSize) { + return normalizeToSize(object, depth - 1, maxSize); + } + return normalized; +} +__name(normalizeToSize, "normalizeToSize"); +function visit(key, value4, depth = Infinity, maxProperties = Infinity, memo = memoBuilder()) { + const [memoize, unmemoize] = memo; + if (value4 == null || // this matches null and undefined -> eqeq not eqeqeq + ["boolean", "string"].includes(typeof value4) || typeof value4 === "number" && Number.isFinite(value4)) { + return value4; + } + const stringified = stringifyValue(key, value4); + if (!stringified.startsWith("[object ")) { + return stringified; + } + if (value4["__sentry_skip_normalization__"]) { + return value4; + } + const remainingDepth = typeof value4["__sentry_override_normalization_depth__"] === "number" ? value4["__sentry_override_normalization_depth__"] : depth; + if (remainingDepth === 0) { + return stringified.replace("object ", ""); + } + if (memoize(value4)) { + return "[Circular ~]"; + } + const valueWithToJSON = value4; + if (valueWithToJSON && typeof valueWithToJSON.toJSON === "function") { + try { + const jsonValue = valueWithToJSON.toJSON(); + return visit("", jsonValue, remainingDepth - 1, maxProperties, memo); + } catch (err) { + } + } + const normalized = Array.isArray(value4) ? [] : {}; + let numAdded = 0; + const visitable = convertToPlainObject(value4); + for (const visitKey in visitable) { + if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) { + continue; + } + if (numAdded >= maxProperties) { + normalized[visitKey] = "[MaxProperties ~]"; + break; + } + const visitValue = visitable[visitKey]; + normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo); + numAdded++; + } + unmemoize(value4); + return normalized; +} +__name(visit, "visit"); +function stringifyValue(key, value4) { + try { + if (key === "domain" && value4 && typeof value4 === "object" && value4._events) { + return "[Domain]"; + } + if (key === "domainEmitter") { + return "[DomainEmitter]"; + } + if (typeof global !== "undefined" && value4 === global) { + return "[Global]"; + } + if (typeof window !== "undefined" && value4 === window) { + return "[Window]"; + } + if (typeof document !== "undefined" && value4 === document) { + return "[Document]"; + } + if (isVueViewModel(value4)) { + return "[VueViewModel]"; + } + if (isSyntheticEvent(value4)) { + return "[SyntheticEvent]"; + } + if (typeof value4 === "number" && !Number.isFinite(value4)) { + return `[${value4}]`; + } + if (typeof value4 === "function") { + return `[Function: ${getFunctionName(value4)}]`; + } + if (typeof value4 === "symbol") { + return `[${String(value4)}]`; + } + if (typeof value4 === "bigint") { + return `[BigInt: ${String(value4)}]`; + } + const objName = getConstructorName(value4); + if (/^HTML(\w*)Element$/.test(objName)) { + return `[HTMLElement: ${objName}]`; + } + return `[object ${objName}]`; + } catch (err) { + return `**non-serializable** (${err})`; + } +} +__name(stringifyValue, "stringifyValue"); +function getConstructorName(value4) { + const prototype2 = Object.getPrototypeOf(value4); + return prototype2 ? prototype2.constructor.name : "null prototype"; +} +__name(getConstructorName, "getConstructorName"); +function utf8Length(value4) { + return ~-encodeURI(value4).split(/%..|./).length; +} +__name(utf8Length, "utf8Length"); +function jsonSize(value4) { + return utf8Length(JSON.stringify(value4)); +} +__name(jsonSize, "jsonSize"); +function normalizeUrlToBase(url, basePath2) { + const escapedBase = basePath2.replace(/\\/g, "/").replace(/[|\\{}()[\]^$+*?.]/g, "\\$&"); + let newUrl = url; + try { + newUrl = decodeURI(url); + } catch (_Oo) { + } + return newUrl.replace(/\\/g, "/").replace(/webpack:\/?/g, "").replace(new RegExp(`(file://)?/*${escapedBase}/*`, "ig"), "app:///"); +} +__name(normalizeUrlToBase, "normalizeUrlToBase"); +function createEnvelope(headers, items2 = []) { + return [headers, items2]; +} +__name(createEnvelope, "createEnvelope"); +function addItemToEnvelope(envelope, newItem) { + const [headers, items2] = envelope; + return [headers, [...items2, newItem]]; +} +__name(addItemToEnvelope, "addItemToEnvelope"); +function forEachEnvelopeItem(envelope, callback) { + const envelopeItems = envelope[1]; + for (const envelopeItem of envelopeItems) { + const envelopeItemType = envelopeItem[0].type; + const result = callback(envelopeItem, envelopeItemType); + if (result) { + return true; + } + } + return false; +} +__name(forEachEnvelopeItem, "forEachEnvelopeItem"); +function envelopeContainsItemType(envelope, types) { + return forEachEnvelopeItem(envelope, (_2, type) => types.includes(type)); +} +__name(envelopeContainsItemType, "envelopeContainsItemType"); +function encodeUTF8(input) { + return GLOBAL_OBJ.__SENTRY__ && GLOBAL_OBJ.__SENTRY__.encodePolyfill ? GLOBAL_OBJ.__SENTRY__.encodePolyfill(input) : new TextEncoder().encode(input); +} +__name(encodeUTF8, "encodeUTF8"); +function decodeUTF8(input) { + return GLOBAL_OBJ.__SENTRY__ && GLOBAL_OBJ.__SENTRY__.decodePolyfill ? GLOBAL_OBJ.__SENTRY__.decodePolyfill(input) : new TextDecoder().decode(input); +} +__name(decodeUTF8, "decodeUTF8"); +function serializeEnvelope(envelope) { + const [envHeaders, items2] = envelope; + let parts2 = JSON.stringify(envHeaders); + function append3(next2) { + if (typeof parts2 === "string") { + parts2 = typeof next2 === "string" ? parts2 + next2 : [encodeUTF8(parts2), next2]; + } else { + parts2.push(typeof next2 === "string" ? encodeUTF8(next2) : next2); + } + } + __name(append3, "append"); + for (const item3 of items2) { + const [itemHeaders, payload] = item3; + append3(` +${JSON.stringify(itemHeaders)} +`); + if (typeof payload === "string" || payload instanceof Uint8Array) { + append3(payload); + } else { + let stringifiedPayload; + try { + stringifiedPayload = JSON.stringify(payload); + } catch (e2) { + stringifiedPayload = JSON.stringify(normalize$2(payload)); + } + append3(stringifiedPayload); + } + } + return typeof parts2 === "string" ? parts2 : concatBuffers(parts2); +} +__name(serializeEnvelope, "serializeEnvelope"); +function concatBuffers(buffers) { + const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0); + const merged = new Uint8Array(totalLength); + let offset = 0; + for (const buffer2 of buffers) { + merged.set(buffer2, offset); + offset += buffer2.length; + } + return merged; +} +__name(concatBuffers, "concatBuffers"); +function parseEnvelope(env) { + let buffer2 = typeof env === "string" ? encodeUTF8(env) : env; + function readBinary(length) { + const bin = buffer2.subarray(0, length); + buffer2 = buffer2.subarray(length + 1); + return bin; + } + __name(readBinary, "readBinary"); + function readJson() { + let i2 = buffer2.indexOf(10); + if (i2 < 0) { + i2 = buffer2.length; + } + return JSON.parse(decodeUTF8(readBinary(i2))); + } + __name(readJson, "readJson"); + const envelopeHeader = readJson(); + const items2 = []; + while (buffer2.length) { + const itemHeader = readJson(); + const binaryLength = typeof itemHeader.length === "number" ? itemHeader.length : void 0; + items2.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]); + } + return [envelopeHeader, items2]; +} +__name(parseEnvelope, "parseEnvelope"); +function createSpanEnvelopeItem(spanJson) { + const spanHeaders = { + type: "span" + }; + return [spanHeaders, spanJson]; +} +__name(createSpanEnvelopeItem, "createSpanEnvelopeItem"); +function createAttachmentEnvelopeItem(attachment) { + const buffer2 = typeof attachment.data === "string" ? encodeUTF8(attachment.data) : attachment.data; + return [ + dropUndefinedKeys({ + type: "attachment", + length: buffer2.length, + filename: attachment.filename, + content_type: attachment.contentType, + attachment_type: attachment.attachmentType + }), + buffer2 + ]; +} +__name(createAttachmentEnvelopeItem, "createAttachmentEnvelopeItem"); +const ITEM_TYPE_TO_DATA_CATEGORY_MAP = { + session: "session", + sessions: "session", + attachment: "attachment", + transaction: "transaction", + event: "error", + client_report: "internal", + user_report: "default", + profile: "profile", + profile_chunk: "profile", + replay_event: "replay", + replay_recording: "replay", + check_in: "monitor", + feedback: "feedback", + span: "span", + statsd: "metric_bucket", + raw_security: "security" +}; +function envelopeItemTypeToDataCategory(type) { + return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type]; +} +__name(envelopeItemTypeToDataCategory, "envelopeItemTypeToDataCategory"); +function getSdkMetadataForEnvelopeHeader(metadataOrEvent) { + if (!metadataOrEvent || !metadataOrEvent.sdk) { + return; + } + const { name: name2, version: version2 } = metadataOrEvent.sdk; + return { name: name2, version: version2 }; +} +__name(getSdkMetadataForEnvelopeHeader, "getSdkMetadataForEnvelopeHeader"); +function createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn) { + const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext; + return { + event_id: event.event_id, + sent_at: (/* @__PURE__ */ new Date()).toISOString(), + ...sdkInfo && { sdk: sdkInfo }, + ...!!tunnel && dsn && { dsn: dsnToString(dsn) }, + ...dynamicSamplingContext && { + trace: dropUndefinedKeys({ ...dynamicSamplingContext }) + } + }; +} +__name(createEventEnvelopeHeaders, "createEventEnvelopeHeaders"); +function enhanceEventWithSdkInfo(event, sdkInfo) { + if (!sdkInfo) { + return event; + } + event.sdk = event.sdk || {}; + event.sdk.name = event.sdk.name || sdkInfo.name; + event.sdk.version = event.sdk.version || sdkInfo.version; + event.sdk.integrations = [...event.sdk.integrations || [], ...sdkInfo.integrations || []]; + event.sdk.packages = [...event.sdk.packages || [], ...sdkInfo.packages || []]; + return event; +} +__name(enhanceEventWithSdkInfo, "enhanceEventWithSdkInfo"); +function createSessionEnvelope(session, dsn, metadata, tunnel) { + const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata); + const envelopeHeaders = { + sent_at: (/* @__PURE__ */ new Date()).toISOString(), + ...sdkInfo && { sdk: sdkInfo }, + ...!!tunnel && dsn && { dsn: dsnToString(dsn) } + }; + const envelopeItem = "aggregates" in session ? [{ type: "sessions" }, session] : [{ type: "session" }, session.toJSON()]; + return createEnvelope(envelopeHeaders, [envelopeItem]); +} +__name(createSessionEnvelope, "createSessionEnvelope"); +function createEventEnvelope(event, dsn, metadata, tunnel) { + const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata); + const eventType = event.type && event.type !== "replay_event" ? event.type : "event"; + enhanceEventWithSdkInfo(event, metadata && metadata.sdk); + const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn); + delete event.sdkProcessingMetadata; + const eventItem = [{ type: eventType }, event]; + return createEnvelope(envelopeHeaders, [eventItem]); +} +__name(createEventEnvelope, "createEventEnvelope"); +function createSpanEnvelope(spans, client) { + function dscHasRequiredProps(dsc2) { + return !!dsc2.trace_id && !!dsc2.public_key; + } + __name(dscHasRequiredProps, "dscHasRequiredProps"); + const dsc = getDynamicSamplingContextFromSpan(spans[0]); + const dsn = client && client.getDsn(); + const tunnel = client && client.getOptions().tunnel; + const headers = { + sent_at: (/* @__PURE__ */ new Date()).toISOString(), + ...dscHasRequiredProps(dsc) && { trace: dsc }, + ...!!tunnel && dsn && { dsn: dsnToString(dsn) } + }; + const beforeSendSpan = client && client.getOptions().beforeSendSpan; + const convertToSpanJSON = beforeSendSpan ? (span) => { + const spanJson = beforeSendSpan(spanToJSON(span)); + if (!spanJson) { + showSpanDropWarning(); + } + return spanJson; + } : (span) => spanToJSON(span); + const items2 = []; + for (const span of spans) { + const spanJson = convertToSpanJSON(span); + if (spanJson) { + items2.push(createSpanEnvelopeItem(spanJson)); + } + } + return createEnvelope(headers, items2); +} +__name(createSpanEnvelope, "createSpanEnvelope"); +function setMeasurement(name2, value4, unit, activeSpan = getActiveSpan()) { + const rootSpan = activeSpan && getRootSpan(activeSpan); + if (rootSpan) { + DEBUG_BUILD$6 && logger$2.log(`[Measurement] Setting measurement on root span: ${name2} = ${value4} ${unit}`); + rootSpan.addEvent(name2, { + [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: value4, + [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: unit + }); + } +} +__name(setMeasurement, "setMeasurement"); +function timedEventsToMeasurements(events2) { + if (!events2 || events2.length === 0) { + return void 0; + } + const measurements = {}; + events2.forEach((event) => { + const attributes = event.attributes || {}; + const unit = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]; + const value4 = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]; + if (typeof unit === "string" && typeof value4 === "number") { + measurements[event.name] = { value: value4, unit }; + } + }); + return measurements; +} +__name(timedEventsToMeasurements, "timedEventsToMeasurements"); +const MAX_SPAN_COUNT = 1e3; +class SentrySpan { + static { + __name(this, "SentrySpan"); + } + /** Epoch timestamp in seconds when the span started. */ + /** Epoch timestamp in seconds when the span ended. */ + /** Internal keeper of the status */ + /** The timed events added to this span. */ + /** if true, treat span as a standalone span (not part of a transaction) */ + /** + * You should never call the constructor manually, always use `Sentry.startSpan()` + * or other span methods. + * @internal + * @hideconstructor + * @hidden + */ + constructor(spanContext = {}) { + this._traceId = spanContext.traceId || generateTraceId(); + this._spanId = spanContext.spanId || generateSpanId(); + this._startTime = spanContext.startTimestamp || timestampInSeconds(); + this._attributes = {}; + this.setAttributes({ + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "manual", + [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op, + ...spanContext.attributes + }); + this._name = spanContext.name; + if (spanContext.parentSpanId) { + this._parentSpanId = spanContext.parentSpanId; + } + if ("sampled" in spanContext) { + this._sampled = spanContext.sampled; + } + if (spanContext.endTimestamp) { + this._endTime = spanContext.endTimestamp; + } + this._events = []; + this._isStandaloneSpan = spanContext.isStandalone; + if (this._endTime) { + this._onSpanEnded(); + } + } + /** + * This should generally not be used, + * but it is needed for being compliant with the OTEL Span interface. + * + * @hidden + * @internal + */ + addLink(_link) { + return this; + } + /** + * This should generally not be used, + * but it is needed for being compliant with the OTEL Span interface. + * + * @hidden + * @internal + */ + addLinks(_links) { + return this; + } + /** + * This should generally not be used, + * but it is needed for being compliant with the OTEL Span interface. + * + * @hidden + * @internal + */ + recordException(_exception, _time) { + } + /** @inheritdoc */ + spanContext() { + const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this; + return { + spanId, + traceId, + traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE + }; + } + /** @inheritdoc */ + setAttribute(key, value4) { + if (value4 === void 0) { + delete this._attributes[key]; + } else { + this._attributes[key] = value4; + } + return this; + } + /** @inheritdoc */ + setAttributes(attributes) { + Object.keys(attributes).forEach((key) => this.setAttribute(key, attributes[key])); + return this; + } + /** + * This should generally not be used, + * but we need it for browser tracing where we want to adjust the start time afterwards. + * USE THIS WITH CAUTION! + * + * @hidden + * @internal + */ + updateStartTime(timeInput) { + this._startTime = spanTimeInputToSeconds(timeInput); + } + /** + * @inheritDoc + */ + setStatus(value4) { + this._status = value4; + return this; + } + /** + * @inheritDoc + */ + updateName(name2) { + this._name = name2; + this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, "custom"); + return this; + } + /** @inheritdoc */ + end(endTimestamp) { + if (this._endTime) { + return; + } + this._endTime = spanTimeInputToSeconds(endTimestamp); + logSpanEnd(this); + this._onSpanEnded(); + } + /** + * Get JSON representation of this span. + * + * @hidden + * @internal This method is purely for internal purposes and should not be used outside + * of SDK code. If you need to get a JSON representation of a span, + * use `spanToJSON(span)` instead. + */ + getSpanJSON() { + return dropUndefinedKeys({ + data: this._attributes, + description: this._name, + op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP], + parent_span_id: this._parentSpanId, + span_id: this._spanId, + start_timestamp: this._startTime, + status: getStatusMessage(this._status), + timestamp: this._endTime, + trace_id: this._traceId, + origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN], + _metrics_summary: getMetricSummaryJsonForSpan(this), + profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID], + exclusive_time: this._attributes[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME], + measurements: timedEventsToMeasurements(this._events), + is_segment: this._isStandaloneSpan && getRootSpan(this) === this || void 0, + segment_id: this._isStandaloneSpan ? getRootSpan(this).spanContext().spanId : void 0 + }); + } + /** @inheritdoc */ + isRecording() { + return !this._endTime && !!this._sampled; + } + /** + * @inheritdoc + */ + addEvent(name2, attributesOrStartTime, startTime) { + DEBUG_BUILD$6 && logger$2.log("[Tracing] Adding an event to span:", name2); + const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds(); + const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {}; + const event = { + name: name2, + time: spanTimeInputToSeconds(time), + attributes + }; + this._events.push(event); + return this; + } + /** + * This method should generally not be used, + * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set. + * USE THIS WITH CAUTION! + * @internal + * @hidden + * @experimental + */ + isStandaloneSpan() { + return !!this._isStandaloneSpan; + } + /** Emit `spanEnd` when the span is ended. */ + _onSpanEnded() { + const client = getClient(); + if (client) { + client.emit("spanEnd", this); + } + const isSegmentSpan = this._isStandaloneSpan || this === getRootSpan(this); + if (!isSegmentSpan) { + return; + } + if (this._isStandaloneSpan) { + if (this._sampled) { + sendSpanEnvelope(createSpanEnvelope([this], client)); + } else { + DEBUG_BUILD$6 && logger$2.log("[Tracing] Discarding standalone span because its trace was not chosen to be sampled."); + if (client) { + client.recordDroppedEvent("sample_rate", "span"); + } + } + return; + } + const transactionEvent = this._convertSpanToTransaction(); + if (transactionEvent) { + const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope$1(); + scope.captureEvent(transactionEvent); + } + } + /** + * Finish the transaction & prepare the event to send to Sentry. + */ + _convertSpanToTransaction() { + if (!isFullFinishedSpan(spanToJSON(this))) { + return void 0; + } + if (!this._name) { + DEBUG_BUILD$6 && logger$2.warn("Transaction has no name, falling back to ``."); + this._name = ""; + } + const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this); + const scope = capturedSpanScope || getCurrentScope$1(); + const client = scope.getClient() || getClient(); + if (this._sampled !== true) { + DEBUG_BUILD$6 && logger$2.log("[Tracing] Discarding transaction because its trace was not chosen to be sampled."); + if (client) { + client.recordDroppedEvent("sample_rate", "transaction"); + } + return void 0; + } + const finishedSpans = getSpanDescendants(this).filter((span) => span !== this && !isStandaloneSpan(span)); + const spans = finishedSpans.map((span) => spanToJSON(span)).filter(isFullFinishedSpan); + const source = this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]; + delete this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]; + spans.forEach((span) => { + span.data && delete span.data[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]; + }); + const transaction = { + contexts: { + trace: spanToTransactionTraceContext(this) + }, + spans: ( + // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here + // we do not use spans anymore after this point + spans.length > MAX_SPAN_COUNT ? spans.sort((a2, b2) => a2.start_timestamp - b2.start_timestamp).slice(0, MAX_SPAN_COUNT) : spans + ), + start_timestamp: this._startTime, + timestamp: this._endTime, + transaction: this._name, + type: "transaction", + sdkProcessingMetadata: { + capturedSpanScope, + capturedSpanIsolationScope, + ...dropUndefinedKeys({ + dynamicSamplingContext: getDynamicSamplingContextFromSpan(this) + }) + }, + _metrics_summary: getMetricSummaryJsonForSpan(this), + ...source && { + transaction_info: { + source + } + } + }; + const measurements = timedEventsToMeasurements(this._events); + const hasMeasurements = measurements && Object.keys(measurements).length; + if (hasMeasurements) { + DEBUG_BUILD$6 && logger$2.log( + "[Measurements] Adding measurements to transaction event", + JSON.stringify(measurements, void 0, 2) + ); + transaction.measurements = measurements; + } + return transaction; + } +} +function isSpanTimeInput(value4) { + return value4 && typeof value4 === "number" || value4 instanceof Date || Array.isArray(value4); +} +__name(isSpanTimeInput, "isSpanTimeInput"); +function isFullFinishedSpan(input) { + return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id; +} +__name(isFullFinishedSpan, "isFullFinishedSpan"); +function isStandaloneSpan(span) { + return span instanceof SentrySpan && span.isStandaloneSpan(); +} +__name(isStandaloneSpan, "isStandaloneSpan"); +function sendSpanEnvelope(envelope) { + const client = getClient(); + if (!client) { + return; + } + const spanItems = envelope[1]; + if (!spanItems || spanItems.length === 0) { + client.recordDroppedEvent("before_send", "span"); + return; + } + client.sendEnvelope(envelope); +} +__name(sendSpanEnvelope, "sendSpanEnvelope"); +const SUPPRESS_TRACING_KEY = "__SENTRY_SUPPRESS_TRACING__"; +function startSpan(options4, callback) { + const acs = getAcs(); + if (acs.startSpan) { + return acs.startSpan(options4, callback); + } + const spanArguments = parseSentrySpanArguments(options4); + const { forceTransaction, parentSpan: customParentSpan } = options4; + return withScope(options4.scope, () => { + const wrapper = getActiveSpanWrapper(customParentSpan); + return wrapper(() => { + const scope = getCurrentScope$1(); + const parentSpan = getParentSpan(scope); + const shouldSkipSpan = options4.onlyIfParent && !parentSpan; + const activeSpan = shouldSkipSpan ? new SentryNonRecordingSpan() : createChildOrRootSpan({ + parentSpan, + spanArguments, + forceTransaction, + scope + }); + _setSpanForScope(scope, activeSpan); + return handleCallbackErrors( + () => callback(activeSpan), + () => { + const { status } = spanToJSON(activeSpan); + if (activeSpan.isRecording() && (!status || status === "ok")) { + activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: "internal_error" }); + } + }, + () => activeSpan.end() + ); + }); + }); +} +__name(startSpan, "startSpan"); +function startSpanManual(options4, callback) { + const acs = getAcs(); + if (acs.startSpanManual) { + return acs.startSpanManual(options4, callback); + } + const spanArguments = parseSentrySpanArguments(options4); + const { forceTransaction, parentSpan: customParentSpan } = options4; + return withScope(options4.scope, () => { + const wrapper = getActiveSpanWrapper(customParentSpan); + return wrapper(() => { + const scope = getCurrentScope$1(); + const parentSpan = getParentSpan(scope); + const shouldSkipSpan = options4.onlyIfParent && !parentSpan; + const activeSpan = shouldSkipSpan ? new SentryNonRecordingSpan() : createChildOrRootSpan({ + parentSpan, + spanArguments, + forceTransaction, + scope + }); + _setSpanForScope(scope, activeSpan); + function finishAndSetSpan() { + activeSpan.end(); + } + __name(finishAndSetSpan, "finishAndSetSpan"); + return handleCallbackErrors( + () => callback(activeSpan, finishAndSetSpan), + () => { + const { status } = spanToJSON(activeSpan); + if (activeSpan.isRecording() && (!status || status === "ok")) { + activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: "internal_error" }); + } + } + ); + }); + }); +} +__name(startSpanManual, "startSpanManual"); +function startInactiveSpan(options4) { + const acs = getAcs(); + if (acs.startInactiveSpan) { + return acs.startInactiveSpan(options4); + } + const spanArguments = parseSentrySpanArguments(options4); + const { forceTransaction, parentSpan: customParentSpan } = options4; + const wrapper = options4.scope ? (callback) => withScope(options4.scope, callback) : customParentSpan !== void 0 ? (callback) => withActiveSpan(customParentSpan, callback) : (callback) => callback(); + return wrapper(() => { + const scope = getCurrentScope$1(); + const parentSpan = getParentSpan(scope); + const shouldSkipSpan = options4.onlyIfParent && !parentSpan; + if (shouldSkipSpan) { + return new SentryNonRecordingSpan(); + } + return createChildOrRootSpan({ + parentSpan, + spanArguments, + forceTransaction, + scope + }); + }); +} +__name(startInactiveSpan, "startInactiveSpan"); +const continueTrace = /* @__PURE__ */ __name((options4, callback) => { + const carrier = getMainCarrier(); + const acs = getAsyncContextStrategy(carrier); + if (acs.continueTrace) { + return acs.continueTrace(options4, callback); + } + const { sentryTrace, baggage } = options4; + return withScope((scope) => { + const propagationContext = propagationContextFromHeaders(sentryTrace, baggage); + scope.setPropagationContext(propagationContext); + return callback(); + }); +}, "continueTrace"); +function withActiveSpan(span, callback) { + const acs = getAcs(); + if (acs.withActiveSpan) { + return acs.withActiveSpan(span, callback); + } + return withScope((scope) => { + _setSpanForScope(scope, span || void 0); + return callback(scope); + }); +} +__name(withActiveSpan, "withActiveSpan"); +function suppressTracing(callback) { + const acs = getAcs(); + if (acs.suppressTracing) { + return acs.suppressTracing(callback); + } + return withScope((scope) => { + scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: true }); + return callback(); + }); +} +__name(suppressTracing, "suppressTracing"); +function startNewTrace(callback) { + return withScope((scope) => { + scope.setPropagationContext({ traceId: generateTraceId() }); + DEBUG_BUILD$6 && logger$2.info(`Starting a new trace with id ${scope.getPropagationContext().traceId}`); + return withActiveSpan(null, callback); + }); +} +__name(startNewTrace, "startNewTrace"); +function createChildOrRootSpan({ + parentSpan, + spanArguments, + forceTransaction, + scope +}) { + if (!hasTracingEnabled()) { + return new SentryNonRecordingSpan(); + } + const isolationScope = getIsolationScope(); + let span; + if (parentSpan && !forceTransaction) { + span = _startChildSpan(parentSpan, scope, spanArguments); + addChildSpanToSpan(parentSpan, span); + } else if (parentSpan) { + const dsc = getDynamicSamplingContextFromSpan(parentSpan); + const { traceId, spanId: parentSpanId } = parentSpan.spanContext(); + const parentSampled = spanIsSampled(parentSpan); + span = _startRootSpan( + { + traceId, + parentSpanId, + ...spanArguments + }, + scope, + parentSampled + ); + freezeDscOnSpan(span, dsc); + } else { + const { + traceId, + dsc, + parentSpanId, + sampled: parentSampled + } = { + ...isolationScope.getPropagationContext(), + ...scope.getPropagationContext() + }; + span = _startRootSpan( + { + traceId, + parentSpanId, + ...spanArguments + }, + scope, + parentSampled + ); + if (dsc) { + freezeDscOnSpan(span, dsc); + } + } + logSpanStart(span); + setCapturedScopesOnSpan(span, scope, isolationScope); + return span; +} +__name(createChildOrRootSpan, "createChildOrRootSpan"); +function parseSentrySpanArguments(options4) { + const exp = options4.experimental || {}; + const initialCtx = { + isStandalone: exp.standalone, + ...options4 + }; + if (options4.startTime) { + const ctx = { ...initialCtx }; + ctx.startTimestamp = spanTimeInputToSeconds(options4.startTime); + delete ctx.startTime; + return ctx; + } + return initialCtx; +} +__name(parseSentrySpanArguments, "parseSentrySpanArguments"); +function getAcs() { + const carrier = getMainCarrier(); + return getAsyncContextStrategy(carrier); +} +__name(getAcs, "getAcs"); +function _startRootSpan(spanArguments, scope, parentSampled) { + const client = getClient(); + const options4 = client && client.getOptions() || {}; + const { name: name2 = "", attributes } = spanArguments; + const [sampled, sampleRate] = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] ? [false] : sampleSpan(options4, { + name: name2, + parentSampled, + attributes, + transactionContext: { + name: name2, + parentSampled + } + }); + const rootSpan = new SentrySpan({ + ...spanArguments, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "custom", + ...spanArguments.attributes + }, + sampled + }); + if (sampleRate !== void 0) { + rootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, sampleRate); + } + if (client) { + client.emit("spanStart", rootSpan); + } + return rootSpan; +} +__name(_startRootSpan, "_startRootSpan"); +function _startChildSpan(parentSpan, scope, spanArguments) { + const { spanId, traceId } = parentSpan.spanContext(); + const sampled = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] ? false : spanIsSampled(parentSpan); + const childSpan = sampled ? new SentrySpan({ + ...spanArguments, + parentSpanId: spanId, + traceId, + sampled + }) : new SentryNonRecordingSpan({ traceId }); + addChildSpanToSpan(parentSpan, childSpan); + const client = getClient(); + if (client) { + client.emit("spanStart", childSpan); + if (spanArguments.endTimestamp) { + client.emit("spanEnd", childSpan); + } + } + return childSpan; +} +__name(_startChildSpan, "_startChildSpan"); +function getParentSpan(scope) { + const span = _getSpanForScope(scope); + if (!span) { + return void 0; + } + const client = getClient(); + const options4 = client ? client.getOptions() : {}; + if (options4.parentSpanIsAlwaysRootSpan) { + return getRootSpan(span); + } + return span; +} +__name(getParentSpan, "getParentSpan"); +function getActiveSpanWrapper(parentSpan) { + return parentSpan !== void 0 ? (callback) => { + return withActiveSpan(parentSpan, callback); + } : (callback) => callback(); +} +__name(getActiveSpanWrapper, "getActiveSpanWrapper"); +const TRACING_DEFAULTS = { + idleTimeout: 1e3, + finalTimeout: 3e4, + childSpanTimeout: 15e3 +}; +const FINISH_REASON_HEARTBEAT_FAILED = "heartbeatFailed"; +const FINISH_REASON_IDLE_TIMEOUT = "idleTimeout"; +const FINISH_REASON_FINAL_TIMEOUT = "finalTimeout"; +const FINISH_REASON_EXTERNAL_FINISH = "externalFinish"; +function startIdleSpan(startSpanOptions, options4 = {}) { + const activities = /* @__PURE__ */ new Map(); + let _finished = false; + let _idleTimeoutID; + let _finishReason = FINISH_REASON_EXTERNAL_FINISH; + let _autoFinishAllowed = !options4.disableAutoFinish; + const _cleanupHooks = []; + const { + idleTimeout = TRACING_DEFAULTS.idleTimeout, + finalTimeout = TRACING_DEFAULTS.finalTimeout, + childSpanTimeout = TRACING_DEFAULTS.childSpanTimeout, + beforeSpanEnd + } = options4; + const client = getClient(); + if (!client || !hasTracingEnabled()) { + return new SentryNonRecordingSpan(); + } + const scope = getCurrentScope$1(); + const previousActiveSpan = getActiveSpan(); + const span = _startIdleSpan(startSpanOptions); + span.end = new Proxy(span.end, { + apply(target2, thisArg, args) { + if (beforeSpanEnd) { + beforeSpanEnd(span); + } + const [definedEndTimestamp, ...rest] = args; + const timestamp2 = definedEndTimestamp || timestampInSeconds(); + const spanEndTimestamp = spanTimeInputToSeconds(timestamp2); + const spans = getSpanDescendants(span).filter((child) => child !== span); + if (!spans.length) { + onIdleSpanEnded(spanEndTimestamp); + return Reflect.apply(target2, thisArg, [spanEndTimestamp, ...rest]); + } + const childEndTimestamps = spans.map((span2) => spanToJSON(span2).timestamp).filter((timestamp3) => !!timestamp3); + const latestSpanEndTimestamp = childEndTimestamps.length ? Math.max(...childEndTimestamps) : void 0; + const spanStartTimestamp = spanToJSON(span).start_timestamp; + const endTimestamp = Math.min( + spanStartTimestamp ? spanStartTimestamp + finalTimeout / 1e3 : Infinity, + Math.max(spanStartTimestamp || -Infinity, Math.min(spanEndTimestamp, latestSpanEndTimestamp || Infinity)) + ); + onIdleSpanEnded(endTimestamp); + return Reflect.apply(target2, thisArg, [endTimestamp, ...rest]); + } + }); + function _cancelIdleTimeout() { + if (_idleTimeoutID) { + clearTimeout(_idleTimeoutID); + _idleTimeoutID = void 0; + } + } + __name(_cancelIdleTimeout, "_cancelIdleTimeout"); + function _restartIdleTimeout(endTimestamp) { + _cancelIdleTimeout(); + _idleTimeoutID = setTimeout(() => { + if (!_finished && activities.size === 0 && _autoFinishAllowed) { + _finishReason = FINISH_REASON_IDLE_TIMEOUT; + span.end(endTimestamp); + } + }, idleTimeout); + } + __name(_restartIdleTimeout, "_restartIdleTimeout"); + function _restartChildSpanTimeout(endTimestamp) { + _idleTimeoutID = setTimeout(() => { + if (!_finished && _autoFinishAllowed) { + _finishReason = FINISH_REASON_HEARTBEAT_FAILED; + span.end(endTimestamp); + } + }, childSpanTimeout); + } + __name(_restartChildSpanTimeout, "_restartChildSpanTimeout"); + function _pushActivity(spanId) { + _cancelIdleTimeout(); + activities.set(spanId, true); + const endTimestamp = timestampInSeconds(); + _restartChildSpanTimeout(endTimestamp + childSpanTimeout / 1e3); + } + __name(_pushActivity, "_pushActivity"); + function _popActivity(spanId) { + if (activities.has(spanId)) { + activities.delete(spanId); + } + if (activities.size === 0) { + const endTimestamp = timestampInSeconds(); + _restartIdleTimeout(endTimestamp + idleTimeout / 1e3); + } + } + __name(_popActivity, "_popActivity"); + function onIdleSpanEnded(endTimestamp) { + _finished = true; + activities.clear(); + _cleanupHooks.forEach((cleanup) => cleanup()); + _setSpanForScope(scope, previousActiveSpan); + const spanJSON = spanToJSON(span); + const { start_timestamp: startTimestamp } = spanJSON; + if (!startTimestamp) { + return; + } + const attributes = spanJSON.data || {}; + if (!attributes[SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON]) { + span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, _finishReason); + } + logger$2.log(`[Tracing] Idle span "${spanJSON.op}" finished`); + const childSpans = getSpanDescendants(span).filter((child) => child !== span); + let discardedSpans = 0; + childSpans.forEach((childSpan) => { + if (childSpan.isRecording()) { + childSpan.setStatus({ code: SPAN_STATUS_ERROR, message: "cancelled" }); + childSpan.end(endTimestamp); + DEBUG_BUILD$6 && logger$2.log("[Tracing] Cancelling span since span ended early", JSON.stringify(childSpan, void 0, 2)); + } + const childSpanJSON = spanToJSON(childSpan); + const { timestamp: childEndTimestamp = 0, start_timestamp: childStartTimestamp = 0 } = childSpanJSON; + const spanStartedBeforeIdleSpanEnd = childStartTimestamp <= endTimestamp; + const timeoutWithMarginOfError = (finalTimeout + idleTimeout) / 1e3; + const spanEndedBeforeFinalTimeout = childEndTimestamp - childStartTimestamp <= timeoutWithMarginOfError; + if (DEBUG_BUILD$6) { + const stringifiedSpan = JSON.stringify(childSpan, void 0, 2); + if (!spanStartedBeforeIdleSpanEnd) { + logger$2.log("[Tracing] Discarding span since it happened after idle span was finished", stringifiedSpan); + } else if (!spanEndedBeforeFinalTimeout) { + logger$2.log("[Tracing] Discarding span since it finished after idle span final timeout", stringifiedSpan); + } + } + if (!spanEndedBeforeFinalTimeout || !spanStartedBeforeIdleSpanEnd) { + removeChildSpanFromSpan(span, childSpan); + discardedSpans++; + } + }); + if (discardedSpans > 0) { + span.setAttribute("sentry.idle_span_discarded_spans", discardedSpans); + } + } + __name(onIdleSpanEnded, "onIdleSpanEnded"); + _cleanupHooks.push( + client.on("spanStart", (startedSpan) => { + if (_finished || startedSpan === span || !!spanToJSON(startedSpan).timestamp) { + return; + } + const allSpans = getSpanDescendants(span); + if (allSpans.includes(startedSpan)) { + _pushActivity(startedSpan.spanContext().spanId); + } + }) + ); + _cleanupHooks.push( + client.on("spanEnd", (endedSpan) => { + if (_finished) { + return; + } + _popActivity(endedSpan.spanContext().spanId); + }) + ); + _cleanupHooks.push( + client.on("idleSpanEnableAutoFinish", (spanToAllowAutoFinish) => { + if (spanToAllowAutoFinish === span) { + _autoFinishAllowed = true; + _restartIdleTimeout(); + if (activities.size) { + _restartChildSpanTimeout(); + } + } + }) + ); + if (!options4.disableAutoFinish) { + _restartIdleTimeout(); + } + setTimeout(() => { + if (!_finished) { + span.setStatus({ code: SPAN_STATUS_ERROR, message: "deadline_exceeded" }); + _finishReason = FINISH_REASON_FINAL_TIMEOUT; + span.end(); + } + }, finalTimeout); + return span; +} +__name(startIdleSpan, "startIdleSpan"); +function _startIdleSpan(options4) { + const span = startInactiveSpan(options4); + _setSpanForScope(getCurrentScope$1(), span); + DEBUG_BUILD$6 && logger$2.log("[Tracing] Started span is an idle span"); + return span; +} +__name(_startIdleSpan, "_startIdleSpan"); +function notifyEventProcessors(processors, event, hint, index2 = 0) { + return new SyncPromise((resolve2, reject3) => { + const processor = processors[index2]; + if (event === null || typeof processor !== "function") { + resolve2(event); + } else { + const result = processor({ ...event }, hint); + DEBUG_BUILD$6 && processor.id && result === null && logger$2.log(`Event processor "${processor.id}" dropped event`); + if (isThenable$1(result)) { + void result.then((final) => notifyEventProcessors(processors, final, hint, index2 + 1).then(resolve2)).then(null, reject3); + } else { + void notifyEventProcessors(processors, result, hint, index2 + 1).then(resolve2).then(null, reject3); + } + } + }); +} +__name(notifyEventProcessors, "notifyEventProcessors"); +let parsedStackResults; +let lastKeysCount; +let cachedFilenameDebugIds; +function getFilenameToDebugIdMap(stackParser) { + const debugIdMap = GLOBAL_OBJ._sentryDebugIds; + if (!debugIdMap) { + return {}; + } + const debugIdKeys = Object.keys(debugIdMap); + if (cachedFilenameDebugIds && debugIdKeys.length === lastKeysCount) { + return cachedFilenameDebugIds; + } + lastKeysCount = debugIdKeys.length; + cachedFilenameDebugIds = debugIdKeys.reduce((acc, stackKey) => { + if (!parsedStackResults) { + parsedStackResults = {}; + } + const result = parsedStackResults[stackKey]; + if (result) { + acc[result[0]] = result[1]; + } else { + const parsedStack = stackParser(stackKey); + for (let i2 = parsedStack.length - 1; i2 >= 0; i2--) { + const stackFrame = parsedStack[i2]; + const filename = stackFrame && stackFrame.filename; + const debugId = debugIdMap[stackKey]; + if (filename && debugId) { + acc[filename] = debugId; + parsedStackResults[stackKey] = [filename, debugId]; + break; + } + } + } + return acc; + }, {}); + return cachedFilenameDebugIds; +} +__name(getFilenameToDebugIdMap, "getFilenameToDebugIdMap"); +function getDebugImagesForResources(stackParser, resource_paths) { + const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser); + if (!filenameDebugIdMap) { + return []; + } + const images = []; + for (const path of resource_paths) { + if (path && filenameDebugIdMap[path]) { + images.push({ + type: "sourcemap", + code_file: path, + debug_id: filenameDebugIdMap[path] + }); + } + } + return images; +} +__name(getDebugImagesForResources, "getDebugImagesForResources"); +function applyScopeDataToEvent(event, data26) { + const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data26; + applyDataToEvent(event, data26); + if (span) { + applySpanToEvent(event, span); + } + applyFingerprintToEvent(event, fingerprint); + applyBreadcrumbsToEvent(event, breadcrumbs); + applySdkMetadataToEvent(event, sdkProcessingMetadata); +} +__name(applyScopeDataToEvent, "applyScopeDataToEvent"); +function mergeScopeData(data26, mergeData) { + const { + extra, + tags, + user, + contexts, + level, + sdkProcessingMetadata, + breadcrumbs, + fingerprint, + eventProcessors, + attachments, + propagationContext, + transactionName, + span + } = mergeData; + mergeAndOverwriteScopeData(data26, "extra", extra); + mergeAndOverwriteScopeData(data26, "tags", tags); + mergeAndOverwriteScopeData(data26, "user", user); + mergeAndOverwriteScopeData(data26, "contexts", contexts); + data26.sdkProcessingMetadata = merge$2(data26.sdkProcessingMetadata, sdkProcessingMetadata, 2); + if (level) { + data26.level = level; + } + if (transactionName) { + data26.transactionName = transactionName; + } + if (span) { + data26.span = span; + } + if (breadcrumbs.length) { + data26.breadcrumbs = [...data26.breadcrumbs, ...breadcrumbs]; + } + if (fingerprint.length) { + data26.fingerprint = [...data26.fingerprint, ...fingerprint]; + } + if (eventProcessors.length) { + data26.eventProcessors = [...data26.eventProcessors, ...eventProcessors]; + } + if (attachments.length) { + data26.attachments = [...data26.attachments, ...attachments]; + } + data26.propagationContext = { ...data26.propagationContext, ...propagationContext }; +} +__name(mergeScopeData, "mergeScopeData"); +function mergeAndOverwriteScopeData(data26, prop2, mergeVal) { + data26[prop2] = merge$2(data26[prop2], mergeVal, 1); +} +__name(mergeAndOverwriteScopeData, "mergeAndOverwriteScopeData"); +function applyDataToEvent(event, data26) { + const { extra, tags, user, contexts, level, transactionName } = data26; + const cleanedExtra = dropUndefinedKeys(extra); + if (cleanedExtra && Object.keys(cleanedExtra).length) { + event.extra = { ...cleanedExtra, ...event.extra }; + } + const cleanedTags = dropUndefinedKeys(tags); + if (cleanedTags && Object.keys(cleanedTags).length) { + event.tags = { ...cleanedTags, ...event.tags }; + } + const cleanedUser = dropUndefinedKeys(user); + if (cleanedUser && Object.keys(cleanedUser).length) { + event.user = { ...cleanedUser, ...event.user }; + } + const cleanedContexts = dropUndefinedKeys(contexts); + if (cleanedContexts && Object.keys(cleanedContexts).length) { + event.contexts = { ...cleanedContexts, ...event.contexts }; + } + if (level) { + event.level = level; + } + if (transactionName && event.type !== "transaction") { + event.transaction = transactionName; + } +} +__name(applyDataToEvent, "applyDataToEvent"); +function applyBreadcrumbsToEvent(event, breadcrumbs) { + const mergedBreadcrumbs = [...event.breadcrumbs || [], ...breadcrumbs]; + event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : void 0; +} +__name(applyBreadcrumbsToEvent, "applyBreadcrumbsToEvent"); +function applySdkMetadataToEvent(event, sdkProcessingMetadata) { + event.sdkProcessingMetadata = { + ...event.sdkProcessingMetadata, + ...sdkProcessingMetadata + }; +} +__name(applySdkMetadataToEvent, "applySdkMetadataToEvent"); +function applySpanToEvent(event, span) { + event.contexts = { + trace: spanToTraceContext(span), + ...event.contexts + }; + event.sdkProcessingMetadata = { + dynamicSamplingContext: getDynamicSamplingContextFromSpan(span), + ...event.sdkProcessingMetadata + }; + const rootSpan = getRootSpan(span); + const transactionName = spanToJSON(rootSpan).description; + if (transactionName && !event.transaction && event.type === "transaction") { + event.transaction = transactionName; + } +} +__name(applySpanToEvent, "applySpanToEvent"); +function applyFingerprintToEvent(event, fingerprint) { + event.fingerprint = event.fingerprint ? Array.isArray(event.fingerprint) ? event.fingerprint : [event.fingerprint] : []; + if (fingerprint) { + event.fingerprint = event.fingerprint.concat(fingerprint); + } + if (event.fingerprint && !event.fingerprint.length) { + delete event.fingerprint; + } +} +__name(applyFingerprintToEvent, "applyFingerprintToEvent"); +function prepareEvent(options4, event, hint, scope, client, isolationScope) { + const { normalizeDepth = 3, normalizeMaxBreadth = 1e3 } = options4; + const prepared = { + ...event, + event_id: event.event_id || hint.event_id || uuid4(), + timestamp: event.timestamp || dateTimestampInSeconds() + }; + const integrations = hint.integrations || options4.integrations.map((i2) => i2.name); + applyClientOptions(prepared, options4); + applyIntegrationsMetadata(prepared, integrations); + if (client) { + client.emit("applyFrameMetadata", event); + } + if (event.type === void 0) { + applyDebugIds(prepared, options4.stackParser); + } + const finalScope = getFinalScope(scope, hint.captureContext); + if (hint.mechanism) { + addExceptionMechanism(prepared, hint.mechanism); + } + const clientEventProcessors = client ? client.getEventProcessors() : []; + const data26 = getGlobalScope().getScopeData(); + if (isolationScope) { + const isolationData = isolationScope.getScopeData(); + mergeScopeData(data26, isolationData); + } + if (finalScope) { + const finalScopeData = finalScope.getScopeData(); + mergeScopeData(data26, finalScopeData); + } + const attachments = [...hint.attachments || [], ...data26.attachments]; + if (attachments.length) { + hint.attachments = attachments; + } + applyScopeDataToEvent(prepared, data26); + const eventProcessors = [ + ...clientEventProcessors, + // Run scope event processors _after_ all other processors + ...data26.eventProcessors + ]; + const result = notifyEventProcessors(eventProcessors, prepared, hint); + return result.then((evt) => { + if (evt) { + applyDebugMeta(evt); + } + if (typeof normalizeDepth === "number" && normalizeDepth > 0) { + return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth); + } + return evt; + }); +} +__name(prepareEvent, "prepareEvent"); +function applyClientOptions(event, options4) { + const { environment, release, dist: dist3, maxValueLength = 250 } = options4; + event.environment = event.environment || environment || DEFAULT_ENVIRONMENT; + if (!event.release && release) { + event.release = release; + } + if (!event.dist && dist3) { + event.dist = dist3; + } + if (event.message) { + event.message = truncate(event.message, maxValueLength); + } + const exception = event.exception && event.exception.values && event.exception.values[0]; + if (exception && exception.value) { + exception.value = truncate(exception.value, maxValueLength); + } + const request = event.request; + if (request && request.url) { + request.url = truncate(request.url, maxValueLength); + } +} +__name(applyClientOptions, "applyClientOptions"); +function applyDebugIds(event, stackParser) { + const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser); + try { + event.exception.values.forEach((exception) => { + exception.stacktrace.frames.forEach((frame) => { + if (filenameDebugIdMap && frame.filename) { + frame.debug_id = filenameDebugIdMap[frame.filename]; + } + }); + }); + } catch (e2) { + } +} +__name(applyDebugIds, "applyDebugIds"); +function applyDebugMeta(event) { + const filenameDebugIdMap = {}; + try { + event.exception.values.forEach((exception) => { + exception.stacktrace.frames.forEach((frame) => { + if (frame.debug_id) { + if (frame.abs_path) { + filenameDebugIdMap[frame.abs_path] = frame.debug_id; + } else if (frame.filename) { + filenameDebugIdMap[frame.filename] = frame.debug_id; + } + delete frame.debug_id; + } + }); + }); + } catch (e2) { + } + if (Object.keys(filenameDebugIdMap).length === 0) { + return; + } + event.debug_meta = event.debug_meta || {}; + event.debug_meta.images = event.debug_meta.images || []; + const images = event.debug_meta.images; + Object.entries(filenameDebugIdMap).forEach(([filename, debug_id]) => { + images.push({ + type: "sourcemap", + code_file: filename, + debug_id + }); + }); +} +__name(applyDebugMeta, "applyDebugMeta"); +function applyIntegrationsMetadata(event, integrationNames) { + if (integrationNames.length > 0) { + event.sdk = event.sdk || {}; + event.sdk.integrations = [...event.sdk.integrations || [], ...integrationNames]; + } +} +__name(applyIntegrationsMetadata, "applyIntegrationsMetadata"); +function normalizeEvent(event, depth, maxBreadth) { + if (!event) { + return null; + } + const normalized = { + ...event, + ...event.breadcrumbs && { + breadcrumbs: event.breadcrumbs.map((b2) => ({ + ...b2, + ...b2.data && { + data: normalize$2(b2.data, depth, maxBreadth) + } + })) + }, + ...event.user && { + user: normalize$2(event.user, depth, maxBreadth) + }, + ...event.contexts && { + contexts: normalize$2(event.contexts, depth, maxBreadth) + }, + ...event.extra && { + extra: normalize$2(event.extra, depth, maxBreadth) + } + }; + if (event.contexts && event.contexts.trace && normalized.contexts) { + normalized.contexts.trace = event.contexts.trace; + if (event.contexts.trace.data) { + normalized.contexts.trace.data = normalize$2(event.contexts.trace.data, depth, maxBreadth); + } + } + if (event.spans) { + normalized.spans = event.spans.map((span) => { + return { + ...span, + ...span.data && { + data: normalize$2(span.data, depth, maxBreadth) + } + }; + }); + } + if (event.contexts && event.contexts.flags && normalized.contexts) { + normalized.contexts.flags = normalize$2(event.contexts.flags, 3, maxBreadth); + } + return normalized; +} +__name(normalizeEvent, "normalizeEvent"); +function getFinalScope(scope, captureContext) { + if (!captureContext) { + return scope; + } + const finalScope = scope ? scope.clone() : new Scope(); + finalScope.update(captureContext); + return finalScope; +} +__name(getFinalScope, "getFinalScope"); +function parseEventHintOrCaptureContext(hint) { + if (!hint) { + return void 0; + } + if (hintIsScopeOrFunction(hint)) { + return { captureContext: hint }; + } + if (hintIsScopeContext(hint)) { + return { + captureContext: hint + }; + } + return hint; +} +__name(parseEventHintOrCaptureContext, "parseEventHintOrCaptureContext"); +function hintIsScopeOrFunction(hint) { + return hint instanceof Scope || typeof hint === "function"; +} +__name(hintIsScopeOrFunction, "hintIsScopeOrFunction"); +const captureContextKeys = [ + "user", + "level", + "extra", + "contexts", + "tags", + "fingerprint", + "requestSession", + "propagationContext" +]; +function hintIsScopeContext(hint) { + return Object.keys(hint).some((key) => captureContextKeys.includes(key)); +} +__name(hintIsScopeContext, "hintIsScopeContext"); +function captureException(exception, hint) { + return getCurrentScope$1().captureException(exception, parseEventHintOrCaptureContext(hint)); +} +__name(captureException, "captureException"); +function captureMessage(message3, captureContext) { + const level = typeof captureContext === "string" ? captureContext : void 0; + const context = typeof captureContext !== "string" ? { captureContext } : void 0; + return getCurrentScope$1().captureMessage(message3, level, context); +} +__name(captureMessage, "captureMessage"); +function captureEvent(event, hint) { + return getCurrentScope$1().captureEvent(event, hint); +} +__name(captureEvent, "captureEvent"); +function setContext(name2, context) { + getIsolationScope().setContext(name2, context); +} +__name(setContext, "setContext"); +function setExtras(extras) { + getIsolationScope().setExtras(extras); +} +__name(setExtras, "setExtras"); +function setExtra(key, extra) { + getIsolationScope().setExtra(key, extra); +} +__name(setExtra, "setExtra"); +function setTags(tags) { + getIsolationScope().setTags(tags); +} +__name(setTags, "setTags"); +function setTag$5(key, value4) { + getIsolationScope().setTag(key, value4); +} +__name(setTag$5, "setTag$5"); +function setUser(user) { + getIsolationScope().setUser(user); +} +__name(setUser, "setUser"); +function lastEventId() { + return getIsolationScope().lastEventId(); +} +__name(lastEventId, "lastEventId"); +function captureCheckIn(checkIn, upsertMonitorConfig) { + const scope = getCurrentScope$1(); + const client = getClient(); + if (!client) { + DEBUG_BUILD$6 && logger$2.warn("Cannot capture check-in. No client defined."); + } else if (!client.captureCheckIn) { + DEBUG_BUILD$6 && logger$2.warn("Cannot capture check-in. Client does not support sending check-ins."); + } else { + return client.captureCheckIn(checkIn, upsertMonitorConfig, scope); + } + return uuid4(); +} +__name(captureCheckIn, "captureCheckIn"); +function withMonitor(monitorSlug, callback, upsertMonitorConfig) { + const checkInId = captureCheckIn({ monitorSlug, status: "in_progress" }, upsertMonitorConfig); + const now2 = timestampInSeconds(); + function finishCheckIn(status) { + captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now2 }); + } + __name(finishCheckIn, "finishCheckIn"); + return withIsolationScope(() => { + let maybePromiseResult; + try { + maybePromiseResult = callback(); + } catch (e2) { + finishCheckIn("error"); + throw e2; + } + if (isThenable$1(maybePromiseResult)) { + Promise.resolve(maybePromiseResult).then( + () => { + finishCheckIn("ok"); + }, + (e2) => { + finishCheckIn("error"); + throw e2; + } + ); + } else { + finishCheckIn("ok"); + } + return maybePromiseResult; + }); +} +__name(withMonitor, "withMonitor"); +async function flush(timeout) { + const client = getClient(); + if (client) { + return client.flush(timeout); + } + DEBUG_BUILD$6 && logger$2.warn("Cannot flush events. No client defined."); + return Promise.resolve(false); +} +__name(flush, "flush"); +async function close$1(timeout) { + const client = getClient(); + if (client) { + return client.close(timeout); + } + DEBUG_BUILD$6 && logger$2.warn("Cannot flush events and disable SDK. No client defined."); + return Promise.resolve(false); +} +__name(close$1, "close$1"); +function isInitialized() { + return !!getClient(); +} +__name(isInitialized, "isInitialized"); +function isEnabled() { + const client = getClient(); + return !!client && client.getOptions().enabled !== false && !!client.getTransport(); +} +__name(isEnabled, "isEnabled"); +function addEventProcessor(callback) { + getIsolationScope().addEventProcessor(callback); +} +__name(addEventProcessor, "addEventProcessor"); +function startSession(context) { + const client = getClient(); + const isolationScope = getIsolationScope(); + const currentScope = getCurrentScope$1(); + const { release, environment = DEFAULT_ENVIRONMENT } = client && client.getOptions() || {}; + const { userAgent } = GLOBAL_OBJ.navigator || {}; + const session = makeSession$1({ + release, + environment, + user: currentScope.getUser() || isolationScope.getUser(), + ...userAgent && { userAgent }, + ...context + }); + const currentSession = isolationScope.getSession(); + if (currentSession && currentSession.status === "ok") { + updateSession(currentSession, { status: "exited" }); + } + endSession(); + isolationScope.setSession(session); + currentScope.setSession(session); + return session; +} +__name(startSession, "startSession"); +function endSession() { + const isolationScope = getIsolationScope(); + const currentScope = getCurrentScope$1(); + const session = currentScope.getSession() || isolationScope.getSession(); + if (session) { + closeSession(session); + } + _sendSessionUpdate$1(); + isolationScope.setSession(); + currentScope.setSession(); +} +__name(endSession, "endSession"); +function _sendSessionUpdate$1() { + const isolationScope = getIsolationScope(); + const currentScope = getCurrentScope$1(); + const client = getClient(); + const session = currentScope.getSession() || isolationScope.getSession(); + if (session && client) { + client.captureSession(session); + } +} +__name(_sendSessionUpdate$1, "_sendSessionUpdate$1"); +function captureSession(end = false) { + if (end) { + endSession(); + return; + } + _sendSessionUpdate$1(); +} +__name(captureSession, "captureSession"); +class SessionFlusher { + static { + __name(this, "SessionFlusher"); + } + // We adjust the type here to add the `unref()` part, as setInterval can technically return a number or a NodeJS.Timer + constructor(client, attrs6) { + this._client = client; + this.flushTimeout = 60; + this._pendingAggregates = /* @__PURE__ */ new Map(); + this._isEnabled = true; + this._intervalId = setInterval(() => this.flush(), this.flushTimeout * 1e3); + if (this._intervalId.unref) { + this._intervalId.unref(); + } + this._sessionAttrs = attrs6; + } + /** Checks if `pendingAggregates` has entries, and if it does flushes them by calling `sendSession` */ + flush() { + const sessionAggregates = this.getSessionAggregates(); + if (sessionAggregates.aggregates.length === 0) { + return; + } + this._pendingAggregates = /* @__PURE__ */ new Map(); + this._client.sendSession(sessionAggregates); + } + /** Massages the entries in `pendingAggregates` and returns aggregated sessions */ + getSessionAggregates() { + const aggregates = Array.from(this._pendingAggregates.values()); + const sessionAggregates = { + attrs: this._sessionAttrs, + aggregates + }; + return dropUndefinedKeys(sessionAggregates); + } + /** JSDoc */ + close() { + clearInterval(this._intervalId); + this._isEnabled = false; + this.flush(); + } + /** + * Wrapper function for _incrementSessionStatusCount that checks if the instance of SessionFlusher is enabled then + * fetches the session status of the request from `Scope.getRequestSession().status` on the scope and passes them to + * `_incrementSessionStatusCount` along with the start date + */ + incrementSessionStatusCount() { + if (!this._isEnabled) { + return; + } + const isolationScope = getIsolationScope(); + const requestSession = isolationScope.getRequestSession(); + if (requestSession && requestSession.status) { + this._incrementSessionStatusCount(requestSession.status, /* @__PURE__ */ new Date()); + isolationScope.setRequestSession(void 0); + } + } + /** + * Increments status bucket in pendingAggregates buffer (internal state) corresponding to status of + * the session received + */ + // eslint-disable-next-line deprecation/deprecation + _incrementSessionStatusCount(status, date) { + const sessionStartedTrunc = new Date(date).setSeconds(0, 0); + let aggregationCounts = this._pendingAggregates.get(sessionStartedTrunc); + if (!aggregationCounts) { + aggregationCounts = { started: new Date(sessionStartedTrunc).toISOString() }; + this._pendingAggregates.set(sessionStartedTrunc, aggregationCounts); + } + switch (status) { + case "errored": + aggregationCounts.errored = (aggregationCounts.errored || 0) + 1; + return aggregationCounts.errored; + case "ok": + aggregationCounts.exited = (aggregationCounts.exited || 0) + 1; + return aggregationCounts.exited; + default: + aggregationCounts.crashed = (aggregationCounts.crashed || 0) + 1; + return aggregationCounts.crashed; + } + } +} +const SENTRY_API_VERSION = "7"; +function getBaseApiEndpoint(dsn) { + const protocol = dsn.protocol ? `${dsn.protocol}:` : ""; + const port = dsn.port ? `:${dsn.port}` : ""; + return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ""}/api/`; +} +__name(getBaseApiEndpoint, "getBaseApiEndpoint"); +function _getIngestEndpoint(dsn) { + return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`; +} +__name(_getIngestEndpoint, "_getIngestEndpoint"); +function _encodedAuth(dsn, sdkInfo) { + const params = { + sentry_version: SENTRY_API_VERSION + }; + if (dsn.publicKey) { + params.sentry_key = dsn.publicKey; + } + if (sdkInfo) { + params.sentry_client = `${sdkInfo.name}/${sdkInfo.version}`; + } + return new URLSearchParams(params).toString(); +} +__name(_encodedAuth, "_encodedAuth"); +function getEnvelopeEndpointWithUrlEncodedAuth(dsn, tunnel, sdkInfo) { + return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`; +} +__name(getEnvelopeEndpointWithUrlEncodedAuth, "getEnvelopeEndpointWithUrlEncodedAuth"); +function getReportDialogEndpoint(dsnLike, dialogOptions) { + const dsn = makeDsn(dsnLike); + if (!dsn) { + return ""; + } + const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`; + let encodedOptions = `dsn=${dsnToString(dsn)}`; + for (const key in dialogOptions) { + if (key === "dsn") { + continue; + } + if (key === "onClose") { + continue; + } + if (key === "user") { + const user = dialogOptions.user; + if (!user) { + continue; + } + if (user.name) { + encodedOptions += `&name=${encodeURIComponent(user.name)}`; + } + if (user.email) { + encodedOptions += `&email=${encodeURIComponent(user.email)}`; + } + } else { + encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key])}`; + } + } + return `${endpoint}?${encodedOptions}`; +} +__name(getReportDialogEndpoint, "getReportDialogEndpoint"); +const installedIntegrations = []; +function filterDuplicates(integrations) { + const integrationsByName = {}; + integrations.forEach((currentInstance2) => { + const { name: name2 } = currentInstance2; + const existingInstance = integrationsByName[name2]; + if (existingInstance && !existingInstance.isDefaultInstance && currentInstance2.isDefaultInstance) { + return; + } + integrationsByName[name2] = currentInstance2; + }); + return Object.values(integrationsByName); +} +__name(filterDuplicates, "filterDuplicates"); +function getIntegrationsToSetup(options4) { + const defaultIntegrations = options4.defaultIntegrations || []; + const userIntegrations = options4.integrations; + defaultIntegrations.forEach((integration) => { + integration.isDefaultInstance = true; + }); + let integrations; + if (Array.isArray(userIntegrations)) { + integrations = [...defaultIntegrations, ...userIntegrations]; + } else if (typeof userIntegrations === "function") { + const resolvedUserIntegrations = userIntegrations(defaultIntegrations); + integrations = Array.isArray(resolvedUserIntegrations) ? resolvedUserIntegrations : [resolvedUserIntegrations]; + } else { + integrations = defaultIntegrations; + } + const finalIntegrations = filterDuplicates(integrations); + const debugIndex = finalIntegrations.findIndex((integration) => integration.name === "Debug"); + if (debugIndex > -1) { + const [debugInstance] = finalIntegrations.splice(debugIndex, 1); + finalIntegrations.push(debugInstance); + } + return finalIntegrations; +} +__name(getIntegrationsToSetup, "getIntegrationsToSetup"); +function setupIntegrations(client, integrations) { + const integrationIndex = {}; + integrations.forEach((integration) => { + if (integration) { + setupIntegration(client, integration, integrationIndex); + } + }); + return integrationIndex; +} +__name(setupIntegrations, "setupIntegrations"); +function afterSetupIntegrations(client, integrations) { + for (const integration of integrations) { + if (integration && integration.afterAllSetup) { + integration.afterAllSetup(client); + } + } +} +__name(afterSetupIntegrations, "afterSetupIntegrations"); +function setupIntegration(client, integration, integrationIndex) { + if (integrationIndex[integration.name]) { + DEBUG_BUILD$6 && logger$2.log(`Integration skipped because it was already installed: ${integration.name}`); + return; + } + integrationIndex[integration.name] = integration; + if (installedIntegrations.indexOf(integration.name) === -1 && typeof integration.setupOnce === "function") { + integration.setupOnce(); + installedIntegrations.push(integration.name); + } + if (integration.setup && typeof integration.setup === "function") { + integration.setup(client); + } + if (typeof integration.preprocessEvent === "function") { + const callback = integration.preprocessEvent.bind(integration); + client.on("preprocessEvent", (event, hint) => callback(event, hint, client)); + } + if (typeof integration.processEvent === "function") { + const callback = integration.processEvent.bind(integration); + const processor = Object.assign((event, hint) => callback(event, hint, client), { + id: integration.name + }); + client.addEventProcessor(processor); + } + DEBUG_BUILD$6 && logger$2.log(`Integration installed: ${integration.name}`); +} +__name(setupIntegration, "setupIntegration"); +function addIntegration(integration) { + const client = getClient(); + if (!client) { + DEBUG_BUILD$6 && logger$2.warn(`Cannot add integration "${integration.name}" because no SDK Client is available.`); + return; + } + client.addIntegration(integration); +} +__name(addIntegration, "addIntegration"); +function defineIntegration(fn) { + return fn; +} +__name(defineIntegration, "defineIntegration"); +function createClientReportEnvelope(discarded_events, dsn, timestamp2) { + const clientReportItem = [ + { type: "client_report" }, + { + timestamp: timestamp2 || dateTimestampInSeconds(), + discarded_events + } + ]; + return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]); +} +__name(createClientReportEnvelope, "createClientReportEnvelope"); +class SentryError extends Error { + static { + __name(this, "SentryError"); + } + /** Display name of this error instance. */ + constructor(message3, logLevel = "warn") { + super(message3); + this.message = message3; + this.name = new.target.prototype.constructor.name; + Object.setPrototypeOf(this, new.target.prototype); + this.logLevel = logLevel; + } +} +const ALREADY_SEEN_ERROR = "Not capturing exception because it's already been captured."; +class BaseClient { + static { + __name(this, "BaseClient"); + } + /** Options passed to the SDK. */ + /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */ + /** Array of set up integrations. */ + /** Number of calls being processed */ + /** Holds flushable */ + // eslint-disable-next-line @typescript-eslint/ban-types + /** + * Initializes this client instance. + * + * @param options Options for the client. + */ + constructor(options4) { + this._options = options4; + this._integrations = {}; + this._numProcessing = 0; + this._outcomes = {}; + this._hooks = {}; + this._eventProcessors = []; + if (options4.dsn) { + this._dsn = makeDsn(options4.dsn); + } else { + DEBUG_BUILD$6 && logger$2.warn("No DSN provided, client will not send events."); + } + if (this._dsn) { + const url = getEnvelopeEndpointWithUrlEncodedAuth( + this._dsn, + options4.tunnel, + options4._metadata ? options4._metadata.sdk : void 0 + ); + this._transport = options4.transport({ + tunnel: this._options.tunnel, + recordDroppedEvent: this.recordDroppedEvent.bind(this), + ...options4.transportOptions, + url + }); + } + const tracingOptions = ["enableTracing", "tracesSampleRate", "tracesSampler"]; + const undefinedOption = tracingOptions.find((option3) => option3 in options4 && options4[option3] == void 0); + if (undefinedOption) { + consoleSandbox(() => { + console.warn( + `[Sentry] Deprecation warning: \`${undefinedOption}\` is set to undefined, which leads to tracing being enabled. In v9, a value of \`undefined\` will result in tracing being disabled.` + ); + }); + } + } + /** + * @inheritDoc + */ + captureException(exception, hint, scope) { + const eventId = uuid4(); + if (checkOrSetAlreadyCaught(exception)) { + DEBUG_BUILD$6 && logger$2.log(ALREADY_SEEN_ERROR); + return eventId; + } + const hintWithEventId = { + event_id: eventId, + ...hint + }; + this._process( + this.eventFromException(exception, hintWithEventId).then( + (event) => this._captureEvent(event, hintWithEventId, scope) + ) + ); + return hintWithEventId.event_id; + } + /** + * @inheritDoc + */ + captureMessage(message3, level, hint, currentScope) { + const hintWithEventId = { + event_id: uuid4(), + ...hint + }; + const eventMessage = isParameterizedString(message3) ? message3 : String(message3); + const promisedEvent = isPrimitive(message3) ? this.eventFromMessage(eventMessage, level, hintWithEventId) : this.eventFromException(message3, hintWithEventId); + this._process(promisedEvent.then((event) => this._captureEvent(event, hintWithEventId, currentScope))); + return hintWithEventId.event_id; + } + /** + * @inheritDoc + */ + captureEvent(event, hint, currentScope) { + const eventId = uuid4(); + if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) { + DEBUG_BUILD$6 && logger$2.log(ALREADY_SEEN_ERROR); + return eventId; + } + const hintWithEventId = { + event_id: eventId, + ...hint + }; + const sdkProcessingMetadata = event.sdkProcessingMetadata || {}; + const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope; + this._process(this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope)); + return hintWithEventId.event_id; + } + /** + * @inheritDoc + */ + captureSession(session) { + if (!(typeof session.release === "string")) { + DEBUG_BUILD$6 && logger$2.warn("Discarded session because of missing or non-string release"); + } else { + this.sendSession(session); + updateSession(session, { init: false }); + } + } + /** + * @inheritDoc + */ + getDsn() { + return this._dsn; + } + /** + * @inheritDoc + */ + getOptions() { + return this._options; + } + /** + * @see SdkMetadata + * + * @return The metadata of the SDK + */ + getSdkMetadata() { + return this._options._metadata; + } + /** + * @inheritDoc + */ + getTransport() { + return this._transport; + } + /** + * @inheritDoc + */ + flush(timeout) { + const transport = this._transport; + if (transport) { + this.emit("flush"); + return this._isClientDoneProcessing(timeout).then((clientFinished) => { + return transport.flush(timeout).then((transportFlushed) => clientFinished && transportFlushed); + }); + } else { + return resolvedSyncPromise(true); + } + } + /** + * @inheritDoc + */ + close(timeout) { + return this.flush(timeout).then((result) => { + this.getOptions().enabled = false; + this.emit("close"); + return result; + }); + } + /** Get all installed event processors. */ + getEventProcessors() { + return this._eventProcessors; + } + /** @inheritDoc */ + addEventProcessor(eventProcessor) { + this._eventProcessors.push(eventProcessor); + } + /** @inheritdoc */ + init() { + if (this._isEnabled() || // Force integrations to be setup even if no DSN was set when we have + // Spotlight enabled. This is particularly important for browser as we + // don't support the `spotlight` option there and rely on the users + // adding the `spotlightBrowserIntegration()` to their integrations which + // wouldn't get initialized with the check below when there's no DSN set. + this._options.integrations.some(({ name: name2 }) => name2.startsWith("Spotlight"))) { + this._setupIntegrations(); + } + } + /** + * Gets an installed integration by its name. + * + * @returns The installed integration or `undefined` if no integration with that `name` was installed. + */ + getIntegrationByName(integrationName) { + return this._integrations[integrationName]; + } + /** + * @inheritDoc + */ + addIntegration(integration) { + const isAlreadyInstalled = this._integrations[integration.name]; + setupIntegration(this, integration, this._integrations); + if (!isAlreadyInstalled) { + afterSetupIntegrations(this, [integration]); + } + } + /** + * @inheritDoc + */ + sendEvent(event, hint = {}) { + this.emit("beforeSendEvent", event, hint); + let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel); + for (const attachment of hint.attachments || []) { + env = addItemToEnvelope(env, createAttachmentEnvelopeItem(attachment)); + } + const promise = this.sendEnvelope(env); + if (promise) { + promise.then((sendResponse) => this.emit("afterSendEvent", event, sendResponse), null); + } + } + /** + * @inheritDoc + */ + sendSession(session) { + const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel); + this.sendEnvelope(env); + } + /** + * @inheritDoc + */ + recordDroppedEvent(reason, category, eventOrCount) { + if (this._options.sendClientReports) { + const count = typeof eventOrCount === "number" ? eventOrCount : 1; + const key = `${reason}:${category}`; + DEBUG_BUILD$6 && logger$2.log(`Recording outcome: "${key}"${count > 1 ? ` (${count} times)` : ""}`); + this._outcomes[key] = (this._outcomes[key] || 0) + count; + } + } + // Keep on() & emit() signatures in sync with types' client.ts interface + /* eslint-disable @typescript-eslint/unified-signatures */ + /** @inheritdoc */ + /** @inheritdoc */ + on(hook, callback) { + const hooks2 = this._hooks[hook] = this._hooks[hook] || []; + hooks2.push(callback); + return () => { + const cbIndex = hooks2.indexOf(callback); + if (cbIndex > -1) { + hooks2.splice(cbIndex, 1); + } + }; + } + /** @inheritdoc */ + /** @inheritdoc */ + emit(hook, ...rest) { + const callbacks = this._hooks[hook]; + if (callbacks) { + callbacks.forEach((callback) => callback(...rest)); + } + } + /** + * @inheritdoc + */ + sendEnvelope(envelope) { + this.emit("beforeEnvelope", envelope); + if (this._isEnabled() && this._transport) { + return this._transport.send(envelope).then(null, (reason) => { + DEBUG_BUILD$6 && logger$2.error("Error while sending envelope:", reason); + return reason; + }); + } + DEBUG_BUILD$6 && logger$2.error("Transport disabled"); + return resolvedSyncPromise({}); + } + /* eslint-enable @typescript-eslint/unified-signatures */ + /** Setup integrations for this client. */ + _setupIntegrations() { + const { integrations } = this._options; + this._integrations = setupIntegrations(this, integrations); + afterSetupIntegrations(this, integrations); + } + /** Updates existing session based on the provided event */ + _updateSessionFromEvent(session, event) { + let crashed = false; + let errored = false; + const exceptions = event.exception && event.exception.values; + if (exceptions) { + errored = true; + for (const ex of exceptions) { + const mechanism = ex.mechanism; + if (mechanism && mechanism.handled === false) { + crashed = true; + break; + } + } + } + const sessionNonTerminal = session.status === "ok"; + const shouldUpdateAndSend = sessionNonTerminal && session.errors === 0 || sessionNonTerminal && crashed; + if (shouldUpdateAndSend) { + updateSession(session, { + ...crashed && { status: "crashed" }, + errors: session.errors || Number(errored || crashed) + }); + this.captureSession(session); + } + } + /** + * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying + * "no" (resolving to `false`) in order to give the client a chance to potentially finish first. + * + * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not + * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to + * `true`. + * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and + * `false` otherwise + */ + _isClientDoneProcessing(timeout) { + return new SyncPromise((resolve2) => { + let ticked = 0; + const tick = 1; + const interval = setInterval(() => { + if (this._numProcessing == 0) { + clearInterval(interval); + resolve2(true); + } else { + ticked += tick; + if (timeout && ticked >= timeout) { + clearInterval(interval); + resolve2(false); + } + } + }, tick); + }); + } + /** Determines whether this SDK is enabled and a transport is present. */ + _isEnabled() { + return this.getOptions().enabled !== false && this._transport !== void 0; + } + /** + * Adds common information to events. + * + * The information includes release and environment from `options`, + * breadcrumbs and context (extra, tags and user) from the scope. + * + * Information that is already present in the event is never overwritten. For + * nested objects, such as the context, keys are merged. + * + * @param event The original event. + * @param hint May contain additional information about the original exception. + * @param currentScope A scope containing event metadata. + * @returns A new event with more information. + */ + _prepareEvent(event, hint, currentScope = getCurrentScope$1(), isolationScope = getIsolationScope()) { + const options4 = this.getOptions(); + const integrations = Object.keys(this._integrations); + if (!hint.integrations && integrations.length > 0) { + hint.integrations = integrations; + } + this.emit("preprocessEvent", event, hint); + if (!event.type) { + isolationScope.setLastEventId(event.event_id || hint.event_id); + } + return prepareEvent(options4, event, hint, currentScope, this, isolationScope).then((evt) => { + if (evt === null) { + return evt; + } + evt.contexts = { + trace: getTraceContextFromScope(currentScope), + ...evt.contexts + }; + const dynamicSamplingContext = getDynamicSamplingContextFromScope(this, currentScope); + evt.sdkProcessingMetadata = { + dynamicSamplingContext, + ...evt.sdkProcessingMetadata + }; + return evt; + }); + } + /** + * Processes the event and logs an error in case of rejection + * @param event + * @param hint + * @param scope + */ + _captureEvent(event, hint = {}, scope) { + return this._processEvent(event, hint, scope).then( + (finalEvent) => { + return finalEvent.event_id; + }, + (reason) => { + if (DEBUG_BUILD$6) { + const sentryError = reason; + if (sentryError.logLevel === "log") { + logger$2.log(sentryError.message); + } else { + logger$2.warn(sentryError); + } + } + return void 0; + } + ); + } + /** + * Processes an event (either error or message) and sends it to Sentry. + * + * This also adds breadcrumbs and context information to the event. However, + * platform specific meta data (such as the User's IP address) must be added + * by the SDK implementor. + * + * + * @param event The event to send to Sentry. + * @param hint May contain additional information about the original exception. + * @param currentScope A scope containing event metadata. + * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send. + */ + _processEvent(event, hint, currentScope) { + const options4 = this.getOptions(); + const { sampleRate } = options4; + const isTransaction = isTransactionEvent$1(event); + const isError2 = isErrorEvent$1(event); + const eventType = event.type || "error"; + const beforeSendLabel = `before send for type \`${eventType}\``; + const parsedSampleRate = typeof sampleRate === "undefined" ? void 0 : parseSampleRate(sampleRate); + if (isError2 && typeof parsedSampleRate === "number" && Math.random() > parsedSampleRate) { + this.recordDroppedEvent("sample_rate", "error", event); + return rejectedSyncPromise( + new SentryError( + `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`, + "log" + ) + ); + } + const dataCategory = eventType === "replay_event" ? "replay" : eventType; + const sdkProcessingMetadata = event.sdkProcessingMetadata || {}; + const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope; + return this._prepareEvent(event, hint, currentScope, capturedSpanIsolationScope).then((prepared) => { + if (prepared === null) { + this.recordDroppedEvent("event_processor", dataCategory, event); + throw new SentryError("An event processor returned `null`, will not send event.", "log"); + } + const isInternalException = hint.data && hint.data.__sentry__ === true; + if (isInternalException) { + return prepared; + } + const result = processBeforeSend(this, options4, prepared, hint); + return _validateBeforeSendResult(result, beforeSendLabel); + }).then((processedEvent) => { + if (processedEvent === null) { + this.recordDroppedEvent("before_send", dataCategory, event); + if (isTransaction) { + const spans = event.spans || []; + const spanCount = 1 + spans.length; + this.recordDroppedEvent("before_send", "span", spanCount); + } + throw new SentryError(`${beforeSendLabel} returned \`null\`, will not send event.`, "log"); + } + const session = currentScope && currentScope.getSession(); + if (!isTransaction && session) { + this._updateSessionFromEvent(session, processedEvent); + } + if (isTransaction) { + const spanCountBefore = processedEvent.sdkProcessingMetadata && processedEvent.sdkProcessingMetadata.spanCountBeforeProcessing || 0; + const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0; + const droppedSpanCount = spanCountBefore - spanCountAfter; + if (droppedSpanCount > 0) { + this.recordDroppedEvent("before_send", "span", droppedSpanCount); + } + } + const transactionInfo = processedEvent.transaction_info; + if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) { + const source = "custom"; + processedEvent.transaction_info = { + ...transactionInfo, + source + }; + } + this.sendEvent(processedEvent, hint); + return processedEvent; + }).then(null, (reason) => { + if (reason instanceof SentryError) { + throw reason; + } + this.captureException(reason, { + data: { + __sentry__: true + }, + originalException: reason + }); + throw new SentryError( + `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. +Reason: ${reason}` + ); + }); + } + /** + * Occupies the client with processing and event + */ + _process(promise) { + this._numProcessing++; + void promise.then( + (value4) => { + this._numProcessing--; + return value4; + }, + (reason) => { + this._numProcessing--; + return reason; + } + ); + } + /** + * Clears outcomes on this client and returns them. + */ + _clearOutcomes() { + const outcomes = this._outcomes; + this._outcomes = {}; + return Object.entries(outcomes).map(([key, quantity]) => { + const [reason, category] = key.split(":"); + return { + reason, + category, + quantity + }; + }); + } + /** + * Sends client reports as an envelope. + */ + _flushOutcomes() { + DEBUG_BUILD$6 && logger$2.log("Flushing outcomes..."); + const outcomes = this._clearOutcomes(); + if (outcomes.length === 0) { + DEBUG_BUILD$6 && logger$2.log("No outcomes to send"); + return; + } + if (!this._dsn) { + DEBUG_BUILD$6 && logger$2.log("No dsn provided, will not send outcomes"); + return; + } + DEBUG_BUILD$6 && logger$2.log("Sending outcomes:", outcomes); + const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn)); + this.sendEnvelope(envelope); + } + /** + * @inheritDoc + */ +} +function _validateBeforeSendResult(beforeSendResult, beforeSendLabel) { + const invalidValueError = `${beforeSendLabel} must return \`null\` or a valid event.`; + if (isThenable$1(beforeSendResult)) { + return beforeSendResult.then( + (event) => { + if (!isPlainObject$5(event) && event !== null) { + throw new SentryError(invalidValueError); + } + return event; + }, + (e2) => { + throw new SentryError(`${beforeSendLabel} rejected with ${e2}`); + } + ); + } else if (!isPlainObject$5(beforeSendResult) && beforeSendResult !== null) { + throw new SentryError(invalidValueError); + } + return beforeSendResult; +} +__name(_validateBeforeSendResult, "_validateBeforeSendResult"); +function processBeforeSend(client, options4, event, hint) { + const { beforeSend, beforeSendTransaction, beforeSendSpan } = options4; + if (isErrorEvent$1(event) && beforeSend) { + return beforeSend(event, hint); + } + if (isTransactionEvent$1(event)) { + if (event.spans && beforeSendSpan) { + const processedSpans = []; + for (const span of event.spans) { + const processedSpan = beforeSendSpan(span); + if (processedSpan) { + processedSpans.push(processedSpan); + } else { + showSpanDropWarning(); + client.recordDroppedEvent("before_send", "span"); + } + } + event.spans = processedSpans; + } + if (beforeSendTransaction) { + if (event.spans) { + const spanCountBefore = event.spans.length; + event.sdkProcessingMetadata = { + ...event.sdkProcessingMetadata, + spanCountBeforeProcessing: spanCountBefore + }; + } + return beforeSendTransaction(event, hint); + } + } + return event; +} +__name(processBeforeSend, "processBeforeSend"); +function isErrorEvent$1(event) { + return event.type === void 0; +} +__name(isErrorEvent$1, "isErrorEvent$1"); +function isTransactionEvent$1(event) { + return event.type === "transaction"; +} +__name(isTransactionEvent$1, "isTransactionEvent$1"); +function createCheckInEnvelope(checkIn, dynamicSamplingContext, metadata, tunnel, dsn) { + const headers = { + sent_at: (/* @__PURE__ */ new Date()).toISOString() + }; + if (metadata && metadata.sdk) { + headers.sdk = { + name: metadata.sdk.name, + version: metadata.sdk.version + }; + } + if (!!tunnel && !!dsn) { + headers.dsn = dsnToString(dsn); + } + if (dynamicSamplingContext) { + headers.trace = dropUndefinedKeys(dynamicSamplingContext); + } + const item3 = createCheckInEnvelopeItem(checkIn); + return createEnvelope(headers, [item3]); +} +__name(createCheckInEnvelope, "createCheckInEnvelope"); +function createCheckInEnvelopeItem(checkIn) { + const checkInHeaders = { + type: "check_in" + }; + return [checkInHeaders, checkIn]; +} +__name(createCheckInEnvelopeItem, "createCheckInEnvelopeItem"); +function parseStackFrames$1(stackParser, error2) { + return stackParser(error2.stack || "", 1); +} +__name(parseStackFrames$1, "parseStackFrames$1"); +function exceptionFromError$1(stackParser, error2) { + const exception = { + type: error2.name || error2.constructor.name, + value: error2.message + }; + const frames = parseStackFrames$1(stackParser, error2); + if (frames.length) { + exception.stacktrace = { frames }; + } + return exception; +} +__name(exceptionFromError$1, "exceptionFromError$1"); +function getErrorPropertyFromObject$1(obj) { + for (const prop2 in obj) { + if (Object.prototype.hasOwnProperty.call(obj, prop2)) { + const value4 = obj[prop2]; + if (value4 instanceof Error) { + return value4; + } + } + } + return void 0; +} +__name(getErrorPropertyFromObject$1, "getErrorPropertyFromObject$1"); +function getMessageForObject(exception) { + if ("name" in exception && typeof exception.name === "string") { + let message3 = `'${exception.name}' captured as exception`; + if ("message" in exception && typeof exception.message === "string") { + message3 += ` with message '${exception.message}'`; + } + return message3; + } else if ("message" in exception && typeof exception.message === "string") { + return exception.message; + } + const keys2 = extractExceptionKeysForMessage(exception); + if (isErrorEvent$2(exception)) { + return `Event \`ErrorEvent\` captured as exception with message \`${exception.message}\``; + } + const className = getObjectClassName$1(exception); + return `${className && className !== "Object" ? `'${className}'` : "Object"} captured as exception with keys: ${keys2}`; +} +__name(getMessageForObject, "getMessageForObject"); +function getObjectClassName$1(obj) { + try { + const prototype2 = Object.getPrototypeOf(obj); + return prototype2 ? prototype2.constructor.name : void 0; + } catch (e2) { + } +} +__name(getObjectClassName$1, "getObjectClassName$1"); +function getException(client, mechanism, exception, hint) { + if (isError(exception)) { + return [exception, void 0]; + } + mechanism.synthetic = true; + if (isPlainObject$5(exception)) { + const normalizeDepth = client && client.getOptions().normalizeDepth; + const extras = { ["__serialized__"]: normalizeToSize(exception, normalizeDepth) }; + const errorFromProp = getErrorPropertyFromObject$1(exception); + if (errorFromProp) { + return [errorFromProp, extras]; + } + const message3 = getMessageForObject(exception); + const ex2 = hint && hint.syntheticException || new Error(message3); + ex2.message = message3; + return [ex2, extras]; + } + const ex = hint && hint.syntheticException || new Error(exception); + ex.message = `${exception}`; + return [ex, void 0]; +} +__name(getException, "getException"); +function eventFromUnknownInput$1(client, stackParser, exception, hint) { + const providedMechanism = hint && hint.data && hint.data.mechanism; + const mechanism = providedMechanism || { + handled: true, + type: "generic" + }; + const [ex, extras] = getException(client, mechanism, exception, hint); + const event = { + exception: { + values: [exceptionFromError$1(stackParser, ex)] + } + }; + if (extras) { + event.extra = extras; + } + addExceptionTypeValue(event, void 0, void 0); + addExceptionMechanism(event, mechanism); + return { + ...event, + event_id: hint && hint.event_id + }; +} +__name(eventFromUnknownInput$1, "eventFromUnknownInput$1"); +function eventFromMessage$1(stackParser, message3, level = "info", hint, attachStacktrace) { + const event = { + event_id: hint && hint.event_id, + level + }; + if (attachStacktrace && hint && hint.syntheticException) { + const frames = parseStackFrames$1(stackParser, hint.syntheticException); + if (frames.length) { + event.exception = { + values: [ + { + value: message3, + stacktrace: { frames } + } + ] + }; + addExceptionMechanism(event, { synthetic: true }); + } + } + if (isParameterizedString(message3)) { + const { __sentry_template_string__, __sentry_template_values__ } = message3; + event.logentry = { + message: __sentry_template_string__, + params: __sentry_template_values__ + }; + return event; + } + event.message = message3; + return event; +} +__name(eventFromMessage$1, "eventFromMessage$1"); +class ServerRuntimeClient extends BaseClient { + static { + __name(this, "ServerRuntimeClient"); + } + // eslint-disable-next-line deprecation/deprecation + /** + * Creates a new Edge SDK instance. + * @param options Configuration options for this SDK. + */ + constructor(options4) { + registerSpanErrorInstrumentation(); + super(options4); + } + /** + * @inheritDoc + */ + eventFromException(exception, hint) { + const event = eventFromUnknownInput$1(this, this._options.stackParser, exception, hint); + event.level = "error"; + return resolvedSyncPromise(event); + } + /** + * @inheritDoc + */ + eventFromMessage(message3, level = "info", hint) { + return resolvedSyncPromise( + eventFromMessage$1(this._options.stackParser, message3, level, hint, this._options.attachStacktrace) + ); + } + /** + * @inheritDoc + */ + captureException(exception, hint, scope) { + if (this._options.autoSessionTracking && this._sessionFlusher) { + const requestSession = getIsolationScope().getRequestSession(); + if (requestSession && requestSession.status === "ok") { + requestSession.status = "errored"; + } + } + return super.captureException(exception, hint, scope); + } + /** + * @inheritDoc + */ + captureEvent(event, hint, scope) { + if (this._options.autoSessionTracking && this._sessionFlusher) { + const eventType = event.type || "exception"; + const isException = eventType === "exception" && event.exception && event.exception.values && event.exception.values.length > 0; + if (isException) { + const requestSession = getIsolationScope().getRequestSession(); + if (requestSession && requestSession.status === "ok") { + requestSession.status = "errored"; + } + } + } + return super.captureEvent(event, hint, scope); + } + /** + * + * @inheritdoc + */ + close(timeout) { + if (this._sessionFlusher) { + this._sessionFlusher.close(); + } + return super.close(timeout); + } + /** + * Initializes an instance of SessionFlusher on the client which will aggregate and periodically flush session data. + * + * NOTICE: This method will implicitly create an interval that is periodically called. + * To clean up this resources, call `.close()` when you no longer intend to use the client. + * Not doing so will result in a memory leak. + */ + initSessionFlusher() { + const { release, environment } = this._options; + if (!release) { + DEBUG_BUILD$6 && logger$2.warn("Cannot initialize an instance of SessionFlusher if no release is provided!"); + } else { + this._sessionFlusher = new SessionFlusher(this, { + release, + environment + }); + } + } + /** + * Create a cron monitor check in and send it to Sentry. + * + * @param checkIn An object that describes a check in. + * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want + * to create a monitor automatically when sending a check in. + */ + captureCheckIn(checkIn, monitorConfig, scope) { + const id3 = "checkInId" in checkIn && checkIn.checkInId ? checkIn.checkInId : uuid4(); + if (!this._isEnabled()) { + DEBUG_BUILD$6 && logger$2.warn("SDK not enabled, will not capture checkin."); + return id3; + } + const options4 = this.getOptions(); + const { release, environment, tunnel } = options4; + const serializedCheckIn = { + check_in_id: id3, + monitor_slug: checkIn.monitorSlug, + status: checkIn.status, + release, + environment + }; + if ("duration" in checkIn) { + serializedCheckIn.duration = checkIn.duration; + } + if (monitorConfig) { + serializedCheckIn.monitor_config = { + schedule: monitorConfig.schedule, + checkin_margin: monitorConfig.checkinMargin, + max_runtime: monitorConfig.maxRuntime, + timezone: monitorConfig.timezone, + failure_issue_threshold: monitorConfig.failureIssueThreshold, + recovery_threshold: monitorConfig.recoveryThreshold + }; + } + const [dynamicSamplingContext, traceContext] = this._getTraceInfoFromScope(scope); + if (traceContext) { + serializedCheckIn.contexts = { + trace: traceContext + }; + } + const envelope = createCheckInEnvelope( + serializedCheckIn, + dynamicSamplingContext, + this.getSdkMetadata(), + tunnel, + this.getDsn() + ); + DEBUG_BUILD$6 && logger$2.info("Sending checkin:", checkIn.monitorSlug, checkIn.status); + this.sendEnvelope(envelope); + return id3; + } + /** + * Method responsible for capturing/ending a request session by calling `incrementSessionStatusCount` to increment + * appropriate session aggregates bucket + * + * @deprecated This method should not be used or extended. It's functionality will move into the `httpIntegration` and not be part of any public API. + */ + _captureRequestSession() { + if (!this._sessionFlusher) { + DEBUG_BUILD$6 && logger$2.warn("Discarded request mode session because autoSessionTracking option was disabled"); + } else { + this._sessionFlusher.incrementSessionStatusCount(); + } + } + /** + * @inheritDoc + */ + _prepareEvent(event, hint, scope, isolationScope) { + if (this._options.platform) { + event.platform = event.platform || this._options.platform; + } + if (this._options.runtime) { + event.contexts = { + ...event.contexts, + runtime: (event.contexts || {}).runtime || this._options.runtime + }; + } + if (this._options.serverName) { + event.server_name = event.server_name || this._options.serverName; + } + return super._prepareEvent(event, hint, scope, isolationScope); + } + /** Extract trace information from scope */ + _getTraceInfoFromScope(scope) { + if (!scope) { + return [void 0, void 0]; + } + const span = _getSpanForScope(scope); + const traceContext = span ? spanToTraceContext(span) : getTraceContextFromScope(scope); + const dynamicSamplingContext = span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromScope(this, scope); + return [dynamicSamplingContext, traceContext]; + } +} +function initAndBind(clientClass, options4) { + if (options4.debug === true) { + if (DEBUG_BUILD$6) { + logger$2.enable(); + } else { + consoleSandbox(() => { + console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle."); + }); + } + } + const scope = getCurrentScope$1(); + scope.update(options4.initialScope); + const client = new clientClass(options4); + setCurrentClient(client); + client.init(); + return client; +} +__name(initAndBind, "initAndBind"); +function setCurrentClient(client) { + getCurrentScope$1().setClient(client); +} +__name(setCurrentClient, "setCurrentClient"); +function makePromiseBuffer(limit) { + const buffer2 = []; + function isReady() { + return limit === void 0 || buffer2.length < limit; + } + __name(isReady, "isReady"); + function remove4(task) { + return buffer2.splice(buffer2.indexOf(task), 1)[0] || Promise.resolve(void 0); + } + __name(remove4, "remove"); + function add3(taskProducer) { + if (!isReady()) { + return rejectedSyncPromise(new SentryError("Not adding Promise because buffer limit was reached.")); + } + const task = taskProducer(); + if (buffer2.indexOf(task) === -1) { + buffer2.push(task); + } + void task.then(() => remove4(task)).then( + null, + () => remove4(task).then(null, () => { + }) + ); + return task; + } + __name(add3, "add"); + function drain(timeout) { + return new SyncPromise((resolve2, reject3) => { + let counter = buffer2.length; + if (!counter) { + return resolve2(true); + } + const capturedSetTimeout = setTimeout(() => { + if (timeout && timeout > 0) { + resolve2(false); + } + }, timeout); + buffer2.forEach((item3) => { + void resolvedSyncPromise(item3).then(() => { + if (!--counter) { + clearTimeout(capturedSetTimeout); + resolve2(true); + } + }, reject3); + }); + }); + } + __name(drain, "drain"); + return { + $: buffer2, + add: add3, + drain + }; +} +__name(makePromiseBuffer, "makePromiseBuffer"); +const DEFAULT_RETRY_AFTER = 60 * 1e3; +function parseRetryAfterHeader(header3, now2 = Date.now()) { + const headerDelay = parseInt(`${header3}`, 10); + if (!isNaN(headerDelay)) { + return headerDelay * 1e3; + } + const headerDate = Date.parse(`${header3}`); + if (!isNaN(headerDate)) { + return headerDate - now2; + } + return DEFAULT_RETRY_AFTER; +} +__name(parseRetryAfterHeader, "parseRetryAfterHeader"); +function disabledUntil(limits, dataCategory) { + return limits[dataCategory] || limits.all || 0; +} +__name(disabledUntil, "disabledUntil"); +function isRateLimited(limits, dataCategory, now2 = Date.now()) { + return disabledUntil(limits, dataCategory) > now2; +} +__name(isRateLimited, "isRateLimited"); +function updateRateLimits(limits, { statusCode, headers }, now2 = Date.now()) { + const updatedRateLimits = { + ...limits + }; + const rateLimitHeader = headers && headers["x-sentry-rate-limits"]; + const retryAfterHeader = headers && headers["retry-after"]; + if (rateLimitHeader) { + for (const limit of rateLimitHeader.trim().split(",")) { + const [retryAfter, categories, , , namespaces] = limit.split(":", 5); + const headerDelay = parseInt(retryAfter, 10); + const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1e3; + if (!categories) { + updatedRateLimits.all = now2 + delay; + } else { + for (const category of categories.split(";")) { + if (category === "metric_bucket") { + if (!namespaces || namespaces.split(";").includes("custom")) { + updatedRateLimits[category] = now2 + delay; + } + } else { + updatedRateLimits[category] = now2 + delay; + } + } + } + } + } else if (retryAfterHeader) { + updatedRateLimits.all = now2 + parseRetryAfterHeader(retryAfterHeader, now2); + } else if (statusCode === 429) { + updatedRateLimits.all = now2 + 60 * 1e3; + } + return updatedRateLimits; +} +__name(updateRateLimits, "updateRateLimits"); +const DEFAULT_TRANSPORT_BUFFER_SIZE = 64; +function createTransport(options4, makeRequest, buffer2 = makePromiseBuffer( + options4.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE +)) { + let rateLimits = {}; + const flush2 = /* @__PURE__ */ __name((timeout) => buffer2.drain(timeout), "flush"); + function send(envelope) { + const filteredEnvelopeItems = []; + forEachEnvelopeItem(envelope, (item3, type) => { + const dataCategory = envelopeItemTypeToDataCategory(type); + if (isRateLimited(rateLimits, dataCategory)) { + const event = getEventForEnvelopeItem(item3, type); + options4.recordDroppedEvent("ratelimit_backoff", dataCategory, event); + } else { + filteredEnvelopeItems.push(item3); + } + }); + if (filteredEnvelopeItems.length === 0) { + return resolvedSyncPromise({}); + } + const filteredEnvelope = createEnvelope(envelope[0], filteredEnvelopeItems); + const recordEnvelopeLoss = /* @__PURE__ */ __name((reason) => { + forEachEnvelopeItem(filteredEnvelope, (item3, type) => { + const event = getEventForEnvelopeItem(item3, type); + options4.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event); + }); + }, "recordEnvelopeLoss"); + const requestTask = /* @__PURE__ */ __name(() => makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then( + (response) => { + if (response.statusCode !== void 0 && (response.statusCode < 200 || response.statusCode >= 300)) { + DEBUG_BUILD$6 && logger$2.warn(`Sentry responded with status code ${response.statusCode} to sent event.`); + } + rateLimits = updateRateLimits(rateLimits, response); + return response; + }, + (error2) => { + recordEnvelopeLoss("network_error"); + throw error2; + } + ), "requestTask"); + return buffer2.add(requestTask).then( + (result) => result, + (error2) => { + if (error2 instanceof SentryError) { + DEBUG_BUILD$6 && logger$2.error("Skipped sending event because buffer is full."); + recordEnvelopeLoss("queue_overflow"); + return resolvedSyncPromise({}); + } else { + throw error2; + } + } + ); + } + __name(send, "send"); + return { + send, + flush: flush2 + }; +} +__name(createTransport, "createTransport"); +function getEventForEnvelopeItem(item3, type) { + if (type !== "event" && type !== "transaction") { + return void 0; + } + return Array.isArray(item3) ? item3[1] : void 0; +} +__name(getEventForEnvelopeItem, "getEventForEnvelopeItem"); +const MIN_DELAY = 100; +const START_DELAY = 5e3; +const MAX_DELAY = 36e5; +function makeOfflineTransport(createTransport2) { + function log2(...args) { + DEBUG_BUILD$6 && logger$2.info("[Offline]:", ...args); + } + __name(log2, "log"); + return (options4) => { + const transport = createTransport2(options4); + if (!options4.createStore) { + throw new Error("No `createStore` function was provided"); + } + const store = options4.createStore(options4); + let retryDelay = START_DELAY; + let flushTimer; + function shouldQueue(env, error2, retryDelay2) { + if (envelopeContainsItemType(env, ["client_report"])) { + return false; + } + if (options4.shouldStore) { + return options4.shouldStore(env, error2, retryDelay2); + } + return true; + } + __name(shouldQueue, "shouldQueue"); + function flushIn(delay) { + if (flushTimer) { + clearTimeout(flushTimer); + } + flushTimer = setTimeout(async () => { + flushTimer = void 0; + const found2 = await store.shift(); + if (found2) { + log2("Attempting to send previously queued event"); + found2[0].sent_at = (/* @__PURE__ */ new Date()).toISOString(); + void send(found2, true).catch((e2) => { + log2("Failed to retry sending", e2); + }); + } + }, delay); + if (typeof flushTimer !== "number" && flushTimer.unref) { + flushTimer.unref(); + } + } + __name(flushIn, "flushIn"); + function flushWithBackOff() { + if (flushTimer) { + return; + } + flushIn(retryDelay); + retryDelay = Math.min(retryDelay * 2, MAX_DELAY); + } + __name(flushWithBackOff, "flushWithBackOff"); + async function send(envelope, isRetry = false) { + if (!isRetry && envelopeContainsItemType(envelope, ["replay_event", "replay_recording"])) { + await store.push(envelope); + flushIn(MIN_DELAY); + return {}; + } + try { + const result = await transport.send(envelope); + let delay = MIN_DELAY; + if (result) { + if (result.headers && result.headers["retry-after"]) { + delay = parseRetryAfterHeader(result.headers["retry-after"]); + } else if (result.headers && result.headers["x-sentry-rate-limits"]) { + delay = 6e4; + } else if ((result.statusCode || 0) >= 400) { + return result; + } + } + flushIn(delay); + retryDelay = START_DELAY; + return result; + } catch (e2) { + if (await shouldQueue(envelope, e2, retryDelay)) { + if (isRetry) { + await store.unshift(envelope); + } else { + await store.push(envelope); + } + flushWithBackOff(); + log2("Error sending. Event queued.", e2); + return {}; + } else { + throw e2; + } + } + } + __name(send, "send"); + if (options4.flushAtStartup) { + flushWithBackOff(); + } + return { + send, + flush: /* @__PURE__ */ __name((t2) => transport.flush(t2), "flush") + }; + }; +} +__name(makeOfflineTransport, "makeOfflineTransport"); +function eventFromEnvelope(env, types) { + let event; + forEachEnvelopeItem(env, (item3, type) => { + if (types.includes(type)) { + event = Array.isArray(item3) ? item3[1] : void 0; + } + return !!event; + }); + return event; +} +__name(eventFromEnvelope, "eventFromEnvelope"); +function makeOverrideReleaseTransport(createTransport2, release) { + return (options4) => { + const transport = createTransport2(options4); + return { + ...transport, + send: /* @__PURE__ */ __name(async (envelope) => { + const event = eventFromEnvelope(envelope, ["event", "transaction", "profile", "replay_event"]); + if (event) { + event.release = release; + } + return transport.send(envelope); + }, "send") + }; + }; +} +__name(makeOverrideReleaseTransport, "makeOverrideReleaseTransport"); +function overrideDsn(envelope, dsn) { + return createEnvelope( + dsn ? { + ...envelope[0], + dsn + } : envelope[0], + envelope[1] + ); +} +__name(overrideDsn, "overrideDsn"); +function makeMultiplexedTransport(createTransport2, matcher) { + return (options4) => { + const fallbackTransport = createTransport2(options4); + const otherTransports = /* @__PURE__ */ new Map(); + function getTransport(dsn, release) { + const key = release ? `${dsn}:${release}` : dsn; + let transport = otherTransports.get(key); + if (!transport) { + const validatedDsn = dsnFromString(dsn); + if (!validatedDsn) { + return void 0; + } + const url = getEnvelopeEndpointWithUrlEncodedAuth(validatedDsn, options4.tunnel); + transport = release ? makeOverrideReleaseTransport(createTransport2, release)({ ...options4, url }) : createTransport2({ ...options4, url }); + otherTransports.set(key, transport); + } + return [dsn, transport]; + } + __name(getTransport, "getTransport"); + async function send(envelope) { + function getEvent(types) { + const eventTypes = types && types.length ? types : ["event"]; + return eventFromEnvelope(envelope, eventTypes); + } + __name(getEvent, "getEvent"); + const transports = matcher({ envelope, getEvent }).map((result) => { + if (typeof result === "string") { + return getTransport(result, void 0); + } else { + return getTransport(result.dsn, result.release); + } + }).filter((t2) => !!t2); + const transportsWithFallback = transports.length ? transports : [["", fallbackTransport]]; + const results = await Promise.all( + transportsWithFallback.map(([dsn, transport]) => transport.send(overrideDsn(envelope, dsn))) + ); + return results[0]; + } + __name(send, "send"); + async function flush2(timeout) { + const allTransports = [...otherTransports.values(), fallbackTransport]; + const results = await Promise.all(allTransports.map((transport) => transport.flush(timeout))); + return results.every((r2) => r2); + } + __name(flush2, "flush"); + return { + send, + flush: flush2 + }; + }; +} +__name(makeMultiplexedTransport, "makeMultiplexedTransport"); +function isSentryRequestUrl(url, client) { + const dsn = client && client.getDsn(); + const tunnel = client && client.getOptions().tunnel; + return checkDsn(url, dsn) || checkTunnel(url, tunnel); +} +__name(isSentryRequestUrl, "isSentryRequestUrl"); +function checkTunnel(url, tunnel) { + if (!tunnel) { + return false; + } + return removeTrailingSlash$1(url) === removeTrailingSlash$1(tunnel); +} +__name(checkTunnel, "checkTunnel"); +function checkDsn(url, dsn) { + return dsn ? url.includes(dsn.host) : false; +} +__name(checkDsn, "checkDsn"); +function removeTrailingSlash$1(str) { + return str[str.length - 1] === "/" ? str.slice(0, -1) : str; +} +__name(removeTrailingSlash$1, "removeTrailingSlash$1"); +function parameterize(strings, ...values) { + const formatted = new String(String.raw(strings, ...values)); + formatted.__sentry_template_string__ = strings.join("\0").replace(/%/g, "%%").replace(/\0/g, "%s"); + formatted.__sentry_template_values__ = values; + return formatted; +} +__name(parameterize, "parameterize"); +function applySdkMetadata(options4, name2, names = [name2], source = "npm") { + const metadata = options4._metadata || {}; + if (!metadata.sdk) { + metadata.sdk = { + name: `sentry.javascript.${name2}`, + packages: names.map((name3) => ({ + name: `${source}:@sentry/${name3}`, + version: SDK_VERSION + })), + version: SDK_VERSION + }; + } + options4._metadata = metadata; +} +__name(applySdkMetadata, "applySdkMetadata"); +function getTraceData(options4 = {}) { + const client = getClient(); + if (!isEnabled() || !client) { + return {}; + } + const carrier = getMainCarrier(); + const acs = getAsyncContextStrategy(carrier); + if (acs.getTraceData) { + return acs.getTraceData(options4); + } + const scope = getCurrentScope$1(); + const span = options4.span || getActiveSpan(); + const sentryTrace = span ? spanToTraceHeader(span) : scopeToTraceHeader(scope); + const dsc = span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromScope(client, scope); + const baggage = dynamicSamplingContextToSentryBaggageHeader(dsc); + const isValidSentryTraceHeader = TRACEPARENT_REGEXP.test(sentryTrace); + if (!isValidSentryTraceHeader) { + logger$2.warn("Invalid sentry-trace data. Cannot generate trace data"); + return {}; + } + return { + "sentry-trace": sentryTrace, + baggage + }; +} +__name(getTraceData, "getTraceData"); +function scopeToTraceHeader(scope) { + const { traceId, sampled, spanId } = scope.getPropagationContext(); + return generateSentryTraceHeader(traceId, spanId, sampled); +} +__name(scopeToTraceHeader, "scopeToTraceHeader"); +function getTraceMetaTags() { + return Object.entries(getTraceData()).map(([key, value4]) => ``).join("\n"); +} +__name(getTraceMetaTags, "getTraceMetaTags"); +const DEFAULT_BREADCRUMBS = 100; +function addBreadcrumb(breadcrumb, hint) { + const client = getClient(); + const isolationScope = getIsolationScope(); + if (!client) return; + const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = client.getOptions(); + if (maxBreadcrumbs <= 0) return; + const timestamp2 = dateTimestampInSeconds(); + const mergedBreadcrumb = { timestamp: timestamp2, ...breadcrumb }; + const finalBreadcrumb = beforeBreadcrumb ? consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) : mergedBreadcrumb; + if (finalBreadcrumb === null) return; + if (client.emit) { + client.emit("beforeAddBreadcrumb", finalBreadcrumb, hint); + } + isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs); +} +__name(addBreadcrumb, "addBreadcrumb"); +let originalFunctionToString; +const INTEGRATION_NAME$l = "FunctionToString"; +const SETUP_CLIENTS$1 = /* @__PURE__ */ new WeakMap(); +const _functionToStringIntegration = /* @__PURE__ */ __name(() => { + return { + name: INTEGRATION_NAME$l, + setupOnce() { + originalFunctionToString = Function.prototype.toString; + try { + Function.prototype.toString = function(...args) { + const originalFunction = getOriginalFunction(this); + const context = SETUP_CLIENTS$1.has(getClient()) && originalFunction !== void 0 ? originalFunction : this; + return originalFunctionToString.apply(context, args); + }; + } catch (e2) { + } + }, + setup(client) { + SETUP_CLIENTS$1.set(client, true); + } + }; +}, "_functionToStringIntegration"); +const functionToStringIntegration = defineIntegration(_functionToStringIntegration); +const DEFAULT_IGNORE_ERRORS = [ + /^Script error\.?$/, + /^Javascript error: Script error\.? on line 0$/, + /^ResizeObserver loop completed with undelivered notifications.$/, + // The browser logs this when a ResizeObserver handler takes a bit longer. Usually this is not an actual issue though. It indicates slowness. + /^Cannot redefine property: googletag$/, + // This is thrown when google tag manager is used in combination with an ad blocker + "undefined is not an object (evaluating 'a.L')", + // Random error that happens but not actionable or noticeable to end-users. + `can't redefine non-configurable property "solana"`, + // Probably a browser extension or custom browser (Brave) throwing this error + "vv().getRestrictions is not a function. (In 'vv().getRestrictions(1,a)', 'vv().getRestrictions' is undefined)", + // Error thrown by GTM, seemingly not affecting end-users + "Can't find variable: _AutofillCallbackHandler", + // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/ + /^Non-Error promise rejection captured with value: Object Not Found Matching Id:\d+, MethodName:simulateEvent, ParamCount:\d+$/ + // unactionable error from CEFSharp, a .NET library that embeds chromium in .NET apps +]; +const INTEGRATION_NAME$k = "InboundFilters"; +const _inboundFiltersIntegration = /* @__PURE__ */ __name((options4 = {}) => { + return { + name: INTEGRATION_NAME$k, + processEvent(event, _hint, client) { + const clientOptions = client.getOptions(); + const mergedOptions = _mergeOptions(options4, clientOptions); + return _shouldDropEvent$1(event, mergedOptions) ? null : event; + } + }; +}, "_inboundFiltersIntegration"); +const inboundFiltersIntegration = defineIntegration(_inboundFiltersIntegration); +function _mergeOptions(internalOptions = {}, clientOptions = {}) { + return { + allowUrls: [...internalOptions.allowUrls || [], ...clientOptions.allowUrls || []], + denyUrls: [...internalOptions.denyUrls || [], ...clientOptions.denyUrls || []], + ignoreErrors: [ + ...internalOptions.ignoreErrors || [], + ...clientOptions.ignoreErrors || [], + ...internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS + ], + ignoreTransactions: [...internalOptions.ignoreTransactions || [], ...clientOptions.ignoreTransactions || []], + ignoreInternal: internalOptions.ignoreInternal !== void 0 ? internalOptions.ignoreInternal : true + }; +} +__name(_mergeOptions, "_mergeOptions"); +function _shouldDropEvent$1(event, options4) { + if (options4.ignoreInternal && _isSentryError(event)) { + DEBUG_BUILD$6 && logger$2.warn(`Event dropped due to being internal Sentry Error. +Event: ${getEventDescription(event)}`); + return true; + } + if (_isIgnoredError(event, options4.ignoreErrors)) { + DEBUG_BUILD$6 && logger$2.warn( + `Event dropped due to being matched by \`ignoreErrors\` option. +Event: ${getEventDescription(event)}` + ); + return true; + } + if (_isUselessError(event)) { + DEBUG_BUILD$6 && logger$2.warn( + `Event dropped due to not having an error message, error type or stacktrace. +Event: ${getEventDescription( + event + )}` + ); + return true; + } + if (_isIgnoredTransaction(event, options4.ignoreTransactions)) { + DEBUG_BUILD$6 && logger$2.warn( + `Event dropped due to being matched by \`ignoreTransactions\` option. +Event: ${getEventDescription(event)}` + ); + return true; + } + if (_isDeniedUrl(event, options4.denyUrls)) { + DEBUG_BUILD$6 && logger$2.warn( + `Event dropped due to being matched by \`denyUrls\` option. +Event: ${getEventDescription( + event + )}. +Url: ${_getEventFilterUrl(event)}` + ); + return true; + } + if (!_isAllowedUrl(event, options4.allowUrls)) { + DEBUG_BUILD$6 && logger$2.warn( + `Event dropped due to not being matched by \`allowUrls\` option. +Event: ${getEventDescription( + event + )}. +Url: ${_getEventFilterUrl(event)}` + ); + return true; + } + return false; +} +__name(_shouldDropEvent$1, "_shouldDropEvent$1"); +function _isIgnoredError(event, ignoreErrors) { + if (event.type || !ignoreErrors || !ignoreErrors.length) { + return false; + } + return _getPossibleEventMessages(event).some((message3) => stringMatchesSomePattern(message3, ignoreErrors)); +} +__name(_isIgnoredError, "_isIgnoredError"); +function _isIgnoredTransaction(event, ignoreTransactions) { + if (event.type !== "transaction" || !ignoreTransactions || !ignoreTransactions.length) { + return false; + } + const name2 = event.transaction; + return name2 ? stringMatchesSomePattern(name2, ignoreTransactions) : false; +} +__name(_isIgnoredTransaction, "_isIgnoredTransaction"); +function _isDeniedUrl(event, denyUrls) { + if (!denyUrls || !denyUrls.length) { + return false; + } + const url = _getEventFilterUrl(event); + return !url ? false : stringMatchesSomePattern(url, denyUrls); +} +__name(_isDeniedUrl, "_isDeniedUrl"); +function _isAllowedUrl(event, allowUrls) { + if (!allowUrls || !allowUrls.length) { + return true; + } + const url = _getEventFilterUrl(event); + return !url ? true : stringMatchesSomePattern(url, allowUrls); +} +__name(_isAllowedUrl, "_isAllowedUrl"); +function _getPossibleEventMessages(event) { + const possibleMessages = []; + if (event.message) { + possibleMessages.push(event.message); + } + let lastException; + try { + lastException = event.exception.values[event.exception.values.length - 1]; + } catch (e2) { + } + if (lastException) { + if (lastException.value) { + possibleMessages.push(lastException.value); + if (lastException.type) { + possibleMessages.push(`${lastException.type}: ${lastException.value}`); + } + } + } + return possibleMessages; +} +__name(_getPossibleEventMessages, "_getPossibleEventMessages"); +function _isSentryError(event) { + try { + return event.exception.values[0].type === "SentryError"; + } catch (e2) { + } + return false; +} +__name(_isSentryError, "_isSentryError"); +function _getLastValidUrl(frames = []) { + for (let i2 = frames.length - 1; i2 >= 0; i2--) { + const frame = frames[i2]; + if (frame && frame.filename !== "" && frame.filename !== "[native code]") { + return frame.filename || null; + } + } + return null; +} +__name(_getLastValidUrl, "_getLastValidUrl"); +function _getEventFilterUrl(event) { + try { + let frames; + try { + frames = event.exception.values[0].stacktrace.frames; + } catch (e2) { + } + return frames ? _getLastValidUrl(frames) : null; + } catch (oO) { + DEBUG_BUILD$6 && logger$2.error(`Cannot extract url for event ${getEventDescription(event)}`); + return null; + } +} +__name(_getEventFilterUrl, "_getEventFilterUrl"); +function _isUselessError(event) { + if (event.type) { + return false; + } + if (!event.exception || !event.exception.values || event.exception.values.length === 0) { + return false; + } + return ( + // No top-level message + !event.message && // There are no exception values that have a stacktrace, a non-generic-Error type or value + !event.exception.values.some((value4) => value4.stacktrace || value4.type && value4.type !== "Error" || value4.value) + ); +} +__name(_isUselessError, "_isUselessError"); +function applyAggregateErrorsToEvent(exceptionFromErrorImplementation, parser, maxValueLimit = 250, key, limit, event, hint) { + if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) { + return; + } + const originalException = event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : void 0; + if (originalException) { + event.exception.values = truncateAggregateExceptions( + aggregateExceptionsFromError( + exceptionFromErrorImplementation, + parser, + limit, + hint.originalException, + key, + event.exception.values, + originalException, + 0 + ), + maxValueLimit + ); + } +} +__name(applyAggregateErrorsToEvent, "applyAggregateErrorsToEvent"); +function aggregateExceptionsFromError(exceptionFromErrorImplementation, parser, limit, error2, key, prevExceptions, exception, exceptionId) { + if (prevExceptions.length >= limit + 1) { + return prevExceptions; + } + let newExceptions = [...prevExceptions]; + if (isInstanceOf(error2[key], Error)) { + applyExceptionGroupFieldsForParentException(exception, exceptionId); + const newException = exceptionFromErrorImplementation(parser, error2[key]); + const newExceptionId = newExceptions.length; + applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId); + newExceptions = aggregateExceptionsFromError( + exceptionFromErrorImplementation, + parser, + limit, + error2[key], + key, + [newException, ...newExceptions], + newException, + newExceptionId + ); + } + if (Array.isArray(error2.errors)) { + error2.errors.forEach((childError, i2) => { + if (isInstanceOf(childError, Error)) { + applyExceptionGroupFieldsForParentException(exception, exceptionId); + const newException = exceptionFromErrorImplementation(parser, childError); + const newExceptionId = newExceptions.length; + applyExceptionGroupFieldsForChildException(newException, `errors[${i2}]`, newExceptionId, exceptionId); + newExceptions = aggregateExceptionsFromError( + exceptionFromErrorImplementation, + parser, + limit, + childError, + key, + [newException, ...newExceptions], + newException, + newExceptionId + ); + } + }); + } + return newExceptions; +} +__name(aggregateExceptionsFromError, "aggregateExceptionsFromError"); +function applyExceptionGroupFieldsForParentException(exception, exceptionId) { + exception.mechanism = exception.mechanism || { type: "generic", handled: true }; + exception.mechanism = { + ...exception.mechanism, + ...exception.type === "AggregateError" && { is_exception_group: true }, + exception_id: exceptionId + }; +} +__name(applyExceptionGroupFieldsForParentException, "applyExceptionGroupFieldsForParentException"); +function applyExceptionGroupFieldsForChildException(exception, source, exceptionId, parentId) { + exception.mechanism = exception.mechanism || { type: "generic", handled: true }; + exception.mechanism = { + ...exception.mechanism, + type: "chained", + source, + exception_id: exceptionId, + parent_id: parentId + }; +} +__name(applyExceptionGroupFieldsForChildException, "applyExceptionGroupFieldsForChildException"); +function truncateAggregateExceptions(exceptions, maxValueLength) { + return exceptions.map((exception) => { + if (exception.value) { + exception.value = truncate(exception.value, maxValueLength); + } + return exception; + }); +} +__name(truncateAggregateExceptions, "truncateAggregateExceptions"); +const DEFAULT_KEY$1 = "cause"; +const DEFAULT_LIMIT$2 = 5; +const INTEGRATION_NAME$j = "LinkedErrors"; +const _linkedErrorsIntegration$1 = /* @__PURE__ */ __name((options4 = {}) => { + const limit = options4.limit || DEFAULT_LIMIT$2; + const key = options4.key || DEFAULT_KEY$1; + return { + name: INTEGRATION_NAME$j, + preprocessEvent(event, hint, client) { + const options5 = client.getOptions(); + applyAggregateErrorsToEvent( + exceptionFromError$1, + options5.stackParser, + options5.maxValueLength, + key, + limit, + event, + hint + ); + } + }; +}, "_linkedErrorsIntegration$1"); +const linkedErrorsIntegration$1 = defineIntegration(_linkedErrorsIntegration$1); +const filenameMetadataMap = /* @__PURE__ */ new Map(); +const parsedStacks = /* @__PURE__ */ new Set(); +function ensureMetadataStacksAreParsed(parser) { + if (!GLOBAL_OBJ._sentryModuleMetadata) { + return; + } + for (const stack2 of Object.keys(GLOBAL_OBJ._sentryModuleMetadata)) { + const metadata = GLOBAL_OBJ._sentryModuleMetadata[stack2]; + if (parsedStacks.has(stack2)) { + continue; + } + parsedStacks.add(stack2); + const frames = parser(stack2); + for (const frame of frames.reverse()) { + if (frame.filename) { + filenameMetadataMap.set(frame.filename, metadata); + break; + } + } + } +} +__name(ensureMetadataStacksAreParsed, "ensureMetadataStacksAreParsed"); +function getMetadataForUrl(parser, filename) { + ensureMetadataStacksAreParsed(parser); + return filenameMetadataMap.get(filename); +} +__name(getMetadataForUrl, "getMetadataForUrl"); +function addMetadataToStackFrames(parser, event) { + try { + event.exception.values.forEach((exception) => { + if (!exception.stacktrace) { + return; + } + for (const frame of exception.stacktrace.frames || []) { + if (!frame.filename || frame.module_metadata) { + continue; + } + const metadata = getMetadataForUrl(parser, frame.filename); + if (metadata) { + frame.module_metadata = metadata; + } + } + }); + } catch (_2) { + } +} +__name(addMetadataToStackFrames, "addMetadataToStackFrames"); +function stripMetadataFromStackFrames(event) { + try { + event.exception.values.forEach((exception) => { + if (!exception.stacktrace) { + return; + } + for (const frame of exception.stacktrace.frames || []) { + delete frame.module_metadata; + } + }); + } catch (_2) { + } +} +__name(stripMetadataFromStackFrames, "stripMetadataFromStackFrames"); +const moduleMetadataIntegration = defineIntegration(() => { + return { + name: "ModuleMetadata", + setup(client) { + client.on("beforeEnvelope", (envelope) => { + forEachEnvelopeItem(envelope, (item3, type) => { + if (type === "event") { + const event = Array.isArray(item3) ? item3[1] : void 0; + if (event) { + stripMetadataFromStackFrames(event); + item3[1] = event; + } + } + }); + }); + client.on("applyFrameMetadata", (event) => { + if (event.type) { + return; + } + const stackParser = client.getOptions().stackParser; + addMetadataToStackFrames(stackParser, event); + }); + } + }; +}); +function parseCookie(str) { + const obj = {}; + let index2 = 0; + while (index2 < str.length) { + const eqIdx = str.indexOf("=", index2); + if (eqIdx === -1) { + break; + } + let endIdx = str.indexOf(";", index2); + if (endIdx === -1) { + endIdx = str.length; + } else if (endIdx < eqIdx) { + index2 = str.lastIndexOf(";", eqIdx - 1) + 1; + continue; + } + const key = str.slice(index2, eqIdx).trim(); + if (void 0 === obj[key]) { + let val = str.slice(eqIdx + 1, endIdx).trim(); + if (val.charCodeAt(0) === 34) { + val = val.slice(1, -1); + } + try { + obj[key] = val.indexOf("%") !== -1 ? decodeURIComponent(val) : val; + } catch (e2) { + obj[key] = val; + } + } + index2 = endIdx + 1; + } + return obj; +} +__name(parseCookie, "parseCookie"); +function parseUrl$1(url) { + if (!url) { + return {}; + } + const match2 = url.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); + if (!match2) { + return {}; + } + const query = match2[6] || ""; + const fragment = match2[8] || ""; + return { + host: match2[4], + path: match2[5], + protocol: match2[2], + search: query, + hash: fragment, + relative: match2[5] + query + fragment + // everything minus origin + }; +} +__name(parseUrl$1, "parseUrl$1"); +function stripUrlQueryAndFragment(urlPath) { + return urlPath.split(/[?#]/, 1)[0]; +} +__name(stripUrlQueryAndFragment, "stripUrlQueryAndFragment"); +function getNumberOfUrlSegments(url) { + return url.split(/\\?\//).filter((s2) => s2.length > 0 && s2 !== ",").length; +} +__name(getNumberOfUrlSegments, "getNumberOfUrlSegments"); +function getSanitizedUrlString(url) { + const { protocol, host, path } = url; + const filteredHost = host && host.replace(/^.*@/, "[filtered]:[filtered]@").replace(/(:80)$/, "").replace(/(:443)$/, "") || ""; + return `${protocol ? `${protocol}://` : ""}${filteredHost}${path}`; +} +__name(getSanitizedUrlString, "getSanitizedUrlString"); +const ipHeaderNames = [ + "X-Client-IP", + "X-Forwarded-For", + "Fly-Client-IP", + "CF-Connecting-IP", + "Fastly-Client-Ip", + "True-Client-Ip", + "X-Real-IP", + "X-Cluster-Client-IP", + "X-Forwarded", + "Forwarded-For", + "Forwarded", + "X-Vercel-Forwarded-For" +]; +function getClientIPAddress(headers) { + const headerValues = ipHeaderNames.map((headerName) => { + const rawValue = headers[headerName]; + const value4 = Array.isArray(rawValue) ? rawValue.join(";") : rawValue; + if (headerName === "Forwarded") { + return parseForwardedHeader(value4); + } + return value4 && value4.split(",").map((v2) => v2.trim()); + }); + const flattenedHeaderValues = headerValues.reduce((acc, val) => { + if (!val) { + return acc; + } + return acc.concat(val); + }, []); + const ipAddress = flattenedHeaderValues.find((ip) => ip !== null && isIP(ip)); + return ipAddress || null; +} +__name(getClientIPAddress, "getClientIPAddress"); +function parseForwardedHeader(value4) { + if (!value4) { + return null; + } + for (const part of value4.split(";")) { + if (part.startsWith("for=")) { + return part.slice(4); + } + } + return null; +} +__name(parseForwardedHeader, "parseForwardedHeader"); +function isIP(str) { + const regex2 = /(?:^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$)|(?:^(?:(?:[a-fA-F\d]{1,4}:){7}(?:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,2}|:)|(?:[a-fA-F\d]{1,4}:){4}(?:(?::[a-fA-F\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,3}|:)|(?:[a-fA-F\d]{1,4}:){3}(?:(?::[a-fA-F\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,4}|:)|(?:[a-fA-F\d]{1,4}:){2}(?:(?::[a-fA-F\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,5}|:)|(?:[a-fA-F\d]{1,4}:){1}(?:(?::[a-fA-F\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$)/; + return regex2.test(str); +} +__name(isIP, "isIP"); +const DEFAULT_INCLUDES = { + ip: false, + request: true, + user: true +}; +const DEFAULT_REQUEST_INCLUDES = ["cookies", "data", "headers", "method", "query_string", "url"]; +const DEFAULT_USER_INCLUDES = ["id", "username", "email"]; +function extractPathForTransaction(req, options4 = {}) { + const method = req.method && req.method.toUpperCase(); + let path = ""; + let source = "url"; + if (options4.customRoute || req.route) { + path = options4.customRoute || `${req.baseUrl || ""}${req.route && req.route.path}`; + source = "route"; + } else if (req.originalUrl || req.url) { + path = stripUrlQueryAndFragment(req.originalUrl || req.url || ""); + } + let name2 = ""; + if (options4.method && method) { + name2 += method; + } + if (options4.method && options4.path) { + name2 += " "; + } + if (options4.path && path) { + name2 += path; + } + return [name2, source]; +} +__name(extractPathForTransaction, "extractPathForTransaction"); +function extractUserData(user, keys2) { + const extractedUser = {}; + const attributes = Array.isArray(keys2) ? keys2 : DEFAULT_USER_INCLUDES; + attributes.forEach((key) => { + if (user && key in user) { + extractedUser[key] = user[key]; + } + }); + return extractedUser; +} +__name(extractUserData, "extractUserData"); +function extractRequestData(req, options4 = {}) { + const { include = DEFAULT_REQUEST_INCLUDES } = options4; + const requestData = {}; + const headers = req.headers || {}; + const method = req.method; + const host = headers.host || req.hostname || req.host || ""; + const protocol = req.protocol === "https" || req.socket && req.socket.encrypted ? "https" : "http"; + const originalUrl = req.originalUrl || req.url || ""; + const absoluteUrl = originalUrl.startsWith(protocol) ? originalUrl : `${protocol}://${host}${originalUrl}`; + include.forEach((key) => { + switch (key) { + case "headers": { + requestData.headers = headers; + if (!include.includes("cookies")) { + delete requestData.headers.cookie; + } + if (!include.includes("ip")) { + ipHeaderNames.forEach((ipHeaderName) => { + delete requestData.headers[ipHeaderName]; + }); + } + break; + } + case "method": { + requestData.method = method; + break; + } + case "url": { + requestData.url = absoluteUrl; + break; + } + case "cookies": { + requestData.cookies = // TODO (v8 / #5257): We're only sending the empty object for backwards compatibility, so the last bit can + // come off in v8 + req.cookies || headers.cookie && parseCookie(headers.cookie) || {}; + break; + } + case "query_string": { + requestData.query_string = extractQueryParams(req); + break; + } + case "data": { + if (method === "GET" || method === "HEAD") { + break; + } + const body = req.body; + if (body !== void 0) { + const stringBody = isString$a(body) ? body : isPlainObject$5(body) ? JSON.stringify(normalize$2(body)) : truncate(`${body}`, 1024); + if (stringBody) { + requestData.data = stringBody; + } + } + break; + } + default: { + if ({}.hasOwnProperty.call(req, key)) { + requestData[key] = req[key]; + } + } + } + }); + return requestData; +} +__name(extractRequestData, "extractRequestData"); +function addNormalizedRequestDataToEvent(event, req, additionalData, options4) { + const include = { + ...DEFAULT_INCLUDES, + ...options4 && options4.include + }; + if (include.request) { + const includeRequest = Array.isArray(include.request) ? [...include.request] : [...DEFAULT_REQUEST_INCLUDES]; + if (include.ip) { + includeRequest.push("ip"); + } + const extractedRequestData = extractNormalizedRequestData(req, { include: includeRequest }); + event.request = { + ...event.request, + ...extractedRequestData + }; + } + if (include.user) { + const extractedUser = additionalData.user && isPlainObject$5(additionalData.user) ? extractUserData(additionalData.user, include.user) : {}; + if (Object.keys(extractedUser).length) { + event.user = { + ...extractedUser, + ...event.user + }; + } + } + if (include.ip) { + const ip = req.headers && getClientIPAddress(req.headers) || additionalData.ipAddress; + if (ip) { + event.user = { + ...event.user, + ip_address: ip + }; + } + } +} +__name(addNormalizedRequestDataToEvent, "addNormalizedRequestDataToEvent"); +function addRequestDataToEvent(event, req, options4) { + const include = { + ...DEFAULT_INCLUDES, + ...options4 && options4.include + }; + if (include.request) { + const includeRequest = Array.isArray(include.request) ? [...include.request] : [...DEFAULT_REQUEST_INCLUDES]; + if (include.ip) { + includeRequest.push("ip"); + } + const extractedRequestData = extractRequestData(req, { include: includeRequest }); + event.request = { + ...event.request, + ...extractedRequestData + }; + } + if (include.user) { + const extractedUser = req.user && isPlainObject$5(req.user) ? extractUserData(req.user, include.user) : {}; + if (Object.keys(extractedUser).length) { + event.user = { + ...event.user, + ...extractedUser + }; + } + } + if (include.ip) { + const ip = req.headers && getClientIPAddress(req.headers) || req.ip || req.socket && req.socket.remoteAddress; + if (ip) { + event.user = { + ...event.user, + ip_address: ip + }; + } + } + return event; +} +__name(addRequestDataToEvent, "addRequestDataToEvent"); +function extractQueryParams(req) { + let originalUrl = req.originalUrl || req.url || ""; + if (!originalUrl) { + return; + } + if (originalUrl.startsWith("/")) { + originalUrl = `http://dogs.are.great${originalUrl}`; + } + try { + const queryParams = req.query || new URL(originalUrl).search.slice(1); + return queryParams.length ? queryParams : void 0; + } catch (e2) { + return void 0; + } +} +__name(extractQueryParams, "extractQueryParams"); +function winterCGHeadersToDict(winterCGHeaders) { + const headers = {}; + try { + winterCGHeaders.forEach((value4, key) => { + if (typeof value4 === "string") { + headers[key] = value4; + } + }); + } catch (e2) { + DEBUG_BUILD$5 && logger$2.warn("Sentry failed extracting headers from a request object. If you see this, please file an issue."); + } + return headers; +} +__name(winterCGHeadersToDict, "winterCGHeadersToDict"); +function headersToDict(reqHeaders) { + const headers = /* @__PURE__ */ Object.create(null); + try { + Object.entries(reqHeaders).forEach(([key, value4]) => { + if (typeof value4 === "string") { + headers[key] = value4; + } + }); + } catch (e2) { + DEBUG_BUILD$5 && logger$2.warn("Sentry failed extracting headers from a request object. If you see this, please file an issue."); + } + return headers; +} +__name(headersToDict, "headersToDict"); +function winterCGRequestToRequestData(req) { + const headers = winterCGHeadersToDict(req.headers); + return { + method: req.method, + url: req.url, + query_string: extractQueryParamsFromUrl(req.url), + headers + // TODO: Can we extract body data from the request? + }; +} +__name(winterCGRequestToRequestData, "winterCGRequestToRequestData"); +function httpRequestToRequestData(request) { + const headers = request.headers || {}; + const host = headers.host || ""; + const protocol = request.socket && request.socket.encrypted ? "https" : "http"; + const originalUrl = request.url || ""; + const absoluteUrl = originalUrl.startsWith(protocol) ? originalUrl : `${protocol}://${host}${originalUrl}`; + const data26 = request.body || void 0; + const cookies2 = request.cookies; + return dropUndefinedKeys({ + url: absoluteUrl, + method: request.method, + query_string: extractQueryParamsFromUrl(originalUrl), + headers: headersToDict(headers), + cookies: cookies2, + data: data26 + }); +} +__name(httpRequestToRequestData, "httpRequestToRequestData"); +function extractQueryParamsFromUrl(url) { + if (!url) { + return; + } + try { + const queryParams = new URL(url, "http://dogs.are.great").search.slice(1); + return queryParams.length ? queryParams : void 0; + } catch (e3) { + return void 0; + } +} +__name(extractQueryParamsFromUrl, "extractQueryParamsFromUrl"); +function extractNormalizedRequestData(normalizedRequest, { include }) { + const includeKeys = include ? Array.isArray(include) ? include : DEFAULT_REQUEST_INCLUDES : []; + const requestData = {}; + const headers = { ...normalizedRequest.headers }; + if (includeKeys.includes("headers")) { + requestData.headers = headers; + if (!include.includes("cookies")) { + delete headers.cookie; + } + if (!include.includes("ip")) { + ipHeaderNames.forEach((ipHeaderName) => { + delete headers[ipHeaderName]; + }); + } + } + if (includeKeys.includes("method")) { + requestData.method = normalizedRequest.method; + } + if (includeKeys.includes("url")) { + requestData.url = normalizedRequest.url; + } + if (includeKeys.includes("cookies")) { + const cookies2 = normalizedRequest.cookies || (headers && headers.cookie ? parseCookie(headers.cookie) : void 0); + requestData.cookies = cookies2 || {}; + } + if (includeKeys.includes("query_string")) { + requestData.query_string = normalizedRequest.query_string; + } + if (includeKeys.includes("data")) { + requestData.data = normalizedRequest.data; + } + return requestData; +} +__name(extractNormalizedRequestData, "extractNormalizedRequestData"); +const DEFAULT_OPTIONS$1 = { + include: { + cookies: true, + data: true, + headers: true, + ip: false, + query_string: true, + url: true, + user: { + id: true, + username: true, + email: true + } + }, + transactionNamingScheme: "methodPath" +}; +const INTEGRATION_NAME$i = "RequestData"; +const _requestDataIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const _options = { + ...DEFAULT_OPTIONS$1, + ...options4, + include: { + ...DEFAULT_OPTIONS$1.include, + ...options4.include, + user: options4.include && typeof options4.include.user === "boolean" ? options4.include.user : { + ...DEFAULT_OPTIONS$1.include.user, + // Unclear why TS still thinks `options.include.user` could be a boolean at this point + ...(options4.include || {}).user + } + } + }; + return { + name: INTEGRATION_NAME$i, + processEvent(event) { + const { sdkProcessingMetadata = {} } = event; + const { request, normalizedRequest } = sdkProcessingMetadata; + const addRequestDataOptions = convertReqDataIntegrationOptsToAddReqDataOpts(_options); + if (normalizedRequest) { + const ipAddress = request ? request.ip || request.socket && request.socket.remoteAddress : void 0; + const user = request ? request.user : void 0; + addNormalizedRequestDataToEvent(event, normalizedRequest, { ipAddress, user }, addRequestDataOptions); + return event; + } + if (!request) { + return event; + } + return addRequestDataToEvent(event, request, addRequestDataOptions); + } + }; +}, "_requestDataIntegration"); +const requestDataIntegration = defineIntegration(_requestDataIntegration); +function convertReqDataIntegrationOptsToAddReqDataOpts(integrationOptions) { + const { + // eslint-disable-next-line deprecation/deprecation + transactionNamingScheme, + include: { ip, user, ...requestOptions } + } = integrationOptions; + const requestIncludeKeys = ["method"]; + for (const [key, value4] of Object.entries(requestOptions)) { + if (value4) { + requestIncludeKeys.push(key); + } + } + let addReqDataUserOpt; + if (user === void 0) { + addReqDataUserOpt = true; + } else if (typeof user === "boolean") { + addReqDataUserOpt = user; + } else { + const userIncludeKeys = []; + for (const [key, value4] of Object.entries(user)) { + if (value4) { + userIncludeKeys.push(key); + } + } + addReqDataUserOpt = userIncludeKeys; + } + return { + include: { + ip, + user: addReqDataUserOpt, + request: requestIncludeKeys.length !== 0 ? requestIncludeKeys : void 0, + transaction: transactionNamingScheme + } + }; +} +__name(convertReqDataIntegrationOptsToAddReqDataOpts, "convertReqDataIntegrationOptsToAddReqDataOpts"); +function addConsoleInstrumentationHandler(handler12) { + const type = "console"; + addHandler$1(type, handler12); + maybeInstrument(type, instrumentConsole); +} +__name(addConsoleInstrumentationHandler, "addConsoleInstrumentationHandler"); +function instrumentConsole() { + if (!("console" in GLOBAL_OBJ)) { + return; + } + CONSOLE_LEVELS$1.forEach(function(level) { + if (!(level in GLOBAL_OBJ.console)) { + return; + } + fill(GLOBAL_OBJ.console, level, function(originalConsoleMethod) { + originalConsoleMethods[level] = originalConsoleMethod; + return function(...args) { + const handlerData = { args, level }; + triggerHandlers$1("console", handlerData); + const log2 = originalConsoleMethods[level]; + log2 && log2.apply(GLOBAL_OBJ.console, args); + }; + }); + }); +} +__name(instrumentConsole, "instrumentConsole"); +const validSeverityLevels = ["fatal", "error", "warning", "log", "info", "debug"]; +function severityLevelFromString(level) { + return level === "warn" ? "warning" : ["fatal", "error", "warning", "log", "info", "debug"].includes(level) ? level : "log"; +} +__name(severityLevelFromString, "severityLevelFromString"); +const INTEGRATION_NAME$h = "CaptureConsole"; +const _captureConsoleIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const levels = options4.levels || CONSOLE_LEVELS$1; + const handled = !!options4.handled; + return { + name: INTEGRATION_NAME$h, + setup(client) { + if (!("console" in GLOBAL_OBJ)) { + return; + } + addConsoleInstrumentationHandler(({ args, level }) => { + if (getClient() !== client || !levels.includes(level)) { + return; + } + consoleHandler(args, level, handled); + }); + } + }; +}, "_captureConsoleIntegration"); +const captureConsoleIntegration = defineIntegration(_captureConsoleIntegration); +function consoleHandler(args, level, handled) { + const captureContext = { + level: severityLevelFromString(level), + extra: { + arguments: args + } + }; + withScope((scope) => { + scope.addEventProcessor((event) => { + event.logger = "console"; + addExceptionMechanism(event, { + handled, + type: "console" + }); + return event; + }); + if (level === "assert") { + if (!args[0]) { + const message4 = `Assertion failed: ${safeJoin(args.slice(1), " ") || "console.assert"}`; + scope.setExtra("arguments", args.slice(1)); + captureMessage(message4, captureContext); + } + return; + } + const error2 = args.find((arg) => arg instanceof Error); + if (error2) { + captureException(error2, captureContext); + return; + } + const message3 = safeJoin(args, " "); + captureMessage(message3, captureContext); + }); +} +__name(consoleHandler, "consoleHandler"); +const INTEGRATION_NAME$g = "Debug"; +const _debugIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const _options = { + debugger: false, + stringify: false, + ...options4 + }; + return { + name: INTEGRATION_NAME$g, + setup(client) { + client.on("beforeSendEvent", (event, hint) => { + if (_options.debugger) { + debugger; + } + consoleSandbox(() => { + if (_options.stringify) { + console.log(JSON.stringify(event, null, 2)); + if (hint && Object.keys(hint).length) { + console.log(JSON.stringify(hint, null, 2)); + } + } else { + console.log(event); + if (hint && Object.keys(hint).length) { + console.log(hint); + } + } + }); + }); + } + }; +}, "_debugIntegration"); +const debugIntegration = defineIntegration(_debugIntegration); +const INTEGRATION_NAME$f = "Dedupe"; +const _dedupeIntegration = /* @__PURE__ */ __name(() => { + let previousEvent; + return { + name: INTEGRATION_NAME$f, + processEvent(currentEvent) { + if (currentEvent.type) { + return currentEvent; + } + try { + if (_shouldDropEvent(currentEvent, previousEvent)) { + DEBUG_BUILD$6 && logger$2.warn("Event dropped due to being a duplicate of previously captured event."); + return null; + } + } catch (_oO) { + } + return previousEvent = currentEvent; + } + }; +}, "_dedupeIntegration"); +const dedupeIntegration = defineIntegration(_dedupeIntegration); +function _shouldDropEvent(currentEvent, previousEvent) { + if (!previousEvent) { + return false; + } + if (_isSameMessageEvent(currentEvent, previousEvent)) { + return true; + } + if (_isSameExceptionEvent(currentEvent, previousEvent)) { + return true; + } + return false; +} +__name(_shouldDropEvent, "_shouldDropEvent"); +function _isSameMessageEvent(currentEvent, previousEvent) { + const currentMessage = currentEvent.message; + const previousMessage = previousEvent.message; + if (!currentMessage && !previousMessage) { + return false; + } + if (currentMessage && !previousMessage || !currentMessage && previousMessage) { + return false; + } + if (currentMessage !== previousMessage) { + return false; + } + if (!_isSameFingerprint(currentEvent, previousEvent)) { + return false; + } + if (!_isSameStacktrace(currentEvent, previousEvent)) { + return false; + } + return true; +} +__name(_isSameMessageEvent, "_isSameMessageEvent"); +function _isSameExceptionEvent(currentEvent, previousEvent) { + const previousException = _getExceptionFromEvent(previousEvent); + const currentException = _getExceptionFromEvent(currentEvent); + if (!previousException || !currentException) { + return false; + } + if (previousException.type !== currentException.type || previousException.value !== currentException.value) { + return false; + } + if (!_isSameFingerprint(currentEvent, previousEvent)) { + return false; + } + if (!_isSameStacktrace(currentEvent, previousEvent)) { + return false; + } + return true; +} +__name(_isSameExceptionEvent, "_isSameExceptionEvent"); +function _isSameStacktrace(currentEvent, previousEvent) { + let currentFrames = getFramesFromEvent(currentEvent); + let previousFrames = getFramesFromEvent(previousEvent); + if (!currentFrames && !previousFrames) { + return true; + } + if (currentFrames && !previousFrames || !currentFrames && previousFrames) { + return false; + } + currentFrames = currentFrames; + previousFrames = previousFrames; + if (previousFrames.length !== currentFrames.length) { + return false; + } + for (let i2 = 0; i2 < previousFrames.length; i2++) { + const frameA = previousFrames[i2]; + const frameB = currentFrames[i2]; + if (frameA.filename !== frameB.filename || frameA.lineno !== frameB.lineno || frameA.colno !== frameB.colno || frameA.function !== frameB.function) { + return false; + } + } + return true; +} +__name(_isSameStacktrace, "_isSameStacktrace"); +function _isSameFingerprint(currentEvent, previousEvent) { + let currentFingerprint = currentEvent.fingerprint; + let previousFingerprint = previousEvent.fingerprint; + if (!currentFingerprint && !previousFingerprint) { + return true; + } + if (currentFingerprint && !previousFingerprint || !currentFingerprint && previousFingerprint) { + return false; + } + currentFingerprint = currentFingerprint; + previousFingerprint = previousFingerprint; + try { + return !!(currentFingerprint.join("") === previousFingerprint.join("")); + } catch (_oO) { + return false; + } +} +__name(_isSameFingerprint, "_isSameFingerprint"); +function _getExceptionFromEvent(event) { + return event.exception && event.exception.values && event.exception.values[0]; +} +__name(_getExceptionFromEvent, "_getExceptionFromEvent"); +const INTEGRATION_NAME$e = "ExtraErrorData"; +const _extraErrorDataIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const { depth = 3, captureErrorCause = true } = options4; + return { + name: INTEGRATION_NAME$e, + processEvent(event, hint, client) { + const { maxValueLength = 250 } = client.getOptions(); + return _enhanceEventWithErrorData(event, hint, depth, captureErrorCause, maxValueLength); + } + }; +}, "_extraErrorDataIntegration"); +const extraErrorDataIntegration = defineIntegration(_extraErrorDataIntegration); +function _enhanceEventWithErrorData(event, hint = {}, depth, captureErrorCause, maxValueLength) { + if (!hint.originalException || !isError(hint.originalException)) { + return event; + } + const exceptionName = hint.originalException.name || hint.originalException.constructor.name; + const errorData = _extractErrorData(hint.originalException, captureErrorCause, maxValueLength); + if (errorData) { + const contexts = { + ...event.contexts + }; + const normalizedErrorData = normalize$2(errorData, depth); + if (isPlainObject$5(normalizedErrorData)) { + addNonEnumerableProperty(normalizedErrorData, "__sentry_skip_normalization__", true); + contexts[exceptionName] = normalizedErrorData; + } + return { + ...event, + contexts + }; + } + return event; +} +__name(_enhanceEventWithErrorData, "_enhanceEventWithErrorData"); +function _extractErrorData(error2, captureErrorCause, maxValueLength) { + try { + const nativeKeys2 = [ + "name", + "message", + "stack", + "line", + "column", + "fileName", + "lineNumber", + "columnNumber", + "toJSON" + ]; + const extraErrorInfo = {}; + for (const key of Object.keys(error2)) { + if (nativeKeys2.indexOf(key) !== -1) { + continue; + } + const value4 = error2[key]; + extraErrorInfo[key] = isError(value4) || typeof value4 === "string" ? truncate(`${value4}`, maxValueLength) : value4; + } + if (captureErrorCause && error2.cause !== void 0) { + extraErrorInfo.cause = isError(error2.cause) ? error2.cause.toString() : error2.cause; + } + if (typeof error2.toJSON === "function") { + const serializedError = error2.toJSON(); + for (const key of Object.keys(serializedError)) { + const value4 = serializedError[key]; + extraErrorInfo[key] = isError(value4) ? value4.toString() : value4; + } + } + return extraErrorInfo; + } catch (oO) { + DEBUG_BUILD$6 && logger$2.error("Unable to extract extra data from the Error object:", oO); + } + return null; +} +__name(_extractErrorData, "_extractErrorData"); +function normalizeArray(parts2, allowAboveRoot) { + let up = 0; + for (let i2 = parts2.length - 1; i2 >= 0; i2--) { + const last = parts2[i2]; + if (last === ".") { + parts2.splice(i2, 1); + } else if (last === "..") { + parts2.splice(i2, 1); + up++; + } else if (up) { + parts2.splice(i2, 1); + up--; + } + } + if (allowAboveRoot) { + for (; up--; up) { + parts2.unshift(".."); + } + } + return parts2; +} +__name(normalizeArray, "normalizeArray"); +const splitPathRe = /^(\S+:\\|\/?)([\s\S]*?)((?:\.{1,2}|[^/\\]+?|)(\.[^./\\]*|))(?:[/\\]*)$/; +function splitPath(filename) { + const truncated = filename.length > 1024 ? `${filename.slice(-1024)}` : filename; + const parts2 = splitPathRe.exec(truncated); + return parts2 ? parts2.slice(1) : []; +} +__name(splitPath, "splitPath"); +function resolve$3(...args) { + let resolvedPath = ""; + let resolvedAbsolute = false; + for (let i2 = args.length - 1; i2 >= -1 && !resolvedAbsolute; i2--) { + const path = i2 >= 0 ? args[i2] : "/"; + if (!path) { + continue; + } + resolvedPath = `${path}/${resolvedPath}`; + resolvedAbsolute = path.charAt(0) === "/"; + } + resolvedPath = normalizeArray( + resolvedPath.split("/").filter((p2) => !!p2), + !resolvedAbsolute + ).join("/"); + return (resolvedAbsolute ? "/" : "") + resolvedPath || "."; +} +__name(resolve$3, "resolve$3"); +function trim$1(arr) { + let start2 = 0; + for (; start2 < arr.length; start2++) { + if (arr[start2] !== "") { + break; + } + } + let end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== "") { + break; + } + } + if (start2 > end) { + return []; + } + return arr.slice(start2, end - start2 + 1); +} +__name(trim$1, "trim$1"); +function relative(from2, to) { + from2 = resolve$3(from2).slice(1); + to = resolve$3(to).slice(1); + const fromParts = trim$1(from2.split("/")); + const toParts = trim$1(to.split("/")); + const length = Math.min(fromParts.length, toParts.length); + let samePartsLength = length; + for (let i2 = 0; i2 < length; i2++) { + if (fromParts[i2] !== toParts[i2]) { + samePartsLength = i2; + break; + } + } + let outputParts = []; + for (let i2 = samePartsLength; i2 < fromParts.length; i2++) { + outputParts.push(".."); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join("/"); +} +__name(relative, "relative"); +function normalizePath(path) { + const isPathAbsolute = isAbsolute(path); + const trailingSlash = path.slice(-1) === "/"; + let normalizedPath = normalizeArray( + path.split("/").filter((p2) => !!p2), + !isPathAbsolute + ).join("/"); + if (!normalizedPath && !isPathAbsolute) { + normalizedPath = "."; + } + if (normalizedPath && trailingSlash) { + normalizedPath += "/"; + } + return (isPathAbsolute ? "/" : "") + normalizedPath; +} +__name(normalizePath, "normalizePath"); +function isAbsolute(path) { + return path.charAt(0) === "/"; +} +__name(isAbsolute, "isAbsolute"); +function join$3(...args) { + return normalizePath(args.join("/")); +} +__name(join$3, "join$3"); +function dirname(path) { + const result = splitPath(path); + const root29 = result[0] || ""; + let dir = result[1]; + if (!root29 && !dir) { + return "."; + } + if (dir) { + dir = dir.slice(0, dir.length - 1); + } + return root29 + dir; +} +__name(dirname, "dirname"); +function basename(path, ext) { + let f2 = splitPath(path)[2] || ""; + if (ext && f2.slice(ext.length * -1) === ext) { + f2 = f2.slice(0, f2.length - ext.length); + } + return f2; +} +__name(basename, "basename"); +const INTEGRATION_NAME$d = "RewriteFrames"; +const rewriteFramesIntegration = defineIntegration((options4 = {}) => { + const root29 = options4.root; + const prefix2 = options4.prefix || "app:///"; + const isBrowser2 = "window" in GLOBAL_OBJ && GLOBAL_OBJ.window !== void 0; + const iteratee = options4.iteratee || generateIteratee({ isBrowser: isBrowser2, root: root29, prefix: prefix2 }); + function _processExceptionsEvent(event) { + try { + return { + ...event, + exception: { + ...event.exception, + // The check for this is performed inside `process` call itself, safe to skip here + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + values: event.exception.values.map((value4) => ({ + ...value4, + ...value4.stacktrace && { stacktrace: _processStacktrace(value4.stacktrace) } + })) + } + }; + } catch (_oO) { + return event; + } + } + __name(_processExceptionsEvent, "_processExceptionsEvent"); + function _processStacktrace(stacktrace) { + return { + ...stacktrace, + frames: stacktrace && stacktrace.frames && stacktrace.frames.map((f2) => iteratee(f2)) + }; + } + __name(_processStacktrace, "_processStacktrace"); + return { + name: INTEGRATION_NAME$d, + processEvent(originalEvent) { + let processedEvent = originalEvent; + if (originalEvent.exception && Array.isArray(originalEvent.exception.values)) { + processedEvent = _processExceptionsEvent(processedEvent); + } + return processedEvent; + } + }; +}); +function generateIteratee({ + isBrowser: isBrowser2, + root: root29, + prefix: prefix2 +}) { + return (frame) => { + if (!frame.filename) { + return frame; + } + const isWindowsFrame = /^[a-zA-Z]:\\/.test(frame.filename) || // or the presence of a backslash without a forward slash (which are not allowed on Windows) + frame.filename.includes("\\") && !frame.filename.includes("/"); + const startsWithSlash = /^\//.test(frame.filename); + if (isBrowser2) { + if (root29) { + const oldFilename = frame.filename; + if (oldFilename.indexOf(root29) === 0) { + frame.filename = oldFilename.replace(root29, prefix2); + } + } + } else { + if (isWindowsFrame || startsWithSlash) { + const filename = isWindowsFrame ? frame.filename.replace(/^[a-zA-Z]:/, "").replace(/\\/g, "/") : frame.filename; + const base2 = root29 ? relative(root29, filename) : basename(filename); + frame.filename = `${prefix2}${base2}`; + } + } + return frame; + }; +} +__name(generateIteratee, "generateIteratee"); +const INTEGRATION_NAME$c = "SessionTiming"; +const _sessionTimingIntegration = /* @__PURE__ */ __name(() => { + const startTime = timestampInSeconds() * 1e3; + return { + name: INTEGRATION_NAME$c, + processEvent(event) { + const now2 = timestampInSeconds() * 1e3; + return { + ...event, + extra: { + ...event.extra, + ["session:start"]: startTime, + ["session:duration"]: now2 - startTime, + ["session:end"]: now2 + } + }; + } + }; +}, "_sessionTimingIntegration"); +const sessionTimingIntegration = defineIntegration(_sessionTimingIntegration); +const DEFAULT_LIMIT$1 = 10; +const INTEGRATION_NAME$b = "ZodErrors"; +function originalExceptionIsZodError(originalException) { + return isError(originalException) && originalException.name === "ZodError" && Array.isArray(originalException.errors); +} +__name(originalExceptionIsZodError, "originalExceptionIsZodError"); +function formatIssueTitle(issue) { + return { + ...issue, + path: "path" in issue && Array.isArray(issue.path) ? issue.path.join(".") : void 0, + keys: "keys" in issue ? JSON.stringify(issue.keys) : void 0, + unionErrors: "unionErrors" in issue ? JSON.stringify(issue.unionErrors) : void 0 + }; +} +__name(formatIssueTitle, "formatIssueTitle"); +function formatIssueMessage(zodError) { + const errorKeyMap = /* @__PURE__ */ new Set(); + for (const iss of zodError.issues) { + if (iss.path && iss.path[0]) { + errorKeyMap.add(iss.path[0]); + } + } + const errorKeys = Array.from(errorKeyMap); + return `Failed to validate keys: ${truncate(errorKeys.join(", "), 100)}`; +} +__name(formatIssueMessage, "formatIssueMessage"); +function applyZodErrorsToEvent(limit, event, hint) { + if (!event.exception || !event.exception.values || !hint || !hint.originalException || !originalExceptionIsZodError(hint.originalException) || hint.originalException.issues.length === 0) { + return event; + } + return { + ...event, + exception: { + ...event.exception, + values: [ + { + ...event.exception.values[0], + value: formatIssueMessage(hint.originalException) + }, + ...event.exception.values.slice(1) + ] + }, + extra: { + ...event.extra, + "zoderror.issues": hint.originalException.errors.slice(0, limit).map(formatIssueTitle) + } + }; +} +__name(applyZodErrorsToEvent, "applyZodErrorsToEvent"); +const _zodErrorsIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const limit = options4.limit || DEFAULT_LIMIT$1; + return { + name: INTEGRATION_NAME$b, + processEvent(originalEvent, hint) { + const processedEvent = applyZodErrorsToEvent(limit, originalEvent, hint); + return processedEvent; + } + }; +}, "_zodErrorsIntegration"); +const zodErrorsIntegration = defineIntegration(_zodErrorsIntegration); +const thirdPartyErrorFilterIntegration = defineIntegration((options4) => { + return { + name: "ThirdPartyErrorsFilter", + setup(client) { + client.on("beforeEnvelope", (envelope) => { + forEachEnvelopeItem(envelope, (item3, type) => { + if (type === "event") { + const event = Array.isArray(item3) ? item3[1] : void 0; + if (event) { + stripMetadataFromStackFrames(event); + item3[1] = event; + } + } + }); + }); + client.on("applyFrameMetadata", (event) => { + if (event.type) { + return; + } + const stackParser = client.getOptions().stackParser; + addMetadataToStackFrames(stackParser, event); + }); + }, + processEvent(event) { + const frameKeys = getBundleKeysForAllFramesWithFilenames(event); + if (frameKeys) { + const arrayMethod = options4.behaviour === "drop-error-if-contains-third-party-frames" || options4.behaviour === "apply-tag-if-contains-third-party-frames" ? "some" : "every"; + const behaviourApplies = frameKeys[arrayMethod]((keys2) => !keys2.some((key) => options4.filterKeys.includes(key))); + if (behaviourApplies) { + const shouldDrop = options4.behaviour === "drop-error-if-contains-third-party-frames" || options4.behaviour === "drop-error-if-exclusively-contains-third-party-frames"; + if (shouldDrop) { + return null; + } else { + event.tags = { + ...event.tags, + third_party_code: true + }; + } + } + } + return event; + } + }; +}); +function getBundleKeysForAllFramesWithFilenames(event) { + const frames = getFramesFromEvent(event); + if (!frames) { + return void 0; + } + return frames.filter((frame) => !!frame.filename).map((frame) => { + if (frame.module_metadata) { + return Object.keys(frame.module_metadata).filter((key) => key.startsWith(BUNDLER_PLUGIN_APP_KEY_PREFIX)).map((key) => key.slice(BUNDLER_PLUGIN_APP_KEY_PREFIX.length)); + } + return []; + }); +} +__name(getBundleKeysForAllFramesWithFilenames, "getBundleKeysForAllFramesWithFilenames"); +const BUNDLER_PLUGIN_APP_KEY_PREFIX = "_sentryBundlerPluginAppKey:"; +const COUNTER_METRIC_TYPE = "c"; +const GAUGE_METRIC_TYPE = "g"; +const SET_METRIC_TYPE = "s"; +const DISTRIBUTION_METRIC_TYPE = "d"; +const DEFAULT_BROWSER_FLUSH_INTERVAL = 5e3; +const DEFAULT_FLUSH_INTERVAL = 1e4; +const MAX_WEIGHT = 1e4; +function getMetricsAggregatorForClient$1(client, Aggregator) { + const globalMetricsAggregators = getGlobalSingleton( + "globalMetricsAggregators", + () => /* @__PURE__ */ new WeakMap() + ); + const aggregator = globalMetricsAggregators.get(client); + if (aggregator) { + return aggregator; + } + const newAggregator = new Aggregator(client); + client.on("flush", () => newAggregator.flush()); + client.on("close", () => newAggregator.close()); + globalMetricsAggregators.set(client, newAggregator); + return newAggregator; +} +__name(getMetricsAggregatorForClient$1, "getMetricsAggregatorForClient$1"); +function addToMetricsAggregator(Aggregator, metricType, name2, value4, data26 = {}) { + const client = data26.client || getClient(); + if (!client) { + return; + } + const span = getActiveSpan(); + const rootSpan = span ? getRootSpan(span) : void 0; + const transactionName = rootSpan && spanToJSON(rootSpan).description; + const { unit, tags, timestamp: timestamp2 } = data26; + const { release, environment } = client.getOptions(); + const metricTags = {}; + if (release) { + metricTags.release = release; + } + if (environment) { + metricTags.environment = environment; + } + if (transactionName) { + metricTags.transaction = transactionName; + } + DEBUG_BUILD$6 && logger$2.log(`Adding value of ${value4} to ${metricType} metric ${name2}`); + const aggregator = getMetricsAggregatorForClient$1(client, Aggregator); + aggregator.add(metricType, name2, value4, unit, { ...metricTags, ...tags }, timestamp2); +} +__name(addToMetricsAggregator, "addToMetricsAggregator"); +function increment$2(aggregator, name2, value4 = 1, data26) { + addToMetricsAggregator(aggregator, COUNTER_METRIC_TYPE, name2, ensureNumber(value4), data26); +} +__name(increment$2, "increment$2"); +function distribution$2(aggregator, name2, value4, data26) { + addToMetricsAggregator(aggregator, DISTRIBUTION_METRIC_TYPE, name2, ensureNumber(value4), data26); +} +__name(distribution$2, "distribution$2"); +function timing$2(aggregator, name2, value4, unit = "second", data26) { + if (typeof value4 === "function") { + const startTime = timestampInSeconds(); + return startSpanManual( + { + op: "metrics.timing", + name: name2, + startTime, + onlyIfParent: true + }, + (span) => { + return handleCallbackErrors( + () => value4(), + () => { + }, + () => { + const endTime = timestampInSeconds(); + const timeDiff = endTime - startTime; + distribution$2(aggregator, name2, timeDiff, { ...data26, unit: "second" }); + span.end(endTime); + } + ); + } + ); + } + distribution$2(aggregator, name2, value4, { ...data26, unit }); +} +__name(timing$2, "timing$2"); +function set$6(aggregator, name2, value4, data26) { + addToMetricsAggregator(aggregator, SET_METRIC_TYPE, name2, value4, data26); +} +__name(set$6, "set$6"); +function gauge$2(aggregator, name2, value4, data26) { + addToMetricsAggregator(aggregator, GAUGE_METRIC_TYPE, name2, ensureNumber(value4), data26); +} +__name(gauge$2, "gauge$2"); +const metrics$1 = { + increment: increment$2, + distribution: distribution$2, + set: set$6, + gauge: gauge$2, + timing: timing$2, + /** + * @ignore This is for internal use only. + */ + getMetricsAggregatorForClient: getMetricsAggregatorForClient$1 +}; +function ensureNumber(number2) { + return typeof number2 === "string" ? parseInt(number2) : number2; +} +__name(ensureNumber, "ensureNumber"); +function isProfilingIntegrationWithProfiler(integration) { + return !!integration && typeof integration["_profiler"] !== "undefined" && typeof integration["_profiler"]["start"] === "function" && typeof integration["_profiler"]["stop"] === "function"; +} +__name(isProfilingIntegrationWithProfiler, "isProfilingIntegrationWithProfiler"); +function startProfiler() { + const client = getClient(); + if (!client) { + DEBUG_BUILD$6 && logger$2.warn("No Sentry client available, profiling is not started"); + return; + } + const integration = client.getIntegrationByName("ProfilingIntegration"); + if (!integration) { + DEBUG_BUILD$6 && logger$2.warn("ProfilingIntegration is not available"); + return; + } + if (!isProfilingIntegrationWithProfiler(integration)) { + DEBUG_BUILD$6 && logger$2.warn("Profiler is not available on profiling integration."); + return; + } + integration._profiler.start(); +} +__name(startProfiler, "startProfiler"); +function stopProfiler() { + const client = getClient(); + if (!client) { + DEBUG_BUILD$6 && logger$2.warn("No Sentry client available, profiling is not started"); + return; + } + const integration = client.getIntegrationByName("ProfilingIntegration"); + if (!integration) { + DEBUG_BUILD$6 && logger$2.warn("ProfilingIntegration is not available"); + return; + } + if (!isProfilingIntegrationWithProfiler(integration)) { + DEBUG_BUILD$6 && logger$2.warn("Profiler is not available on profiling integration."); + return; + } + integration._profiler.stop(); +} +__name(stopProfiler, "stopProfiler"); +const profiler = { + startProfiler, + stopProfiler +}; +function getBucketKey(metricType, name2, unit, tags) { + const stringifiedTags = Object.entries(dropUndefinedKeys(tags)).sort((a2, b2) => a2[0].localeCompare(b2[0])); + return `${metricType}${name2}${unit}${stringifiedTags}`; +} +__name(getBucketKey, "getBucketKey"); +function simpleHash(s2) { + let rv = 0; + for (let i2 = 0; i2 < s2.length; i2++) { + const c2 = s2.charCodeAt(i2); + rv = (rv << 5) - rv + c2; + rv &= rv; + } + return rv >>> 0; +} +__name(simpleHash, "simpleHash"); +function serializeMetricBuckets(metricBucketItems) { + let out = ""; + for (const item3 of metricBucketItems) { + const tagEntries = Object.entries(item3.tags); + const maybeTags = tagEntries.length > 0 ? `|#${tagEntries.map(([key, value4]) => `${key}:${value4}`).join(",")}` : ""; + out += `${item3.name}@${item3.unit}:${item3.metric}|${item3.metricType}${maybeTags}|T${item3.timestamp} +`; + } + return out; +} +__name(serializeMetricBuckets, "serializeMetricBuckets"); +function sanitizeUnit(unit) { + return unit.replace(/[^\w]+/gi, "_"); +} +__name(sanitizeUnit, "sanitizeUnit"); +function sanitizeMetricKey(key) { + return key.replace(/[^\w\-.]+/gi, "_"); +} +__name(sanitizeMetricKey, "sanitizeMetricKey"); +function sanitizeTagKey(key) { + return key.replace(/[^\w\-./]+/gi, ""); +} +__name(sanitizeTagKey, "sanitizeTagKey"); +const tagValueReplacements = [ + ["\n", "\\n"], + ["\r", "\\r"], + [" ", "\\t"], + ["\\", "\\\\"], + ["|", "\\u{7c}"], + [",", "\\u{2c}"] +]; +function getCharOrReplacement(input) { + for (const [search2, replacement] of tagValueReplacements) { + if (input === search2) { + return replacement; + } + } + return input; +} +__name(getCharOrReplacement, "getCharOrReplacement"); +function sanitizeTagValue(value4) { + return [...value4].reduce((acc, char) => acc + getCharOrReplacement(char), ""); +} +__name(sanitizeTagValue, "sanitizeTagValue"); +function sanitizeTags(unsanitizedTags) { + const tags = {}; + for (const key in unsanitizedTags) { + if (Object.prototype.hasOwnProperty.call(unsanitizedTags, key)) { + const sanitizedKey = sanitizeTagKey(key); + tags[sanitizedKey] = sanitizeTagValue(String(unsanitizedTags[key])); + } + } + return tags; +} +__name(sanitizeTags, "sanitizeTags"); +function captureAggregateMetrics(client, metricBucketItems) { + logger$2.log(`Flushing aggregated metrics, number of metrics: ${metricBucketItems.length}`); + const dsn = client.getDsn(); + const metadata = client.getSdkMetadata(); + const tunnel = client.getOptions().tunnel; + const metricsEnvelope = createMetricEnvelope(metricBucketItems, dsn, metadata, tunnel); + client.sendEnvelope(metricsEnvelope); +} +__name(captureAggregateMetrics, "captureAggregateMetrics"); +function createMetricEnvelope(metricBucketItems, dsn, metadata, tunnel) { + const headers = { + sent_at: (/* @__PURE__ */ new Date()).toISOString() + }; + if (metadata && metadata.sdk) { + headers.sdk = { + name: metadata.sdk.name, + version: metadata.sdk.version + }; + } + if (!!tunnel && dsn) { + headers.dsn = dsnToString(dsn); + } + const item3 = createMetricEnvelopeItem(metricBucketItems); + return createEnvelope(headers, [item3]); +} +__name(createMetricEnvelope, "createMetricEnvelope"); +function createMetricEnvelopeItem(metricBucketItems) { + const payload = serializeMetricBuckets(metricBucketItems); + const metricHeaders = { + type: "statsd", + length: payload.length + }; + return [metricHeaders, payload]; +} +__name(createMetricEnvelopeItem, "createMetricEnvelopeItem"); +class CounterMetric { + static { + __name(this, "CounterMetric"); + } + constructor(_value) { + this._value = _value; + } + /** @inheritDoc */ + get weight() { + return 1; + } + /** @inheritdoc */ + add(value4) { + this._value += value4; + } + /** @inheritdoc */ + toString() { + return `${this._value}`; + } +} +class GaugeMetric { + static { + __name(this, "GaugeMetric"); + } + constructor(value4) { + this._last = value4; + this._min = value4; + this._max = value4; + this._sum = value4; + this._count = 1; + } + /** @inheritDoc */ + get weight() { + return 5; + } + /** @inheritdoc */ + add(value4) { + this._last = value4; + if (value4 < this._min) { + this._min = value4; + } + if (value4 > this._max) { + this._max = value4; + } + this._sum += value4; + this._count++; + } + /** @inheritdoc */ + toString() { + return `${this._last}:${this._min}:${this._max}:${this._sum}:${this._count}`; + } +} +class DistributionMetric { + static { + __name(this, "DistributionMetric"); + } + constructor(first2) { + this._value = [first2]; + } + /** @inheritDoc */ + get weight() { + return this._value.length; + } + /** @inheritdoc */ + add(value4) { + this._value.push(value4); + } + /** @inheritdoc */ + toString() { + return this._value.join(":"); + } +} +class SetMetric { + static { + __name(this, "SetMetric"); + } + constructor(first2) { + this.first = first2; + this._value = /* @__PURE__ */ new Set([first2]); + } + /** @inheritDoc */ + get weight() { + return this._value.size; + } + /** @inheritdoc */ + add(value4) { + this._value.add(value4); + } + /** @inheritdoc */ + toString() { + return Array.from(this._value).map((val) => typeof val === "string" ? simpleHash(val) : val).join(":"); + } +} +const METRIC_MAP = { + [COUNTER_METRIC_TYPE]: CounterMetric, + [GAUGE_METRIC_TYPE]: GaugeMetric, + [DISTRIBUTION_METRIC_TYPE]: DistributionMetric, + [SET_METRIC_TYPE]: SetMetric +}; +class MetricsAggregator { + static { + __name(this, "MetricsAggregator"); + } + // TODO(@anonrig): Use FinalizationRegistry to have a proper way of flushing the buckets + // when the aggregator is garbage collected. + // Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry + // Different metrics have different weights. We use this to limit the number of metrics + // that we store in memory. + // We adjust the type here to add the `unref()` part, as setInterval can technically return a number or a NodeJS.Timer + // SDKs are required to shift the flush interval by random() * rollup_in_seconds. + // That shift is determined once per startup to create jittering. + // An SDK is required to perform force flushing ahead of scheduled time if the memory + // pressure is too high. There is no rule for this other than that SDKs should be tracking + // abstract aggregation complexity (eg: a counter only carries a single float, whereas a + // distribution is a float per emission). + // + // Force flush is used on either shutdown, flush() or when we exceed the max weight. + constructor(_client) { + this._client = _client; + this._buckets = /* @__PURE__ */ new Map(); + this._bucketsTotalWeight = 0; + this._interval = setInterval(() => this._flush(), DEFAULT_FLUSH_INTERVAL); + if (this._interval.unref) { + this._interval.unref(); + } + this._flushShift = Math.floor(Math.random() * DEFAULT_FLUSH_INTERVAL / 1e3); + this._forceFlush = false; + } + /** + * @inheritDoc + */ + add(metricType, unsanitizedName, value4, unsanitizedUnit = "none", unsanitizedTags = {}, maybeFloatTimestamp = timestampInSeconds()) { + const timestamp2 = Math.floor(maybeFloatTimestamp); + const name2 = sanitizeMetricKey(unsanitizedName); + const tags = sanitizeTags(unsanitizedTags); + const unit = sanitizeUnit(unsanitizedUnit); + const bucketKey = getBucketKey(metricType, name2, unit, tags); + let bucketItem = this._buckets.get(bucketKey); + const previousWeight = bucketItem && metricType === SET_METRIC_TYPE ? bucketItem.metric.weight : 0; + if (bucketItem) { + bucketItem.metric.add(value4); + if (bucketItem.timestamp < timestamp2) { + bucketItem.timestamp = timestamp2; + } + } else { + bucketItem = { + // @ts-expect-error we don't need to narrow down the type of value here, saves bundle size. + metric: new METRIC_MAP[metricType](value4), + timestamp: timestamp2, + metricType, + name: name2, + unit, + tags + }; + this._buckets.set(bucketKey, bucketItem); + } + const val = typeof value4 === "string" ? bucketItem.metric.weight - previousWeight : value4; + updateMetricSummaryOnActiveSpan(metricType, name2, val, unit, unsanitizedTags, bucketKey); + this._bucketsTotalWeight += bucketItem.metric.weight; + if (this._bucketsTotalWeight >= MAX_WEIGHT) { + this.flush(); + } + } + /** + * Flushes the current metrics to the transport via the transport. + */ + flush() { + this._forceFlush = true; + this._flush(); + } + /** + * Shuts down metrics aggregator and clears all metrics. + */ + close() { + this._forceFlush = true; + clearInterval(this._interval); + this._flush(); + } + /** + * Flushes the buckets according to the internal state of the aggregator. + * If it is a force flush, which happens on shutdown, it will flush all buckets. + * Otherwise, it will only flush buckets that are older than the flush interval, + * and according to the flush shift. + * + * This function mutates `_forceFlush` and `_bucketsTotalWeight` properties. + */ + _flush() { + if (this._forceFlush) { + this._forceFlush = false; + this._bucketsTotalWeight = 0; + this._captureMetrics(this._buckets); + this._buckets.clear(); + return; + } + const cutoffSeconds = Math.floor(timestampInSeconds()) - DEFAULT_FLUSH_INTERVAL / 1e3 - this._flushShift; + const flushedBuckets = /* @__PURE__ */ new Map(); + for (const [key, bucket] of this._buckets) { + if (bucket.timestamp <= cutoffSeconds) { + flushedBuckets.set(key, bucket); + this._bucketsTotalWeight -= bucket.metric.weight; + } + } + for (const [key] of flushedBuckets) { + this._buckets.delete(key); + } + this._captureMetrics(flushedBuckets); + } + /** + * Only captures a subset of the buckets passed to this function. + * @param flushedBuckets + */ + _captureMetrics(flushedBuckets) { + if (flushedBuckets.size > 0) { + const buckets = Array.from(flushedBuckets).map(([, bucketItem]) => bucketItem); + captureAggregateMetrics(this._client, buckets); + } + } +} +function increment$1(name2, value4 = 1, data26) { + metrics$1.increment(MetricsAggregator, name2, value4, data26); +} +__name(increment$1, "increment$1"); +function distribution$1(name2, value4, data26) { + metrics$1.distribution(MetricsAggregator, name2, value4, data26); +} +__name(distribution$1, "distribution$1"); +function set$5(name2, value4, data26) { + metrics$1.set(MetricsAggregator, name2, value4, data26); +} +__name(set$5, "set$5"); +function gauge$1(name2, value4, data26) { + metrics$1.gauge(MetricsAggregator, name2, value4, data26); +} +__name(gauge$1, "gauge$1"); +function timing$1(name2, value4, unit = "second", data26) { + return metrics$1.timing(MetricsAggregator, name2, value4, unit, data26); +} +__name(timing$1, "timing$1"); +function getMetricsAggregatorForClient(client) { + return metrics$1.getMetricsAggregatorForClient(client, MetricsAggregator); +} +__name(getMetricsAggregatorForClient, "getMetricsAggregatorForClient"); +const metricsDefault = { + increment: increment$1, + distribution: distribution$1, + set: set$5, + gauge: gauge$1, + timing: timing$1, + /** + * @ignore This is for internal use only. + */ + getMetricsAggregatorForClient +}; +class BrowserMetricsAggregator { + static { + __name(this, "BrowserMetricsAggregator"); + } + // TODO(@anonrig): Use FinalizationRegistry to have a proper way of flushing the buckets + // when the aggregator is garbage collected. + // Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry + constructor(_client) { + this._client = _client; + this._buckets = /* @__PURE__ */ new Map(); + this._interval = setInterval(() => this.flush(), DEFAULT_BROWSER_FLUSH_INTERVAL); + } + /** + * @inheritDoc + */ + add(metricType, unsanitizedName, value4, unsanitizedUnit = "none", unsanitizedTags = {}, maybeFloatTimestamp = timestampInSeconds()) { + const timestamp2 = Math.floor(maybeFloatTimestamp); + const name2 = sanitizeMetricKey(unsanitizedName); + const tags = sanitizeTags(unsanitizedTags); + const unit = sanitizeUnit(unsanitizedUnit); + const bucketKey = getBucketKey(metricType, name2, unit, tags); + let bucketItem = this._buckets.get(bucketKey); + const previousWeight = bucketItem && metricType === SET_METRIC_TYPE ? bucketItem.metric.weight : 0; + if (bucketItem) { + bucketItem.metric.add(value4); + if (bucketItem.timestamp < timestamp2) { + bucketItem.timestamp = timestamp2; + } + } else { + bucketItem = { + // @ts-expect-error we don't need to narrow down the type of value here, saves bundle size. + metric: new METRIC_MAP[metricType](value4), + timestamp: timestamp2, + metricType, + name: name2, + unit, + tags + }; + this._buckets.set(bucketKey, bucketItem); + } + const val = typeof value4 === "string" ? bucketItem.metric.weight - previousWeight : value4; + updateMetricSummaryOnActiveSpan(metricType, name2, val, unit, unsanitizedTags, bucketKey); + } + /** + * @inheritDoc + */ + flush() { + if (this._buckets.size === 0) { + return; + } + const metricBuckets = Array.from(this._buckets.values()); + captureAggregateMetrics(this._client, metricBuckets); + this._buckets.clear(); + } + /** + * @inheritDoc + */ + close() { + clearInterval(this._interval); + this.flush(); + } +} +function instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeaders2, spans, spanOrigin = "auto.http.browser") { + if (!handlerData.fetchData) { + return void 0; + } + const shouldCreateSpanResult = hasTracingEnabled() && shouldCreateSpan(handlerData.fetchData.url); + if (handlerData.endTimestamp && shouldCreateSpanResult) { + const spanId = handlerData.fetchData.__span; + if (!spanId) return; + const span2 = spans[spanId]; + if (span2) { + endSpan(span2, handlerData); + delete spans[spanId]; + } + return void 0; + } + const { method, url } = handlerData.fetchData; + const fullUrl = getFullURL$1(url); + const host = fullUrl ? parseUrl$1(fullUrl).host : void 0; + const hasParent = !!getActiveSpan(); + const span = shouldCreateSpanResult && hasParent ? startInactiveSpan({ + name: `${method} ${url}`, + attributes: { + url, + type: "fetch", + "http.method": method, + "http.url": fullUrl, + "server.address": host, + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin, + [SEMANTIC_ATTRIBUTE_SENTRY_OP]: "http.client" + } + }) : new SentryNonRecordingSpan(); + handlerData.fetchData.__span = span.spanContext().spanId; + spans[span.spanContext().spanId] = span; + if (shouldAttachHeaders2(handlerData.fetchData.url)) { + const request = handlerData.args[0]; + const options4 = handlerData.args[1] || {}; + const headers = _addTracingHeadersToFetchRequest( + request, + options4, + // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction), + // we do not want to use the span as base for the trace headers, + // which means that the headers will be generated from the scope and the sampling decision is deferred + hasTracingEnabled() && hasParent ? span : void 0 + ); + if (headers) { + handlerData.args[1] = options4; + options4.headers = headers; + } + } + return span; +} +__name(instrumentFetchRequest, "instrumentFetchRequest"); +function _addTracingHeadersToFetchRequest(request, fetchOptionsObj, span) { + const traceHeaders = getTraceData({ span }); + const sentryTrace = traceHeaders["sentry-trace"]; + const baggage = traceHeaders.baggage; + if (!sentryTrace) { + return void 0; + } + const headers = fetchOptionsObj.headers || (isRequest$1(request) ? request.headers : void 0); + if (!headers) { + return { ...traceHeaders }; + } else if (isHeaders$1(headers)) { + const newHeaders = new Headers(headers); + newHeaders.set("sentry-trace", sentryTrace); + if (baggage) { + const prevBaggageHeader = newHeaders.get("baggage"); + if (prevBaggageHeader) { + const prevHeaderStrippedFromSentryBaggage = stripBaggageHeaderOfSentryBaggageValues(prevBaggageHeader); + newHeaders.set( + "baggage", + // If there are non-sentry entries (i.e. if the stripped string is non-empty/truthy) combine the stripped header and sentry baggage header + // otherwise just set the sentry baggage header + prevHeaderStrippedFromSentryBaggage ? `${prevHeaderStrippedFromSentryBaggage},${baggage}` : baggage + ); + } else { + newHeaders.set("baggage", baggage); + } + } + return newHeaders; + } else if (Array.isArray(headers)) { + const newHeaders = [ + ...headers.filter((header3) => { + return !(Array.isArray(header3) && header3[0] === "sentry-trace"); + }).map((header3) => { + if (Array.isArray(header3) && header3[0] === "baggage" && typeof header3[1] === "string") { + const [headerName, headerValue, ...rest] = header3; + return [headerName, stripBaggageHeaderOfSentryBaggageValues(headerValue), ...rest]; + } else { + return header3; + } + }), + // Attach the new sentry-trace header + ["sentry-trace", sentryTrace] + ]; + if (baggage) { + newHeaders.push(["baggage", baggage]); + } + return newHeaders; + } else { + const existingBaggageHeader = "baggage" in headers ? headers.baggage : void 0; + let newBaggageHeaders = []; + if (Array.isArray(existingBaggageHeader)) { + newBaggageHeaders = existingBaggageHeader.map( + (headerItem) => typeof headerItem === "string" ? stripBaggageHeaderOfSentryBaggageValues(headerItem) : headerItem + ).filter((headerItem) => headerItem === ""); + } else if (existingBaggageHeader) { + newBaggageHeaders.push(stripBaggageHeaderOfSentryBaggageValues(existingBaggageHeader)); + } + if (baggage) { + newBaggageHeaders.push(baggage); + } + return { + ...headers, + "sentry-trace": sentryTrace, + baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(",") : void 0 + }; + } +} +__name(_addTracingHeadersToFetchRequest, "_addTracingHeadersToFetchRequest"); +function addTracingHeadersToFetchRequest(request, _client, _scope, fetchOptionsObj, span) { + return _addTracingHeadersToFetchRequest(request, fetchOptionsObj, span); +} +__name(addTracingHeadersToFetchRequest, "addTracingHeadersToFetchRequest"); +function getFullURL$1(url) { + try { + const parsed = new URL(url); + return parsed.href; + } catch (e2) { + return void 0; + } +} +__name(getFullURL$1, "getFullURL$1"); +function endSpan(span, handlerData) { + if (handlerData.response) { + setHttpStatus(span, handlerData.response.status); + const contentLength = handlerData.response && handlerData.response.headers && handlerData.response.headers.get("content-length"); + if (contentLength) { + const contentLengthNum = parseInt(contentLength); + if (contentLengthNum > 0) { + span.setAttribute("http.response_content_length", contentLengthNum); + } + } + } else if (handlerData.error) { + span.setStatus({ code: SPAN_STATUS_ERROR, message: "internal_error" }); + } + span.end(); +} +__name(endSpan, "endSpan"); +function stripBaggageHeaderOfSentryBaggageValues(baggageHeader) { + return baggageHeader.split(",").filter((baggageEntry) => !baggageEntry.split("=")[0].startsWith(SENTRY_BAGGAGE_KEY_PREFIX)).join(","); +} +__name(stripBaggageHeaderOfSentryBaggageValues, "stripBaggageHeaderOfSentryBaggageValues"); +function isRequest$1(request) { + return typeof Request !== "undefined" && isInstanceOf(request, Request); +} +__name(isRequest$1, "isRequest$1"); +function isHeaders$1(headers) { + return typeof Headers !== "undefined" && isInstanceOf(headers, Headers); +} +__name(isHeaders$1, "isHeaders$1"); +const trpcCaptureContext = { mechanism: { handled: false, data: { function: "trpcMiddleware" } } }; +function captureIfError(nextResult) { + if (typeof nextResult === "object" && nextResult !== null && "ok" in nextResult && !nextResult.ok && "error" in nextResult) { + captureException(nextResult.error, trpcCaptureContext); + } +} +__name(captureIfError, "captureIfError"); +function trpcMiddleware(options4 = {}) { + return async function(opts) { + const { path, type, next: next2, rawInput, getRawInput } = opts; + const client = getClient(); + const clientOptions = client && client.getOptions(); + const trpcContext = { + procedure_path: path, + procedure_type: type + }; + if (options4.attachRpcInput !== void 0 ? options4.attachRpcInput : clientOptions && clientOptions.sendDefaultPii) { + if (rawInput !== void 0) { + trpcContext.input = normalize$2(rawInput); + } + if (getRawInput !== void 0 && typeof getRawInput === "function") { + try { + const rawRes = await getRawInput(); + trpcContext.input = normalize$2(rawRes); + } catch (err) { + } + } + } + return withScope((scope) => { + scope.setContext("trpc", trpcContext); + return startSpanManual( + { + name: `trpc/${path}`, + op: "rpc.server", + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "route", + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.rpc.trpc" + } + }, + async (span) => { + try { + const nextResult = await next2(); + captureIfError(nextResult); + span.end(); + return nextResult; + } catch (e2) { + captureException(e2, trpcCaptureContext); + span.end(); + throw e2; + } + } + ); + }); + }; +} +__name(trpcMiddleware, "trpcMiddleware"); +function captureFeedback(params, hint = {}, scope = getCurrentScope$1()) { + const { message: message3, name: name2, email, url, source, associatedEventId, tags } = params; + const feedbackEvent = { + contexts: { + feedback: dropUndefinedKeys({ + contact_email: email, + name: name2, + message: message3, + url, + source, + associated_event_id: associatedEventId + }) + }, + type: "feedback", + level: "info", + tags + }; + const client = scope && scope.getClient() || getClient(); + if (client) { + client.emit("beforeSendFeedback", feedbackEvent, hint); + } + const eventId = scope.captureEvent(feedbackEvent, hint); + return eventId; +} +__name(captureFeedback, "captureFeedback"); +function getCurrentHubShim() { + return { + bindClient(client) { + const scope = getCurrentScope$1(); + scope.setClient(client); + }, + withScope, + getClient: /* @__PURE__ */ __name(() => getClient(), "getClient"), + getScope: getCurrentScope$1, + getIsolationScope, + captureException: /* @__PURE__ */ __name((exception, hint) => { + return getCurrentScope$1().captureException(exception, hint); + }, "captureException"), + captureMessage: /* @__PURE__ */ __name((message3, level, hint) => { + return getCurrentScope$1().captureMessage(message3, level, hint); + }, "captureMessage"), + captureEvent, + addBreadcrumb, + setUser, + setTags, + setTag: setTag$5, + setExtra, + setExtras, + setContext, + getIntegration(integration) { + const client = getClient(); + return client && client.getIntegrationByName(integration.id) || null; + }, + startSession, + endSession, + captureSession(end) { + if (end) { + return endSession(); + } + _sendSessionUpdate(); + } + }; +} +__name(getCurrentHubShim, "getCurrentHubShim"); +const getCurrentHub = getCurrentHubShim; +function _sendSessionUpdate() { + const scope = getCurrentScope$1(); + const client = getClient(); + const session = scope.getSession(); + if (client && session) { + client.captureSession(session); + } +} +__name(_sendSessionUpdate, "_sendSessionUpdate"); +function flatten(input) { + const result = []; + const flattenHelper = /* @__PURE__ */ __name((input2) => { + input2.forEach((el) => { + if (Array.isArray(el)) { + flattenHelper(el); + } else { + result.push(el); + } + }); + }, "flattenHelper"); + flattenHelper(input); + return result; +} +__name(flatten, "flatten"); +function getBreadcrumbLogLevelFromHttpStatusCode(statusCode) { + if (statusCode === void 0) { + return void 0; + } else if (statusCode >= 400 && statusCode < 500) { + return "warning"; + } else if (statusCode >= 500) { + return "error"; + } else { + return void 0; + } +} +__name(getBreadcrumbLogLevelFromHttpStatusCode, "getBreadcrumbLogLevelFromHttpStatusCode"); +const WINDOW$7 = GLOBAL_OBJ; +function supportsErrorEvent() { + try { + new ErrorEvent(""); + return true; + } catch (e2) { + return false; + } +} +__name(supportsErrorEvent, "supportsErrorEvent"); +function supportsDOMError() { + try { + new DOMError(""); + return true; + } catch (e2) { + return false; + } +} +__name(supportsDOMError, "supportsDOMError"); +function supportsDOMException() { + try { + new DOMException(""); + return true; + } catch (e2) { + return false; + } +} +__name(supportsDOMException, "supportsDOMException"); +function supportsFetch() { + if (!("fetch" in WINDOW$7)) { + return false; + } + try { + new Headers(); + new Request("http://www.example.com"); + new Response(); + return true; + } catch (e2) { + return false; + } +} +__name(supportsFetch, "supportsFetch"); +function isNativeFunction(func) { + return func && /^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(func.toString()); +} +__name(isNativeFunction, "isNativeFunction"); +function supportsNativeFetch() { + if (typeof EdgeRuntime === "string") { + return true; + } + if (!supportsFetch()) { + return false; + } + if (isNativeFunction(WINDOW$7.fetch)) { + return true; + } + let result = false; + const doc2 = WINDOW$7.document; + if (doc2 && typeof doc2.createElement === "function") { + try { + const sandbox = doc2.createElement("iframe"); + sandbox.hidden = true; + doc2.head.appendChild(sandbox); + if (sandbox.contentWindow && sandbox.contentWindow.fetch) { + result = isNativeFunction(sandbox.contentWindow.fetch); + } + doc2.head.removeChild(sandbox); + } catch (err) { + DEBUG_BUILD$5 && logger$2.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ", err); + } + } + return result; +} +__name(supportsNativeFetch, "supportsNativeFetch"); +function supportsReportingObserver() { + return "ReportingObserver" in WINDOW$7; +} +__name(supportsReportingObserver, "supportsReportingObserver"); +function supportsReferrerPolicy() { + if (!supportsFetch()) { + return false; + } + try { + new Request("_", { + referrerPolicy: "origin" + }); + return true; + } catch (e2) { + return false; + } +} +__name(supportsReferrerPolicy, "supportsReferrerPolicy"); +function addFetchInstrumentationHandler(handler12, skipNativeFetchCheck) { + const type = "fetch"; + addHandler$1(type, handler12); + maybeInstrument(type, () => instrumentFetch(void 0, skipNativeFetchCheck)); +} +__name(addFetchInstrumentationHandler, "addFetchInstrumentationHandler"); +function addFetchEndInstrumentationHandler(handler12) { + const type = "fetch-body-resolved"; + addHandler$1(type, handler12); + maybeInstrument(type, () => instrumentFetch(streamHandler)); +} +__name(addFetchEndInstrumentationHandler, "addFetchEndInstrumentationHandler"); +function instrumentFetch(onFetchResolved, skipNativeFetchCheck = false) { + if (skipNativeFetchCheck && !supportsNativeFetch()) { + return; + } + fill(GLOBAL_OBJ, "fetch", function(originalFetch) { + return function(...args) { + const virtualError = new Error(); + const { method, url } = parseFetchArgs(args); + const handlerData = { + args, + fetchData: { + method, + url + }, + startTimestamp: timestampInSeconds() * 1e3, + // // Adding the error to be able to fingerprint the failed fetch event in HttpClient instrumentation + virtualError + }; + if (!onFetchResolved) { + triggerHandlers$1("fetch", { + ...handlerData + }); + } + return originalFetch.apply(GLOBAL_OBJ, args).then( + async (response) => { + if (onFetchResolved) { + onFetchResolved(response); + } else { + triggerHandlers$1("fetch", { + ...handlerData, + endTimestamp: timestampInSeconds() * 1e3, + response + }); + } + return response; + }, + (error2) => { + triggerHandlers$1("fetch", { + ...handlerData, + endTimestamp: timestampInSeconds() * 1e3, + error: error2 + }); + if (isError(error2) && error2.stack === void 0) { + error2.stack = virtualError.stack; + addNonEnumerableProperty(error2, "framesToPop", 1); + } + throw error2; + } + ); + }; + }); +} +__name(instrumentFetch, "instrumentFetch"); +async function resolveResponse(res, onFinishedResolving) { + if (res && res.body) { + const body = res.body; + const responseReader = body.getReader(); + const maxFetchDurationTimeout = setTimeout( + () => { + body.cancel().then(null, () => { + }); + }, + 90 * 1e3 + // 90s + ); + let readingActive = true; + while (readingActive) { + let chunkTimeout; + try { + chunkTimeout = setTimeout(() => { + body.cancel().then(null, () => { + }); + }, 5e3); + const { done } = await responseReader.read(); + clearTimeout(chunkTimeout); + if (done) { + onFinishedResolving(); + readingActive = false; + } + } catch (error2) { + readingActive = false; + } finally { + clearTimeout(chunkTimeout); + } + } + clearTimeout(maxFetchDurationTimeout); + responseReader.releaseLock(); + body.cancel().then(null, () => { + }); + } +} +__name(resolveResponse, "resolveResponse"); +function streamHandler(response) { + let clonedResponseForResolving; + try { + clonedResponseForResolving = response.clone(); + } catch (e2) { + return; + } + resolveResponse(clonedResponseForResolving, () => { + triggerHandlers$1("fetch-body-resolved", { + endTimestamp: timestampInSeconds() * 1e3, + response + }); + }); +} +__name(streamHandler, "streamHandler"); +function hasProp(obj, prop2) { + return !!obj && typeof obj === "object" && !!obj[prop2]; +} +__name(hasProp, "hasProp"); +function getUrlFromResource(resource) { + if (typeof resource === "string") { + return resource; + } + if (!resource) { + return ""; + } + if (hasProp(resource, "url")) { + return resource.url; + } + if (resource.toString) { + return resource.toString(); + } + return ""; +} +__name(getUrlFromResource, "getUrlFromResource"); +function parseFetchArgs(fetchArgs) { + if (fetchArgs.length === 0) { + return { method: "GET", url: "" }; + } + if (fetchArgs.length === 2) { + const [url, options4] = fetchArgs; + return { + url: getUrlFromResource(url), + method: hasProp(options4, "method") ? String(options4.method).toUpperCase() : "GET" + }; + } + const arg = fetchArgs[0]; + return { + url: getUrlFromResource(arg), + method: hasProp(arg, "method") ? String(arg.method).toUpperCase() : "GET" + }; +} +__name(parseFetchArgs, "parseFetchArgs"); +function isBrowserBundle() { + return typeof __SENTRY_BROWSER_BUNDLE__ !== "undefined" && !!__SENTRY_BROWSER_BUNDLE__; +} +__name(isBrowserBundle, "isBrowserBundle"); +function getSDKSource() { + return "npm"; +} +__name(getSDKSource, "getSDKSource"); +function isNodeEnv() { + return !isBrowserBundle() && Object.prototype.toString.call(typeof process !== "undefined" ? process : 0) === "[object process]"; +} +__name(isNodeEnv, "isNodeEnv"); +function dynamicRequire(mod, request) { + return mod.require(request); +} +__name(dynamicRequire, "dynamicRequire"); +function loadModule(moduleName) { + let mod; + try { + mod = dynamicRequire(module, moduleName); + } catch (e2) { + } + if (!mod) { + try { + const { cwd } = dynamicRequire(module, "process"); + mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`); + } catch (e2) { + } + } + return mod; +} +__name(loadModule, "loadModule"); +function isBrowser$1() { + return typeof window !== "undefined" && (!isNodeEnv() || isElectronNodeRenderer()); +} +__name(isBrowser$1, "isBrowser$1"); +function isElectronNodeRenderer() { + const process2 = GLOBAL_OBJ.process; + return !!process2 && process2.type === "renderer"; +} +__name(isElectronNodeRenderer, "isElectronNodeRenderer"); +function filenameIsInApp(filename, isNative = false) { + const isInternal = isNative || filename && // It's not internal if it's an absolute linux path + !filename.startsWith("/") && // It's not internal if it's an absolute windows path + !filename.match(/^[A-Z]:/) && // It's not internal if the path is starting with a dot + !filename.startsWith(".") && // It's not internal if the frame has a protocol. In node, this is usually the case if the file got pre-processed with a bundler like webpack + !filename.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//); + return !isInternal && filename !== void 0 && !filename.includes("node_modules/"); +} +__name(filenameIsInApp, "filenameIsInApp"); +function node(getModule) { + const FILENAME_MATCH = /^\s*[-]{4,}$/; + const FULL_MATCH = /at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/; + return (line) => { + const lineMatch = line.match(FULL_MATCH); + if (lineMatch) { + let object; + let method; + let functionName; + let typeName; + let methodName; + if (lineMatch[1]) { + functionName = lineMatch[1]; + let methodStart = functionName.lastIndexOf("."); + if (functionName[methodStart - 1] === ".") { + methodStart--; + } + if (methodStart > 0) { + object = functionName.slice(0, methodStart); + method = functionName.slice(methodStart + 1); + const objectEnd = object.indexOf(".Module"); + if (objectEnd > 0) { + functionName = functionName.slice(objectEnd + 1); + object = object.slice(0, objectEnd); + } + } + typeName = void 0; + } + if (method) { + typeName = object; + methodName = method; + } + if (method === "") { + methodName = void 0; + functionName = void 0; + } + if (functionName === void 0) { + methodName = methodName || UNKNOWN_FUNCTION; + functionName = typeName ? `${typeName}.${methodName}` : methodName; + } + let filename = lineMatch[2] && lineMatch[2].startsWith("file://") ? lineMatch[2].slice(7) : lineMatch[2]; + const isNative = lineMatch[5] === "native"; + if (filename && filename.match(/\/[A-Z]:/)) { + filename = filename.slice(1); + } + if (!filename && lineMatch[5] && !isNative) { + filename = lineMatch[5]; + } + return { + filename: filename ? decodeURI(filename) : void 0, + module: getModule ? getModule(filename) : void 0, + function: functionName, + lineno: _parseIntOrUndefined(lineMatch[3]), + colno: _parseIntOrUndefined(lineMatch[4]), + in_app: filenameIsInApp(filename || "", isNative) + }; + } + if (line.match(FILENAME_MATCH)) { + return { + filename: line + }; + } + return void 0; + }; +} +__name(node, "node"); +function nodeStackLineParser(getModule) { + return [90, node(getModule)]; +} +__name(nodeStackLineParser, "nodeStackLineParser"); +function _parseIntOrUndefined(input) { + return parseInt(input || "", 10) || void 0; +} +__name(_parseIntOrUndefined, "_parseIntOrUndefined"); +function makeFifoCache(size) { + let evictionOrder = []; + let cache2 = {}; + return { + add(key, value4) { + while (evictionOrder.length >= size) { + const evictCandidate = evictionOrder.shift(); + if (evictCandidate !== void 0) { + delete cache2[evictCandidate]; + } + } + if (cache2[key]) { + this.delete(key); + } + evictionOrder.push(key); + cache2[key] = value4; + }, + clear() { + cache2 = {}; + evictionOrder = []; + }, + get(key) { + return cache2[key]; + }, + size() { + return evictionOrder.length; + }, + // Delete cache key and return true if it existed, false otherwise. + delete(key) { + if (!cache2[key]) { + return false; + } + delete cache2[key]; + for (let i2 = 0; i2 < evictionOrder.length; i2++) { + if (evictionOrder[i2] === key) { + evictionOrder.splice(i2, 1); + break; + } + } + return true; + } + }; +} +__name(makeFifoCache, "makeFifoCache"); +function watchdogTimer(createTimer, pollInterval, anrThreshold, callback) { + const timer = createTimer(); + let triggered = false; + let enabled = true; + setInterval(() => { + const diffMs = timer.getTimeMs(); + if (triggered === false && diffMs > pollInterval + anrThreshold) { + triggered = true; + if (enabled) { + callback(); + } + } + if (diffMs < pollInterval + anrThreshold) { + triggered = false; + } + }, 20); + return { + poll: /* @__PURE__ */ __name(() => { + timer.reset(); + }, "poll"), + enabled: /* @__PURE__ */ __name((state) => { + enabled = state; + }, "enabled") + }; +} +__name(watchdogTimer, "watchdogTimer"); +function callFrameToStackFrame(frame, url, getModuleFromFilename) { + const filename = url ? url.replace(/^file:\/\//, "") : void 0; + const colno = frame.location.columnNumber ? frame.location.columnNumber + 1 : void 0; + const lineno = frame.location.lineNumber ? frame.location.lineNumber + 1 : void 0; + return dropUndefinedKeys({ + filename, + module: getModuleFromFilename(filename), + function: frame.functionName || UNKNOWN_FUNCTION, + colno, + lineno, + in_app: filename ? filenameIsInApp(filename) : void 0 + }); +} +__name(callFrameToStackFrame, "callFrameToStackFrame"); +class LRUMap { + static { + __name(this, "LRUMap"); + } + constructor(_maxSize) { + this._maxSize = _maxSize; + this._cache = /* @__PURE__ */ new Map(); + } + /** Get the current size of the cache */ + get size() { + return this._cache.size; + } + /** Get an entry or undefined if it was not in the cache. Re-inserts to update the recently used order */ + get(key) { + const value4 = this._cache.get(key); + if (value4 === void 0) { + return void 0; + } + this._cache.delete(key); + this._cache.set(key, value4); + return value4; + } + /** Insert an entry and evict an older entry if we've reached maxSize */ + set(key, value4) { + if (this._cache.size >= this._maxSize) { + this._cache.delete(this._cache.keys().next().value); + } + this._cache.set(key, value4); + } + /** Remove an entry and return the entry if it was in the cache */ + remove(key) { + const value4 = this._cache.get(key); + if (value4) { + this._cache.delete(key); + } + return value4; + } + /** Clear all entries */ + clear() { + this._cache.clear(); + } + /** Get all the keys */ + keys() { + return Array.from(this._cache.keys()); + } + /** Get all the values */ + values() { + const values = []; + this._cache.forEach((value4) => values.push(value4)); + return values; + } +} +function vercelWaitUntil(task) { + const vercelRequestContextGlobal = ( + // @ts-expect-error This is not typed + GLOBAL_OBJ[Symbol.for("@vercel/request-context")] + ); + const ctx = vercelRequestContextGlobal && vercelRequestContextGlobal.get && vercelRequestContextGlobal.get() ? vercelRequestContextGlobal.get() : {}; + if (ctx && ctx.waitUntil) { + ctx.waitUntil(task); + } +} +__name(vercelWaitUntil, "vercelWaitUntil"); +function escapeStringForRegex(regexString) { + return regexString.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d"); +} +__name(escapeStringForRegex, "escapeStringForRegex"); +const WINDOW$6 = GLOBAL_OBJ; +function supportsHistory() { + const chromeVar = WINDOW$6.chrome; + const isChromePackagedApp = chromeVar && chromeVar.app && chromeVar.app.runtime; + const hasHistoryApi = "history" in WINDOW$6 && !!WINDOW$6.history.pushState && !!WINDOW$6.history.replaceState; + return !isChromePackagedApp && hasHistoryApi; +} +__name(supportsHistory, "supportsHistory"); +function _nullishCoalesce(lhs, rhsFn) { + return lhs != null ? lhs : rhsFn(); +} +__name(_nullishCoalesce, "_nullishCoalesce"); +async function _asyncNullishCoalesce(lhs, rhsFn) { + return _nullishCoalesce(lhs, rhsFn); +} +__name(_asyncNullishCoalesce, "_asyncNullishCoalesce"); +async function _asyncOptionalChain(ops) { + let lastAccessLHS = void 0; + let value4 = ops[0]; + let i2 = 1; + while (i2 < ops.length) { + const op = ops[i2]; + const fn = ops[i2 + 1]; + i2 += 2; + if ((op === "optionalAccess" || op === "optionalCall") && value4 == null) { + return; + } + if (op === "access" || op === "optionalAccess") { + lastAccessLHS = value4; + value4 = await fn(value4); + } else if (op === "call" || op === "optionalCall") { + value4 = await fn((...args) => value4.call(lastAccessLHS, ...args)); + lastAccessLHS = void 0; + } + } + return value4; +} +__name(_asyncOptionalChain, "_asyncOptionalChain"); +async function _asyncOptionalChainDelete(ops) { + const result = await _asyncOptionalChain(ops); + return result == null ? true : result; +} +__name(_asyncOptionalChainDelete, "_asyncOptionalChainDelete"); +function _optionalChain(ops) { + let lastAccessLHS = void 0; + let value4 = ops[0]; + let i2 = 1; + while (i2 < ops.length) { + const op = ops[i2]; + const fn = ops[i2 + 1]; + i2 += 2; + if ((op === "optionalAccess" || op === "optionalCall") && value4 == null) { + return; + } + if (op === "access" || op === "optionalAccess") { + lastAccessLHS = value4; + value4 = fn(value4); + } else if (op === "call" || op === "optionalCall") { + value4 = fn((...args) => value4.call(lastAccessLHS, ...args)); + lastAccessLHS = void 0; + } + } + return value4; +} +__name(_optionalChain, "_optionalChain"); +function _optionalChainDelete(ops) { + const result = _optionalChain(ops); + return result == null ? true : result; +} +__name(_optionalChainDelete, "_optionalChainDelete"); +const WINDOW$5 = GLOBAL_OBJ; +let ignoreOnError = 0; +function shouldIgnoreOnError() { + return ignoreOnError > 0; +} +__name(shouldIgnoreOnError, "shouldIgnoreOnError"); +function ignoreNextOnError() { + ignoreOnError++; + setTimeout(() => { + ignoreOnError--; + }); +} +__name(ignoreNextOnError, "ignoreNextOnError"); +function wrap$1(fn, options4 = {}) { + function isFunction2(fn2) { + return typeof fn2 === "function"; + } + __name(isFunction2, "isFunction"); + if (!isFunction2(fn)) { + return fn; + } + try { + const wrapper = fn.__sentry_wrapped__; + if (wrapper) { + if (typeof wrapper === "function") { + return wrapper; + } else { + return fn; + } + } + if (getOriginalFunction(fn)) { + return fn; + } + } catch (e2) { + return fn; + } + const sentryWrapped = /* @__PURE__ */ __name(function(...args) { + try { + const wrappedArguments = args.map((arg) => wrap$1(arg, options4)); + return fn.apply(this, wrappedArguments); + } catch (ex) { + ignoreNextOnError(); + withScope((scope) => { + scope.addEventProcessor((event) => { + if (options4.mechanism) { + addExceptionTypeValue(event, void 0, void 0); + addExceptionMechanism(event, options4.mechanism); + } + event.extra = { + ...event.extra, + arguments: args + }; + return event; + }); + captureException(ex); + }); + throw ex; + } + }, "sentryWrapped"); + try { + for (const property in fn) { + if (Object.prototype.hasOwnProperty.call(fn, property)) { + sentryWrapped[property] = fn[property]; + } + } + } catch (e2) { + } + markFunctionWrapped(sentryWrapped, fn); + addNonEnumerableProperty(fn, "__sentry_wrapped__", sentryWrapped); + try { + const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, "name"); + if (descriptor.configurable) { + Object.defineProperty(sentryWrapped, "name", { + get() { + return fn.name; + } + }); + } + } catch (e3) { + } + return sentryWrapped; +} +__name(wrap$1, "wrap$1"); +const DEBUG_BUILD$4 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; +function exceptionFromError(stackParser, ex) { + const frames = parseStackFrames(stackParser, ex); + const exception = { + type: extractType(ex), + value: extractMessage(ex) + }; + if (frames.length) { + exception.stacktrace = { frames }; + } + if (exception.type === void 0 && exception.value === "") { + exception.value = "Unrecoverable error caught"; + } + return exception; +} +__name(exceptionFromError, "exceptionFromError"); +function eventFromPlainObject(stackParser, exception, syntheticException, isUnhandledRejection) { + const client = getClient(); + const normalizeDepth = client && client.getOptions().normalizeDepth; + const errorFromProp = getErrorPropertyFromObject(exception); + const extra = { + __serialized__: normalizeToSize(exception, normalizeDepth) + }; + if (errorFromProp) { + return { + exception: { + values: [exceptionFromError(stackParser, errorFromProp)] + }, + extra + }; + } + const event = { + exception: { + values: [ + { + type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? "UnhandledRejection" : "Error", + value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }) + } + ] + }, + extra + }; + if (syntheticException) { + const frames = parseStackFrames(stackParser, syntheticException); + if (frames.length) { + event.exception.values[0].stacktrace = { frames }; + } + } + return event; +} +__name(eventFromPlainObject, "eventFromPlainObject"); +function eventFromError(stackParser, ex) { + return { + exception: { + values: [exceptionFromError(stackParser, ex)] + } + }; +} +__name(eventFromError, "eventFromError"); +function parseStackFrames(stackParser, ex) { + const stacktrace = ex.stacktrace || ex.stack || ""; + const skipLines = getSkipFirstStackStringLines(ex); + const framesToPop = getPopFirstTopFrames(ex); + try { + return stackParser(stacktrace, skipLines, framesToPop); + } catch (e2) { + } + return []; +} +__name(parseStackFrames, "parseStackFrames"); +const reactMinifiedRegexp = /Minified React error #\d+;/i; +function getSkipFirstStackStringLines(ex) { + if (ex && reactMinifiedRegexp.test(ex.message)) { + return 1; + } + return 0; +} +__name(getSkipFirstStackStringLines, "getSkipFirstStackStringLines"); +function getPopFirstTopFrames(ex) { + if (typeof ex.framesToPop === "number") { + return ex.framesToPop; + } + return 0; +} +__name(getPopFirstTopFrames, "getPopFirstTopFrames"); +function isWebAssemblyException(exception) { + if (typeof WebAssembly !== "undefined" && typeof WebAssembly.Exception !== "undefined") { + return exception instanceof WebAssembly.Exception; + } else { + return false; + } +} +__name(isWebAssemblyException, "isWebAssemblyException"); +function extractType(ex) { + const name2 = ex && ex.name; + if (!name2 && isWebAssemblyException(ex)) { + const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2; + return hasTypeInMessage ? ex.message[0] : "WebAssembly.Exception"; + } + return name2; +} +__name(extractType, "extractType"); +function extractMessage(ex) { + const message3 = ex && ex.message; + if (!message3) { + return "No error message"; + } + if (message3.error && typeof message3.error.message === "string") { + return message3.error.message; + } + if (isWebAssemblyException(ex) && Array.isArray(ex.message) && ex.message.length == 2) { + return ex.message[1]; + } + return message3; +} +__name(extractMessage, "extractMessage"); +function eventFromException(stackParser, exception, hint, attachStacktrace) { + const syntheticException = hint && hint.syntheticException || void 0; + const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace); + addExceptionMechanism(event); + event.level = "error"; + if (hint && hint.event_id) { + event.event_id = hint.event_id; + } + return resolvedSyncPromise(event); +} +__name(eventFromException, "eventFromException"); +function eventFromMessage(stackParser, message3, level = "info", hint, attachStacktrace) { + const syntheticException = hint && hint.syntheticException || void 0; + const event = eventFromString(stackParser, message3, syntheticException, attachStacktrace); + event.level = level; + if (hint && hint.event_id) { + event.event_id = hint.event_id; + } + return resolvedSyncPromise(event); +} +__name(eventFromMessage, "eventFromMessage"); +function eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace, isUnhandledRejection) { + let event; + if (isErrorEvent$2(exception) && exception.error) { + const errorEvent = exception; + return eventFromError(stackParser, errorEvent.error); + } + if (isDOMError(exception) || isDOMException(exception)) { + const domException = exception; + if ("stack" in exception) { + event = eventFromError(stackParser, exception); + } else { + const name2 = domException.name || (isDOMError(domException) ? "DOMError" : "DOMException"); + const message3 = domException.message ? `${name2}: ${domException.message}` : name2; + event = eventFromString(stackParser, message3, syntheticException, attachStacktrace); + addExceptionTypeValue(event, message3); + } + if ("code" in domException) { + event.tags = { ...event.tags, "DOMException.code": `${domException.code}` }; + } + return event; + } + if (isError(exception)) { + return eventFromError(stackParser, exception); + } + if (isPlainObject$5(exception) || isEvent(exception)) { + const objectException = exception; + event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection); + addExceptionMechanism(event, { + synthetic: true + }); + return event; + } + event = eventFromString(stackParser, exception, syntheticException, attachStacktrace); + addExceptionTypeValue(event, `${exception}`, void 0); + addExceptionMechanism(event, { + synthetic: true + }); + return event; +} +__name(eventFromUnknownInput, "eventFromUnknownInput"); +function eventFromString(stackParser, message3, syntheticException, attachStacktrace) { + const event = {}; + if (attachStacktrace && syntheticException) { + const frames = parseStackFrames(stackParser, syntheticException); + if (frames.length) { + event.exception = { + values: [{ value: message3, stacktrace: { frames } }] + }; + } + addExceptionMechanism(event, { synthetic: true }); + } + if (isParameterizedString(message3)) { + const { __sentry_template_string__, __sentry_template_values__ } = message3; + event.logentry = { + message: __sentry_template_string__, + params: __sentry_template_values__ + }; + return event; + } + event.message = message3; + return event; +} +__name(eventFromString, "eventFromString"); +function getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }) { + const keys2 = extractExceptionKeysForMessage(exception); + const captureType = isUnhandledRejection ? "promise rejection" : "exception"; + if (isErrorEvent$2(exception)) { + return `Event \`ErrorEvent\` captured as ${captureType} with message \`${exception.message}\``; + } + if (isEvent(exception)) { + const className = getObjectClassName(exception); + return `Event \`${className}\` (type=${exception.type}) captured as ${captureType}`; + } + return `Object captured as ${captureType} with keys: ${keys2}`; +} +__name(getNonErrorObjectExceptionValue, "getNonErrorObjectExceptionValue"); +function getObjectClassName(obj) { + try { + const prototype2 = Object.getPrototypeOf(obj); + return prototype2 ? prototype2.constructor.name : void 0; + } catch (e2) { + } +} +__name(getObjectClassName, "getObjectClassName"); +function getErrorPropertyFromObject(obj) { + for (const prop2 in obj) { + if (Object.prototype.hasOwnProperty.call(obj, prop2)) { + const value4 = obj[prop2]; + if (value4 instanceof Error) { + return value4; + } + } + } + return void 0; +} +__name(getErrorPropertyFromObject, "getErrorPropertyFromObject"); +function createUserFeedbackEnvelope(feedback, { + metadata, + tunnel, + dsn +}) { + const headers = { + event_id: feedback.event_id, + sent_at: (/* @__PURE__ */ new Date()).toISOString(), + ...metadata && metadata.sdk && { + sdk: { + name: metadata.sdk.name, + version: metadata.sdk.version + } + }, + ...!!tunnel && !!dsn && { dsn: dsnToString(dsn) } + }; + const item3 = createUserFeedbackEnvelopeItem(feedback); + return createEnvelope(headers, [item3]); +} +__name(createUserFeedbackEnvelope, "createUserFeedbackEnvelope"); +function createUserFeedbackEnvelopeItem(feedback) { + const feedbackHeaders = { + type: "user_report" + }; + return [feedbackHeaders, feedback]; +} +__name(createUserFeedbackEnvelopeItem, "createUserFeedbackEnvelopeItem"); +class BrowserClient extends BaseClient { + static { + __name(this, "BrowserClient"); + } + /** + * Creates a new Browser SDK instance. + * + * @param options Configuration options for this SDK. + */ + constructor(options4) { + const opts = { + // We default this to true, as it is the safer scenario + parentSpanIsAlwaysRootSpan: true, + ...options4 + }; + const sdkSource = WINDOW$5.SENTRY_SDK_SOURCE || getSDKSource(); + applySdkMetadata(opts, "browser", ["browser"], sdkSource); + super(opts); + if (opts.sendClientReports && WINDOW$5.document) { + WINDOW$5.document.addEventListener("visibilitychange", () => { + if (WINDOW$5.document.visibilityState === "hidden") { + this._flushOutcomes(); + } + }); + } + } + /** + * @inheritDoc + */ + eventFromException(exception, hint) { + return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace); + } + /** + * @inheritDoc + */ + eventFromMessage(message3, level = "info", hint) { + return eventFromMessage(this._options.stackParser, message3, level, hint, this._options.attachStacktrace); + } + /** + * Sends user feedback to Sentry. + * + * @deprecated Use `captureFeedback` instead. + */ + captureUserFeedback(feedback) { + if (!this._isEnabled()) { + DEBUG_BUILD$4 && logger$2.warn("SDK not enabled, will not capture user feedback."); + return; + } + const envelope = createUserFeedbackEnvelope(feedback, { + metadata: this.getSdkMetadata(), + dsn: this.getDsn(), + tunnel: this.getOptions().tunnel + }); + this.sendEnvelope(envelope); + } + /** + * @inheritDoc + */ + _prepareEvent(event, hint, scope) { + event.platform = event.platform || "javascript"; + return super._prepareEvent(event, hint, scope); + } +} +const DEBUG_BUILD$3 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; +const getRating = /* @__PURE__ */ __name((value4, thresholds) => { + if (value4 > thresholds[1]) { + return "poor"; + } + if (value4 > thresholds[0]) { + return "needs-improvement"; + } + return "good"; +}, "getRating"); +const bindReporter = /* @__PURE__ */ __name((callback, metric, thresholds, reportAllChanges) => { + let prevValue; + let delta2; + return (forceReport) => { + if (metric.value >= 0) { + if (forceReport || reportAllChanges) { + delta2 = metric.value - (prevValue || 0); + if (delta2 || prevValue === void 0) { + prevValue = metric.value; + metric.delta = delta2; + metric.rating = getRating(metric.value, thresholds); + callback(metric); + } + } + } + }; +}, "bindReporter"); +const WINDOW$4 = GLOBAL_OBJ; +const generateUniqueID = /* @__PURE__ */ __name(() => { + return `v4-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`; +}, "generateUniqueID"); +const getNavigationEntry = /* @__PURE__ */ __name((checkResponseStart = true) => { + const navigationEntry = WINDOW$4.performance && WINDOW$4.performance.getEntriesByType && WINDOW$4.performance.getEntriesByType("navigation")[0]; + if ( + // sentry-specific change: + // We don't want to check for responseStart for our own use of `getNavigationEntry` + !checkResponseStart || navigationEntry && navigationEntry.responseStart > 0 && navigationEntry.responseStart < performance.now() + ) { + return navigationEntry; + } +}, "getNavigationEntry"); +const getActivationStart = /* @__PURE__ */ __name(() => { + const navEntry = getNavigationEntry(); + return navEntry && navEntry.activationStart || 0; +}, "getActivationStart"); +const initMetric = /* @__PURE__ */ __name((name2, value4) => { + const navEntry = getNavigationEntry(); + let navigationType = "navigate"; + if (navEntry) { + if (WINDOW$4.document && WINDOW$4.document.prerendering || getActivationStart() > 0) { + navigationType = "prerender"; + } else if (WINDOW$4.document && WINDOW$4.document.wasDiscarded) { + navigationType = "restore"; + } else if (navEntry.type) { + navigationType = navEntry.type.replace(/_/g, "-"); + } + } + const entries = []; + return { + name: name2, + value: typeof value4 === "undefined" ? -1 : value4, + rating: "good", + // If needed, will be updated when reported. `const` to keep the type from widening to `string`. + delta: 0, + entries, + id: generateUniqueID(), + navigationType + }; +}, "initMetric"); +const observe = /* @__PURE__ */ __name((type, callback, opts) => { + try { + if (PerformanceObserver.supportedEntryTypes.includes(type)) { + const po2 = new PerformanceObserver((list2) => { + Promise.resolve().then(() => { + callback(list2.getEntries()); + }); + }); + po2.observe( + Object.assign( + { + type, + buffered: true + }, + opts || {} + ) + ); + return po2; + } + } catch (e2) { + } + return; +}, "observe"); +const onHidden = /* @__PURE__ */ __name((cb) => { + const onHiddenOrPageHide = /* @__PURE__ */ __name((event) => { + if (event.type === "pagehide" || WINDOW$4.document && WINDOW$4.document.visibilityState === "hidden") { + cb(event); + } + }, "onHiddenOrPageHide"); + if (WINDOW$4.document) { + addEventListener("visibilitychange", onHiddenOrPageHide, true); + addEventListener("pagehide", onHiddenOrPageHide, true); + } +}, "onHidden"); +const runOnce = /* @__PURE__ */ __name((cb) => { + let called = false; + return () => { + if (!called) { + cb(); + called = true; + } + }; +}, "runOnce"); +let firstHiddenTime = -1; +const initHiddenTime = /* @__PURE__ */ __name(() => { + return WINDOW$4.document.visibilityState === "hidden" && !WINDOW$4.document.prerendering ? 0 : Infinity; +}, "initHiddenTime"); +const onVisibilityUpdate = /* @__PURE__ */ __name((event) => { + if (WINDOW$4.document.visibilityState === "hidden" && firstHiddenTime > -1) { + firstHiddenTime = event.type === "visibilitychange" ? event.timeStamp : 0; + removeChangeListeners(); + } +}, "onVisibilityUpdate"); +const addChangeListeners = /* @__PURE__ */ __name(() => { + addEventListener("visibilitychange", onVisibilityUpdate, true); + addEventListener("prerenderingchange", onVisibilityUpdate, true); +}, "addChangeListeners"); +const removeChangeListeners = /* @__PURE__ */ __name(() => { + removeEventListener("visibilitychange", onVisibilityUpdate, true); + removeEventListener("prerenderingchange", onVisibilityUpdate, true); +}, "removeChangeListeners"); +const getVisibilityWatcher = /* @__PURE__ */ __name(() => { + if (WINDOW$4.document && firstHiddenTime < 0) { + firstHiddenTime = initHiddenTime(); + addChangeListeners(); + } + return { + get firstHiddenTime() { + return firstHiddenTime; + } + }; +}, "getVisibilityWatcher"); +const whenActivated = /* @__PURE__ */ __name((callback) => { + if (WINDOW$4.document && WINDOW$4.document.prerendering) { + addEventListener("prerenderingchange", () => callback(), true); + } else { + callback(); + } +}, "whenActivated"); +const FCPThresholds = [1800, 3e3]; +const onFCP = /* @__PURE__ */ __name((onReport, opts = {}) => { + whenActivated(() => { + const visibilityWatcher = getVisibilityWatcher(); + const metric = initMetric("FCP"); + let report; + const handleEntries = /* @__PURE__ */ __name((entries) => { + entries.forEach((entry) => { + if (entry.name === "first-contentful-paint") { + po2.disconnect(); + if (entry.startTime < visibilityWatcher.firstHiddenTime) { + metric.value = Math.max(entry.startTime - getActivationStart(), 0); + metric.entries.push(entry); + report(true); + } + } + }); + }, "handleEntries"); + const po2 = observe("paint", handleEntries); + if (po2) { + report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges); + } + }); +}, "onFCP"); +const CLSThresholds = [0.1, 0.25]; +const onCLS = /* @__PURE__ */ __name((onReport, opts = {}) => { + onFCP( + runOnce(() => { + const metric = initMetric("CLS", 0); + let report; + let sessionValue = 0; + let sessionEntries = []; + const handleEntries = /* @__PURE__ */ __name((entries) => { + entries.forEach((entry) => { + if (!entry.hadRecentInput) { + const firstSessionEntry = sessionEntries[0]; + const lastSessionEntry = sessionEntries[sessionEntries.length - 1]; + if (sessionValue && firstSessionEntry && lastSessionEntry && entry.startTime - lastSessionEntry.startTime < 1e3 && entry.startTime - firstSessionEntry.startTime < 5e3) { + sessionValue += entry.value; + sessionEntries.push(entry); + } else { + sessionValue = entry.value; + sessionEntries = [entry]; + } + } + }); + if (sessionValue > metric.value) { + metric.value = sessionValue; + metric.entries = sessionEntries; + report(); + } + }, "handleEntries"); + const po2 = observe("layout-shift", handleEntries); + if (po2) { + report = bindReporter(onReport, metric, CLSThresholds, opts.reportAllChanges); + onHidden(() => { + handleEntries(po2.takeRecords()); + report(true); + }); + setTimeout(report, 0); + } + }) + ); +}, "onCLS"); +const FIDThresholds = [100, 300]; +const onFID = /* @__PURE__ */ __name((onReport, opts = {}) => { + whenActivated(() => { + const visibilityWatcher = getVisibilityWatcher(); + const metric = initMetric("FID"); + let report; + const handleEntry = /* @__PURE__ */ __name((entry) => { + if (entry.startTime < visibilityWatcher.firstHiddenTime) { + metric.value = entry.processingStart - entry.startTime; + metric.entries.push(entry); + report(true); + } + }, "handleEntry"); + const handleEntries = /* @__PURE__ */ __name((entries) => { + entries.forEach(handleEntry); + }, "handleEntries"); + const po2 = observe("first-input", handleEntries); + report = bindReporter(onReport, metric, FIDThresholds, opts.reportAllChanges); + if (po2) { + onHidden( + runOnce(() => { + handleEntries(po2.takeRecords()); + po2.disconnect(); + }) + ); + } + }); +}, "onFID"); +let interactionCountEstimate = 0; +let minKnownInteractionId = Infinity; +let maxKnownInteractionId = 0; +const updateEstimate = /* @__PURE__ */ __name((entries) => { + entries.forEach((e2) => { + if (e2.interactionId) { + minKnownInteractionId = Math.min(minKnownInteractionId, e2.interactionId); + maxKnownInteractionId = Math.max(maxKnownInteractionId, e2.interactionId); + interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0; + } + }); +}, "updateEstimate"); +let po; +const getInteractionCount = /* @__PURE__ */ __name(() => { + return po ? interactionCountEstimate : performance.interactionCount || 0; +}, "getInteractionCount"); +const initInteractionCountPolyfill = /* @__PURE__ */ __name(() => { + if ("interactionCount" in performance || po) return; + po = observe("event", updateEstimate, { + type: "event", + buffered: true, + durationThreshold: 0 + }); +}, "initInteractionCountPolyfill"); +const longestInteractionList = []; +const longestInteractionMap = /* @__PURE__ */ new Map(); +const DEFAULT_DURATION_THRESHOLD = 40; +let prevInteractionCount = 0; +const getInteractionCountForNavigation = /* @__PURE__ */ __name(() => { + return getInteractionCount() - prevInteractionCount; +}, "getInteractionCountForNavigation"); +const estimateP98LongestInteraction = /* @__PURE__ */ __name(() => { + const candidateInteractionIndex = Math.min( + longestInteractionList.length - 1, + Math.floor(getInteractionCountForNavigation() / 50) + ); + return longestInteractionList[candidateInteractionIndex]; +}, "estimateP98LongestInteraction"); +const MAX_INTERACTIONS_TO_CONSIDER = 10; +const entryPreProcessingCallbacks = []; +const processInteractionEntry = /* @__PURE__ */ __name((entry) => { + entryPreProcessingCallbacks.forEach((cb) => cb(entry)); + if (!(entry.interactionId || entry.entryType === "first-input")) return; + const minLongestInteraction = longestInteractionList[longestInteractionList.length - 1]; + const existingInteraction = longestInteractionMap.get(entry.interactionId); + if (existingInteraction || longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER || minLongestInteraction && entry.duration > minLongestInteraction.latency) { + if (existingInteraction) { + if (entry.duration > existingInteraction.latency) { + existingInteraction.entries = [entry]; + existingInteraction.latency = entry.duration; + } else if (entry.duration === existingInteraction.latency && entry.startTime === (existingInteraction.entries[0] && existingInteraction.entries[0].startTime)) { + existingInteraction.entries.push(entry); + } + } else { + const interaction = { + id: entry.interactionId, + latency: entry.duration, + entries: [entry] + }; + longestInteractionMap.set(interaction.id, interaction); + longestInteractionList.push(interaction); + } + longestInteractionList.sort((a2, b2) => b2.latency - a2.latency); + if (longestInteractionList.length > MAX_INTERACTIONS_TO_CONSIDER) { + longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER).forEach((i2) => longestInteractionMap.delete(i2.id)); + } + } +}, "processInteractionEntry"); +const whenIdle = /* @__PURE__ */ __name((cb) => { + const rIC = WINDOW$4.requestIdleCallback || WINDOW$4.setTimeout; + let handle = -1; + cb = runOnce(cb); + if (WINDOW$4.document && WINDOW$4.document.visibilityState === "hidden") { + cb(); + } else { + handle = rIC(cb); + onHidden(cb); + } + return handle; +}, "whenIdle"); +const INPThresholds = [200, 500]; +const onINP = /* @__PURE__ */ __name((onReport, opts = {}) => { + if (!("PerformanceEventTiming" in WINDOW$4 && "interactionId" in PerformanceEventTiming.prototype)) { + return; + } + whenActivated(() => { + initInteractionCountPolyfill(); + const metric = initMetric("INP"); + let report; + const handleEntries = /* @__PURE__ */ __name((entries) => { + whenIdle(() => { + entries.forEach(processInteractionEntry); + const inp = estimateP98LongestInteraction(); + if (inp && inp.latency !== metric.value) { + metric.value = inp.latency; + metric.entries = inp.entries; + report(); + } + }); + }, "handleEntries"); + const po2 = observe("event", handleEntries, { + // Event Timing entries have their durations rounded to the nearest 8ms, + // so a duration of 40ms would be any event that spans 2.5 or more frames + // at 60Hz. This threshold is chosen to strike a balance between usefulness + // and performance. Running this callback for any interaction that spans + // just one or two frames is likely not worth the insight that could be + // gained. + durationThreshold: opts.durationThreshold != null ? opts.durationThreshold : DEFAULT_DURATION_THRESHOLD + }); + report = bindReporter(onReport, metric, INPThresholds, opts.reportAllChanges); + if (po2) { + po2.observe({ type: "first-input", buffered: true }); + onHidden(() => { + handleEntries(po2.takeRecords()); + report(true); + }); + } + }); +}, "onINP"); +const LCPThresholds = [2500, 4e3]; +const reportedMetricIDs = {}; +const onLCP = /* @__PURE__ */ __name((onReport, opts = {}) => { + whenActivated(() => { + const visibilityWatcher = getVisibilityWatcher(); + const metric = initMetric("LCP"); + let report; + const handleEntries = /* @__PURE__ */ __name((entries) => { + if (!opts.reportAllChanges) { + entries = entries.slice(-1); + } + entries.forEach((entry) => { + if (entry.startTime < visibilityWatcher.firstHiddenTime) { + metric.value = Math.max(entry.startTime - getActivationStart(), 0); + metric.entries = [entry]; + report(); + } + }); + }, "handleEntries"); + const po2 = observe("largest-contentful-paint", handleEntries); + if (po2) { + report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges); + const stopListening = runOnce(() => { + if (!reportedMetricIDs[metric.id]) { + handleEntries(po2.takeRecords()); + po2.disconnect(); + reportedMetricIDs[metric.id] = true; + report(true); + } + }); + ["keydown", "click"].forEach((type) => { + if (WINDOW$4.document) { + addEventListener(type, () => whenIdle(stopListening), { + once: true, + capture: true + }); + } + }); + onHidden(stopListening); + } + }); +}, "onLCP"); +const TTFBThresholds = [800, 1800]; +const whenReady = /* @__PURE__ */ __name((callback) => { + if (WINDOW$4.document && WINDOW$4.document.prerendering) { + whenActivated(() => whenReady(callback)); + } else if (WINDOW$4.document && WINDOW$4.document.readyState !== "complete") { + addEventListener("load", () => whenReady(callback), true); + } else { + setTimeout(callback, 0); + } +}, "whenReady"); +const onTTFB = /* @__PURE__ */ __name((onReport, opts = {}) => { + const metric = initMetric("TTFB"); + const report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges); + whenReady(() => { + const navigationEntry = getNavigationEntry(); + if (navigationEntry) { + metric.value = Math.max(navigationEntry.responseStart - getActivationStart(), 0); + metric.entries = [navigationEntry]; + report(true); + } + }); +}, "onTTFB"); +const handlers$3 = {}; +const instrumented = {}; +let _previousCls; +let _previousFid; +let _previousLcp; +let _previousTtfb; +let _previousInp; +function addClsInstrumentationHandler(callback, stopOnCallback = false) { + return addMetricObserver("cls", callback, instrumentCls, _previousCls, stopOnCallback); +} +__name(addClsInstrumentationHandler, "addClsInstrumentationHandler"); +function addLcpInstrumentationHandler(callback, stopOnCallback = false) { + return addMetricObserver("lcp", callback, instrumentLcp, _previousLcp, stopOnCallback); +} +__name(addLcpInstrumentationHandler, "addLcpInstrumentationHandler"); +function addFidInstrumentationHandler(callback) { + return addMetricObserver("fid", callback, instrumentFid, _previousFid); +} +__name(addFidInstrumentationHandler, "addFidInstrumentationHandler"); +function addTtfbInstrumentationHandler(callback) { + return addMetricObserver("ttfb", callback, instrumentTtfb, _previousTtfb); +} +__name(addTtfbInstrumentationHandler, "addTtfbInstrumentationHandler"); +function addInpInstrumentationHandler(callback) { + return addMetricObserver("inp", callback, instrumentInp, _previousInp); +} +__name(addInpInstrumentationHandler, "addInpInstrumentationHandler"); +function addPerformanceInstrumentationHandler(type, callback) { + addHandler(type, callback); + if (!instrumented[type]) { + instrumentPerformanceObserver(type); + instrumented[type] = true; + } + return getCleanupCallback(type, callback); +} +__name(addPerformanceInstrumentationHandler, "addPerformanceInstrumentationHandler"); +function triggerHandlers(type, data26) { + const typeHandlers = handlers$3[type]; + if (!typeHandlers || !typeHandlers.length) { + return; + } + for (const handler12 of typeHandlers) { + try { + handler12(data26); + } catch (e2) { + DEBUG_BUILD$3 && logger$2.error( + `Error while triggering instrumentation handler. +Type: ${type} +Name: ${getFunctionName(handler12)} +Error:`, + e2 + ); + } + } +} +__name(triggerHandlers, "triggerHandlers"); +function instrumentCls() { + return onCLS( + (metric) => { + triggerHandlers("cls", { + metric + }); + _previousCls = metric; + }, + // We want the callback to be called whenever the CLS value updates. + // By default, the callback is only called when the tab goes to the background. + { reportAllChanges: true } + ); +} +__name(instrumentCls, "instrumentCls"); +function instrumentFid() { + return onFID((metric) => { + triggerHandlers("fid", { + metric + }); + _previousFid = metric; + }); +} +__name(instrumentFid, "instrumentFid"); +function instrumentLcp() { + return onLCP( + (metric) => { + triggerHandlers("lcp", { + metric + }); + _previousLcp = metric; + }, + // We want the callback to be called whenever the LCP value updates. + // By default, the callback is only called when the tab goes to the background. + { reportAllChanges: true } + ); +} +__name(instrumentLcp, "instrumentLcp"); +function instrumentTtfb() { + return onTTFB((metric) => { + triggerHandlers("ttfb", { + metric + }); + _previousTtfb = metric; + }); +} +__name(instrumentTtfb, "instrumentTtfb"); +function instrumentInp() { + return onINP((metric) => { + triggerHandlers("inp", { + metric + }); + _previousInp = metric; + }); +} +__name(instrumentInp, "instrumentInp"); +function addMetricObserver(type, callback, instrumentFn, previousValue, stopOnCallback = false) { + addHandler(type, callback); + let stopListening; + if (!instrumented[type]) { + stopListening = instrumentFn(); + instrumented[type] = true; + } + if (previousValue) { + callback({ metric: previousValue }); + } + return getCleanupCallback(type, callback, stopOnCallback ? stopListening : void 0); +} +__name(addMetricObserver, "addMetricObserver"); +function instrumentPerformanceObserver(type) { + const options4 = {}; + if (type === "event") { + options4.durationThreshold = 0; + } + observe( + type, + (entries) => { + triggerHandlers(type, { entries }); + }, + options4 + ); +} +__name(instrumentPerformanceObserver, "instrumentPerformanceObserver"); +function addHandler(type, handler12) { + handlers$3[type] = handlers$3[type] || []; + handlers$3[type].push(handler12); +} +__name(addHandler, "addHandler"); +function getCleanupCallback(type, callback, stopListening) { + return () => { + if (stopListening) { + stopListening(); + } + const typeHandlers = handlers$3[type]; + if (!typeHandlers) { + return; + } + const index2 = typeHandlers.indexOf(callback); + if (index2 !== -1) { + typeHandlers.splice(index2, 1); + } + }; +} +__name(getCleanupCallback, "getCleanupCallback"); +function isPerformanceEventTiming(entry) { + return "duration" in entry; +} +__name(isPerformanceEventTiming, "isPerformanceEventTiming"); +function isMeasurementValue(value4) { + return typeof value4 === "number" && isFinite(value4); +} +__name(isMeasurementValue, "isMeasurementValue"); +function startAndEndSpan(parentSpan, startTimeInSeconds, endTime, { ...ctx }) { + const parentStartTime = spanToJSON(parentSpan).start_timestamp; + if (parentStartTime && parentStartTime > startTimeInSeconds) { + if (typeof parentSpan.updateStartTime === "function") { + parentSpan.updateStartTime(startTimeInSeconds); + } + } + return withActiveSpan(parentSpan, () => { + const span = startInactiveSpan({ + startTime: startTimeInSeconds, + ...ctx + }); + if (span) { + span.end(endTime); + } + return span; + }); +} +__name(startAndEndSpan, "startAndEndSpan"); +function startStandaloneWebVitalSpan(options4) { + const client = getClient(); + if (!client) { + return; + } + const { name: name2, transaction, attributes: passedAttributes, startTime } = options4; + const { release, environment } = client.getOptions(); + const replay = client.getIntegrationByName("Replay"); + const replayId = replay && replay.getReplayId(); + const scope = getCurrentScope$1(); + const user = scope.getUser(); + const userDisplay = user !== void 0 ? user.email || user.id || user.ip_address : void 0; + let profileId; + try { + profileId = scope.getScopeData().contexts.profile.profile_id; + } catch (e2) { + } + const attributes = { + release, + environment, + user: userDisplay || void 0, + profile_id: profileId || void 0, + replay_id: replayId || void 0, + transaction, + // Web vital score calculation relies on the user agent to account for different + // browsers setting different thresholds for what is considered a good/meh/bad value. + // For example: Chrome vs. Chrome Mobile + "user_agent.original": WINDOW$4.navigator && WINDOW$4.navigator.userAgent, + ...passedAttributes + }; + return startInactiveSpan({ + name: name2, + attributes, + startTime, + experimental: { + standalone: true + } + }); +} +__name(startStandaloneWebVitalSpan, "startStandaloneWebVitalSpan"); +function getBrowserPerformanceAPI() { + return WINDOW$4 && WINDOW$4.addEventListener && WINDOW$4.performance; +} +__name(getBrowserPerformanceAPI, "getBrowserPerformanceAPI"); +function msToSec(time) { + return time / 1e3; +} +__name(msToSec, "msToSec"); +function trackClsAsStandaloneSpan() { + let standaloneCLsValue = 0; + let standaloneClsEntry; + let pageloadSpanId; + if (!supportsLayoutShift()) { + return; + } + let sentSpan = false; + function _collectClsOnce() { + if (sentSpan) { + return; + } + sentSpan = true; + if (pageloadSpanId) { + sendStandaloneClsSpan(standaloneCLsValue, standaloneClsEntry, pageloadSpanId); + } + cleanupClsHandler(); + } + __name(_collectClsOnce, "_collectClsOnce"); + const cleanupClsHandler = addClsInstrumentationHandler(({ metric }) => { + const entry = metric.entries[metric.entries.length - 1]; + if (!entry) { + return; + } + standaloneCLsValue = metric.value; + standaloneClsEntry = entry; + }, true); + onHidden(() => { + _collectClsOnce(); + }); + setTimeout(() => { + const client = getClient(); + if (!client) { + return; + } + const unsubscribeStartNavigation = client.on("startNavigationSpan", () => { + _collectClsOnce(); + unsubscribeStartNavigation && unsubscribeStartNavigation(); + }); + const activeSpan = getActiveSpan(); + const rootSpan = activeSpan && getRootSpan(activeSpan); + const spanJSON = rootSpan && spanToJSON(rootSpan); + if (spanJSON && spanJSON.op === "pageload") { + pageloadSpanId = rootSpan.spanContext().spanId; + } + }, 0); +} +__name(trackClsAsStandaloneSpan, "trackClsAsStandaloneSpan"); +function sendStandaloneClsSpan(clsValue, entry, pageloadSpanId) { + DEBUG_BUILD$3 && logger$2.log(`Sending CLS span (${clsValue})`); + const startTime = msToSec((browserPerformanceTimeOrigin || 0) + (entry && entry.startTime || 0)); + const routeName = getCurrentScope$1().getScopeData().transactionName; + const name2 = entry ? htmlTreeAsString(entry.sources[0] && entry.sources[0].node) : "Layout shift"; + const attributes = dropUndefinedKeys({ + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.http.browser.cls", + [SEMANTIC_ATTRIBUTE_SENTRY_OP]: "ui.webvital.cls", + [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: entry && entry.duration || 0, + // attach the pageload span id to the CLS span so that we can link them in the UI + "sentry.pageload.span_id": pageloadSpanId + }); + const span = startStandaloneWebVitalSpan({ + name: name2, + transaction: routeName, + attributes, + startTime + }); + if (span) { + span.addEvent("cls", { + [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: "", + [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: clsValue + }); + span.end(startTime); + } +} +__name(sendStandaloneClsSpan, "sendStandaloneClsSpan"); +function supportsLayoutShift() { + try { + return PerformanceObserver.supportedEntryTypes.includes("layout-shift"); + } catch (e2) { + return false; + } +} +__name(supportsLayoutShift, "supportsLayoutShift"); +const MAX_INT_AS_BYTES = 2147483647; +let _performanceCursor = 0; +let _measurements = {}; +let _lcpEntry; +let _clsEntry; +function startTrackingWebVitals({ recordClsStandaloneSpans }) { + const performance2 = getBrowserPerformanceAPI(); + if (performance2 && browserPerformanceTimeOrigin) { + if (performance2.mark) { + WINDOW$4.performance.mark("sentry-tracing-init"); + } + const fidCleanupCallback = _trackFID(); + const lcpCleanupCallback = _trackLCP(); + const ttfbCleanupCallback = _trackTtfb(); + const clsCleanupCallback = recordClsStandaloneSpans ? trackClsAsStandaloneSpan() : _trackCLS(); + return () => { + fidCleanupCallback(); + lcpCleanupCallback(); + ttfbCleanupCallback(); + clsCleanupCallback && clsCleanupCallback(); + }; + } + return () => void 0; +} +__name(startTrackingWebVitals, "startTrackingWebVitals"); +function startTrackingLongTasks() { + addPerformanceInstrumentationHandler("longtask", ({ entries }) => { + const parent = getActiveSpan(); + if (!parent) { + return; + } + const { op: parentOp, start_timestamp: parentStartTimestamp } = spanToJSON(parent); + for (const entry of entries) { + const startTime = msToSec(browserPerformanceTimeOrigin + entry.startTime); + const duration = msToSec(entry.duration); + if (parentOp === "navigation" && parentStartTimestamp && startTime < parentStartTimestamp) { + continue; + } + startAndEndSpan(parent, startTime, startTime + duration, { + name: "Main UI thread blocked", + op: "ui.long-task", + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.ui.browser.metrics" + } + }); + } + }); +} +__name(startTrackingLongTasks, "startTrackingLongTasks"); +function startTrackingLongAnimationFrames() { + const observer = new PerformanceObserver((list2) => { + const parent = getActiveSpan(); + if (!parent) { + return; + } + for (const entry of list2.getEntries()) { + if (!entry.scripts[0]) { + continue; + } + const startTime = msToSec(browserPerformanceTimeOrigin + entry.startTime); + const { start_timestamp: parentStartTimestamp, op: parentOp } = spanToJSON(parent); + if (parentOp === "navigation" && parentStartTimestamp && startTime < parentStartTimestamp) { + continue; + } + const duration = msToSec(entry.duration); + const attributes = { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.ui.browser.metrics" + }; + const initialScript = entry.scripts[0]; + const { invoker, invokerType, sourceURL, sourceFunctionName, sourceCharPosition } = initialScript; + attributes["browser.script.invoker"] = invoker; + attributes["browser.script.invoker_type"] = invokerType; + if (sourceURL) { + attributes["code.filepath"] = sourceURL; + } + if (sourceFunctionName) { + attributes["code.function"] = sourceFunctionName; + } + if (sourceCharPosition !== -1) { + attributes["browser.script.source_char_position"] = sourceCharPosition; + } + startAndEndSpan(parent, startTime, startTime + duration, { + name: "Main UI thread blocked", + op: "ui.long-animation-frame", + attributes + }); + } + }); + observer.observe({ type: "long-animation-frame", buffered: true }); +} +__name(startTrackingLongAnimationFrames, "startTrackingLongAnimationFrames"); +function startTrackingInteractions() { + addPerformanceInstrumentationHandler("event", ({ entries }) => { + const parent = getActiveSpan(); + if (!parent) { + return; + } + for (const entry of entries) { + if (entry.name === "click") { + const startTime = msToSec(browserPerformanceTimeOrigin + entry.startTime); + const duration = msToSec(entry.duration); + const spanOptions = { + name: htmlTreeAsString(entry.target), + op: `ui.interaction.${entry.name}`, + startTime, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.ui.browser.metrics" + } + }; + const componentName = getComponentName$1(entry.target); + if (componentName) { + spanOptions.attributes["ui.component_name"] = componentName; + } + startAndEndSpan(parent, startTime, startTime + duration, spanOptions); + } + } + }); +} +__name(startTrackingInteractions, "startTrackingInteractions"); +function _trackCLS() { + return addClsInstrumentationHandler(({ metric }) => { + const entry = metric.entries[metric.entries.length - 1]; + if (!entry) { + return; + } + _measurements["cls"] = { value: metric.value, unit: "" }; + _clsEntry = entry; + }, true); +} +__name(_trackCLS, "_trackCLS"); +function _trackLCP() { + return addLcpInstrumentationHandler(({ metric }) => { + const entry = metric.entries[metric.entries.length - 1]; + if (!entry) { + return; + } + _measurements["lcp"] = { value: metric.value, unit: "millisecond" }; + _lcpEntry = entry; + }, true); +} +__name(_trackLCP, "_trackLCP"); +function _trackFID() { + return addFidInstrumentationHandler(({ metric }) => { + const entry = metric.entries[metric.entries.length - 1]; + if (!entry) { + return; + } + const timeOrigin = msToSec(browserPerformanceTimeOrigin); + const startTime = msToSec(entry.startTime); + _measurements["fid"] = { value: metric.value, unit: "millisecond" }; + _measurements["mark.fid"] = { value: timeOrigin + startTime, unit: "second" }; + }); +} +__name(_trackFID, "_trackFID"); +function _trackTtfb() { + return addTtfbInstrumentationHandler(({ metric }) => { + const entry = metric.entries[metric.entries.length - 1]; + if (!entry) { + return; + } + _measurements["ttfb"] = { value: metric.value, unit: "millisecond" }; + }); +} +__name(_trackTtfb, "_trackTtfb"); +function addPerformanceEntries(span, options4) { + const performance2 = getBrowserPerformanceAPI(); + if (!performance2 || !performance2.getEntries || !browserPerformanceTimeOrigin) { + return; + } + const timeOrigin = msToSec(browserPerformanceTimeOrigin); + const performanceEntries = performance2.getEntries(); + const { op, start_timestamp: transactionStartTime } = spanToJSON(span); + performanceEntries.slice(_performanceCursor).forEach((entry) => { + const startTime = msToSec(entry.startTime); + const duration = msToSec( + // Inexplicably, Chrome sometimes emits a negative duration. We need to work around this. + // There is a SO post attempting to explain this, but it leaves one with open questions: https://stackoverflow.com/questions/23191918/peformance-getentries-and-negative-duration-display + // The way we clamp the value is probably not accurate, since we have observed this happen for things that may take a while to load, like for example the replay worker. + // TODO: Investigate why this happens and how to properly mitigate. For now, this is a workaround to prevent transactions being dropped due to negative duration spans. + Math.max(0, entry.duration) + ); + if (op === "navigation" && transactionStartTime && timeOrigin + startTime < transactionStartTime) { + return; + } + switch (entry.entryType) { + case "navigation": { + _addNavigationSpans(span, entry, timeOrigin); + break; + } + case "mark": + case "paint": + case "measure": { + _addMeasureSpans(span, entry, startTime, duration, timeOrigin); + const firstHidden = getVisibilityWatcher(); + const shouldRecord = entry.startTime < firstHidden.firstHiddenTime; + if (entry.name === "first-paint" && shouldRecord) { + _measurements["fp"] = { value: entry.startTime, unit: "millisecond" }; + } + if (entry.name === "first-contentful-paint" && shouldRecord) { + _measurements["fcp"] = { value: entry.startTime, unit: "millisecond" }; + } + break; + } + case "resource": { + _addResourceSpans(span, entry, entry.name, startTime, duration, timeOrigin); + break; + } + } + }); + _performanceCursor = Math.max(performanceEntries.length - 1, 0); + _trackNavigator(span); + if (op === "pageload") { + _addTtfbRequestTimeToMeasurements(_measurements); + const fidMark = _measurements["mark.fid"]; + if (fidMark && _measurements["fid"]) { + startAndEndSpan(span, fidMark.value, fidMark.value + msToSec(_measurements["fid"].value), { + name: "first input delay", + op: "ui.action", + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.ui.browser.metrics" + } + }); + delete _measurements["mark.fid"]; + } + if (!("fcp" in _measurements) || !options4.recordClsOnPageloadSpan) { + delete _measurements.cls; + } + Object.entries(_measurements).forEach(([measurementName, measurement]) => { + setMeasurement(measurementName, measurement.value, measurement.unit); + }); + span.setAttribute("performance.timeOrigin", timeOrigin); + span.setAttribute("performance.activationStart", getActivationStart()); + _setWebVitalAttributes(span); + } + _lcpEntry = void 0; + _clsEntry = void 0; + _measurements = {}; +} +__name(addPerformanceEntries, "addPerformanceEntries"); +function _addMeasureSpans(span, entry, startTime, duration, timeOrigin) { + const navEntry = getNavigationEntry(false); + const requestTime = msToSec(navEntry ? navEntry.requestStart : 0); + const measureStartTimestamp = timeOrigin + Math.max(startTime, requestTime); + const startTimeStamp = timeOrigin + startTime; + const measureEndTimestamp = startTimeStamp + duration; + const attributes = { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.resource.browser.metrics" + }; + if (measureStartTimestamp !== startTimeStamp) { + attributes["sentry.browser.measure_happened_before_request"] = true; + attributes["sentry.browser.measure_start_time"] = measureStartTimestamp; + } + startAndEndSpan(span, measureStartTimestamp, measureEndTimestamp, { + name: entry.name, + op: entry.entryType, + attributes + }); + return measureStartTimestamp; +} +__name(_addMeasureSpans, "_addMeasureSpans"); +function _addNavigationSpans(span, entry, timeOrigin) { + ["unloadEvent", "redirect", "domContentLoadedEvent", "loadEvent", "connect"].forEach((event) => { + _addPerformanceNavigationTiming(span, entry, event, timeOrigin); + }); + _addPerformanceNavigationTiming(span, entry, "secureConnection", timeOrigin, "TLS/SSL"); + _addPerformanceNavigationTiming(span, entry, "fetch", timeOrigin, "cache"); + _addPerformanceNavigationTiming(span, entry, "domainLookup", timeOrigin, "DNS"); + _addRequest(span, entry, timeOrigin); +} +__name(_addNavigationSpans, "_addNavigationSpans"); +function _addPerformanceNavigationTiming(span, entry, event, timeOrigin, name2 = event) { + const eventEnd = _getEndPropertyNameForNavigationTiming(event); + const end = entry[eventEnd]; + const start2 = entry[`${event}Start`]; + if (!start2 || !end) { + return; + } + startAndEndSpan(span, timeOrigin + msToSec(start2), timeOrigin + msToSec(end), { + op: `browser.${name2}`, + name: entry.name, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.ui.browser.metrics" + } + }); +} +__name(_addPerformanceNavigationTiming, "_addPerformanceNavigationTiming"); +function _getEndPropertyNameForNavigationTiming(event) { + if (event === "secureConnection") { + return "connectEnd"; + } + if (event === "fetch") { + return "domainLookupStart"; + } + return `${event}End`; +} +__name(_getEndPropertyNameForNavigationTiming, "_getEndPropertyNameForNavigationTiming"); +function _addRequest(span, entry, timeOrigin) { + const requestStartTimestamp = timeOrigin + msToSec(entry.requestStart); + const responseEndTimestamp = timeOrigin + msToSec(entry.responseEnd); + const responseStartTimestamp = timeOrigin + msToSec(entry.responseStart); + if (entry.responseEnd) { + startAndEndSpan(span, requestStartTimestamp, responseEndTimestamp, { + op: "browser.request", + name: entry.name, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.ui.browser.metrics" + } + }); + startAndEndSpan(span, responseStartTimestamp, responseEndTimestamp, { + op: "browser.response", + name: entry.name, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.ui.browser.metrics" + } + }); + } +} +__name(_addRequest, "_addRequest"); +function _addResourceSpans(span, entry, resourceUrl, startTime, duration, timeOrigin) { + if (entry.initiatorType === "xmlhttprequest" || entry.initiatorType === "fetch") { + return; + } + const parsedUrl = parseUrl$1(resourceUrl); + const attributes = { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.resource.browser.metrics" + }; + setResourceEntrySizeData(attributes, entry, "transferSize", "http.response_transfer_size"); + setResourceEntrySizeData(attributes, entry, "encodedBodySize", "http.response_content_length"); + setResourceEntrySizeData(attributes, entry, "decodedBodySize", "http.decoded_response_content_length"); + const deliveryType = entry.deliveryType; + if (deliveryType != null) { + attributes["http.response_delivery_type"] = deliveryType; + } + const renderBlockingStatus = entry.renderBlockingStatus; + if (renderBlockingStatus) { + attributes["resource.render_blocking_status"] = renderBlockingStatus; + } + if (parsedUrl.protocol) { + attributes["url.scheme"] = parsedUrl.protocol.split(":").pop(); + } + if (parsedUrl.host) { + attributes["server.address"] = parsedUrl.host; + } + attributes["url.same_origin"] = resourceUrl.includes(WINDOW$4.location.origin); + const startTimestamp = timeOrigin + startTime; + const endTimestamp = startTimestamp + duration; + startAndEndSpan(span, startTimestamp, endTimestamp, { + name: resourceUrl.replace(WINDOW$4.location.origin, ""), + op: entry.initiatorType ? `resource.${entry.initiatorType}` : "resource.other", + attributes + }); +} +__name(_addResourceSpans, "_addResourceSpans"); +function _trackNavigator(span) { + const navigator2 = WINDOW$4.navigator; + if (!navigator2) { + return; + } + const connection = navigator2.connection; + if (connection) { + if (connection.effectiveType) { + span.setAttribute("effectiveConnectionType", connection.effectiveType); + } + if (connection.type) { + span.setAttribute("connectionType", connection.type); + } + if (isMeasurementValue(connection.rtt)) { + _measurements["connection.rtt"] = { value: connection.rtt, unit: "millisecond" }; + } + } + if (isMeasurementValue(navigator2.deviceMemory)) { + span.setAttribute("deviceMemory", `${navigator2.deviceMemory} GB`); + } + if (isMeasurementValue(navigator2.hardwareConcurrency)) { + span.setAttribute("hardwareConcurrency", String(navigator2.hardwareConcurrency)); + } +} +__name(_trackNavigator, "_trackNavigator"); +function _setWebVitalAttributes(span) { + if (_lcpEntry) { + if (_lcpEntry.element) { + span.setAttribute("lcp.element", htmlTreeAsString(_lcpEntry.element)); + } + if (_lcpEntry.id) { + span.setAttribute("lcp.id", _lcpEntry.id); + } + if (_lcpEntry.url) { + span.setAttribute("lcp.url", _lcpEntry.url.trim().slice(0, 200)); + } + if (_lcpEntry.loadTime != null) { + span.setAttribute("lcp.loadTime", _lcpEntry.loadTime); + } + if (_lcpEntry.renderTime != null) { + span.setAttribute("lcp.renderTime", _lcpEntry.renderTime); + } + span.setAttribute("lcp.size", _lcpEntry.size); + } + if (_clsEntry && _clsEntry.sources) { + _clsEntry.sources.forEach( + (source, index2) => span.setAttribute(`cls.source.${index2 + 1}`, htmlTreeAsString(source.node)) + ); + } +} +__name(_setWebVitalAttributes, "_setWebVitalAttributes"); +function setResourceEntrySizeData(attributes, entry, key, dataKey) { + const entryVal = entry[key]; + if (entryVal != null && entryVal < MAX_INT_AS_BYTES) { + attributes[dataKey] = entryVal; + } +} +__name(setResourceEntrySizeData, "setResourceEntrySizeData"); +function _addTtfbRequestTimeToMeasurements(_measurements2) { + const navEntry = getNavigationEntry(false); + if (!navEntry) { + return; + } + const { responseStart, requestStart } = navEntry; + if (requestStart <= responseStart) { + _measurements2["ttfb.requestTime"] = { + value: responseStart - requestStart, + unit: "millisecond" + }; + } +} +__name(_addTtfbRequestTimeToMeasurements, "_addTtfbRequestTimeToMeasurements"); +const DEBOUNCE_DURATION = 1e3; +let debounceTimerID; +let lastCapturedEventType; +let lastCapturedEventTargetId; +function addClickKeypressInstrumentationHandler(handler12) { + const type = "dom"; + addHandler$1(type, handler12); + maybeInstrument(type, instrumentDOM); +} +__name(addClickKeypressInstrumentationHandler, "addClickKeypressInstrumentationHandler"); +function instrumentDOM() { + if (!WINDOW$4.document) { + return; + } + const triggerDOMHandler = triggerHandlers$1.bind(null, "dom"); + const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true); + WINDOW$4.document.addEventListener("click", globalDOMEventHandler, false); + WINDOW$4.document.addEventListener("keypress", globalDOMEventHandler, false); + ["EventTarget", "Node"].forEach((target2) => { + const globalObject = WINDOW$4; + const targetObj = globalObject[target2]; + const proto = targetObj && targetObj.prototype; + if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty("addEventListener")) { + return; + } + fill(proto, "addEventListener", function(originalAddEventListener) { + return function(type, listener, options4) { + if (type === "click" || type == "keypress") { + try { + const handlers2 = this.__sentry_instrumentation_handlers__ = this.__sentry_instrumentation_handlers__ || {}; + const handlerForType = handlers2[type] = handlers2[type] || { refCount: 0 }; + if (!handlerForType.handler) { + const handler12 = makeDOMEventHandler(triggerDOMHandler); + handlerForType.handler = handler12; + originalAddEventListener.call(this, type, handler12, options4); + } + handlerForType.refCount++; + } catch (e2) { + } + } + return originalAddEventListener.call(this, type, listener, options4); + }; + }); + fill( + proto, + "removeEventListener", + function(originalRemoveEventListener) { + return function(type, listener, options4) { + if (type === "click" || type == "keypress") { + try { + const handlers2 = this.__sentry_instrumentation_handlers__ || {}; + const handlerForType = handlers2[type]; + if (handlerForType) { + handlerForType.refCount--; + if (handlerForType.refCount <= 0) { + originalRemoveEventListener.call(this, type, handlerForType.handler, options4); + handlerForType.handler = void 0; + delete handlers2[type]; + } + if (Object.keys(handlers2).length === 0) { + delete this.__sentry_instrumentation_handlers__; + } + } + } catch (e2) { + } + } + return originalRemoveEventListener.call(this, type, listener, options4); + }; + } + ); + }); +} +__name(instrumentDOM, "instrumentDOM"); +function isSimilarToLastCapturedEvent(event) { + if (event.type !== lastCapturedEventType) { + return false; + } + try { + if (!event.target || event.target._sentryId !== lastCapturedEventTargetId) { + return false; + } + } catch (e2) { + } + return true; +} +__name(isSimilarToLastCapturedEvent, "isSimilarToLastCapturedEvent"); +function shouldSkipDOMEvent(eventType, target2) { + if (eventType !== "keypress") { + return false; + } + if (!target2 || !target2.tagName) { + return true; + } + if (target2.tagName === "INPUT" || target2.tagName === "TEXTAREA" || target2.isContentEditable) { + return false; + } + return true; +} +__name(shouldSkipDOMEvent, "shouldSkipDOMEvent"); +function makeDOMEventHandler(handler12, globalListener = false) { + return (event) => { + if (!event || event["_sentryCaptured"]) { + return; + } + const target2 = getEventTarget$1(event); + if (shouldSkipDOMEvent(event.type, target2)) { + return; + } + addNonEnumerableProperty(event, "_sentryCaptured", true); + if (target2 && !target2._sentryId) { + addNonEnumerableProperty(target2, "_sentryId", uuid4()); + } + const name2 = event.type === "keypress" ? "input" : event.type; + if (!isSimilarToLastCapturedEvent(event)) { + const handlerData = { event, name: name2, global: globalListener }; + handler12(handlerData); + lastCapturedEventType = event.type; + lastCapturedEventTargetId = target2 ? target2._sentryId : void 0; + } + clearTimeout(debounceTimerID); + debounceTimerID = WINDOW$4.setTimeout(() => { + lastCapturedEventTargetId = void 0; + lastCapturedEventType = void 0; + }, DEBOUNCE_DURATION); + }; +} +__name(makeDOMEventHandler, "makeDOMEventHandler"); +function getEventTarget$1(event) { + try { + return event.target; + } catch (e2) { + return null; + } +} +__name(getEventTarget$1, "getEventTarget$1"); +let lastHref; +function addHistoryInstrumentationHandler(handler12) { + const type = "history"; + addHandler$1(type, handler12); + maybeInstrument(type, instrumentHistory); +} +__name(addHistoryInstrumentationHandler, "addHistoryInstrumentationHandler"); +function instrumentHistory() { + if (!supportsHistory()) { + return; + } + const oldOnPopState = WINDOW$4.onpopstate; + WINDOW$4.onpopstate = function(...args) { + const to = WINDOW$4.location.href; + const from2 = lastHref; + lastHref = to; + const handlerData = { from: from2, to }; + triggerHandlers$1("history", handlerData); + if (oldOnPopState) { + try { + return oldOnPopState.apply(this, args); + } catch (_oO) { + } + } + }; + function historyReplacementFunction(originalHistoryFunction) { + return function(...args) { + const url = args.length > 2 ? args[2] : void 0; + if (url) { + const from2 = lastHref; + const to = String(url); + lastHref = to; + const handlerData = { from: from2, to }; + triggerHandlers$1("history", handlerData); + } + return originalHistoryFunction.apply(this, args); + }; + } + __name(historyReplacementFunction, "historyReplacementFunction"); + fill(WINDOW$4.history, "pushState", historyReplacementFunction); + fill(WINDOW$4.history, "replaceState", historyReplacementFunction); +} +__name(instrumentHistory, "instrumentHistory"); +const cachedImplementations$3 = {}; +function getNativeImplementation(name2) { + const cached = cachedImplementations$3[name2]; + if (cached) { + return cached; + } + let impl = WINDOW$4[name2]; + if (isNativeFunction(impl)) { + return cachedImplementations$3[name2] = impl.bind(WINDOW$4); + } + const document2 = WINDOW$4.document; + if (document2 && typeof document2.createElement === "function") { + try { + const sandbox = document2.createElement("iframe"); + sandbox.hidden = true; + document2.head.appendChild(sandbox); + const contentWindow = sandbox.contentWindow; + if (contentWindow && contentWindow[name2]) { + impl = contentWindow[name2]; + } + document2.head.removeChild(sandbox); + } catch (e2) { + DEBUG_BUILD$3 && logger$2.warn(`Could not create sandbox iframe for ${name2} check, bailing to window.${name2}: `, e2); + } + } + if (!impl) { + return impl; + } + return cachedImplementations$3[name2] = impl.bind(WINDOW$4); +} +__name(getNativeImplementation, "getNativeImplementation"); +function clearCachedImplementation(name2) { + cachedImplementations$3[name2] = void 0; +} +__name(clearCachedImplementation, "clearCachedImplementation"); +function fetch$1(...rest) { + return getNativeImplementation("fetch")(...rest); +} +__name(fetch$1, "fetch$1"); +function setTimeout$3(...rest) { + return getNativeImplementation("setTimeout")(...rest); +} +__name(setTimeout$3, "setTimeout$3"); +const SENTRY_XHR_DATA_KEY = "__sentry_xhr_v3__"; +function addXhrInstrumentationHandler(handler12) { + const type = "xhr"; + addHandler$1(type, handler12); + maybeInstrument(type, instrumentXHR); +} +__name(addXhrInstrumentationHandler, "addXhrInstrumentationHandler"); +function instrumentXHR() { + if (!WINDOW$4.XMLHttpRequest) { + return; + } + const xhrproto = XMLHttpRequest.prototype; + xhrproto.open = new Proxy(xhrproto.open, { + apply(originalOpen, xhrOpenThisArg, xhrOpenArgArray) { + const virtualError = new Error(); + const startTimestamp = timestampInSeconds() * 1e3; + const method = isString$a(xhrOpenArgArray[0]) ? xhrOpenArgArray[0].toUpperCase() : void 0; + const url = parseUrl(xhrOpenArgArray[1]); + if (!method || !url) { + return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray); + } + xhrOpenThisArg[SENTRY_XHR_DATA_KEY] = { + method, + url, + request_headers: {} + }; + if (method === "POST" && url.match(/sentry_key/)) { + xhrOpenThisArg.__sentry_own_request__ = true; + } + const onreadystatechangeHandler = /* @__PURE__ */ __name(() => { + const xhrInfo = xhrOpenThisArg[SENTRY_XHR_DATA_KEY]; + if (!xhrInfo) { + return; + } + if (xhrOpenThisArg.readyState === 4) { + try { + xhrInfo.status_code = xhrOpenThisArg.status; + } catch (e2) { + } + const handlerData = { + endTimestamp: timestampInSeconds() * 1e3, + startTimestamp, + xhr: xhrOpenThisArg, + virtualError + }; + triggerHandlers$1("xhr", handlerData); + } + }, "onreadystatechangeHandler"); + if ("onreadystatechange" in xhrOpenThisArg && typeof xhrOpenThisArg.onreadystatechange === "function") { + xhrOpenThisArg.onreadystatechange = new Proxy(xhrOpenThisArg.onreadystatechange, { + apply(originalOnreadystatechange, onreadystatechangeThisArg, onreadystatechangeArgArray) { + onreadystatechangeHandler(); + return originalOnreadystatechange.apply(onreadystatechangeThisArg, onreadystatechangeArgArray); + } + }); + } else { + xhrOpenThisArg.addEventListener("readystatechange", onreadystatechangeHandler); + } + xhrOpenThisArg.setRequestHeader = new Proxy(xhrOpenThisArg.setRequestHeader, { + apply(originalSetRequestHeader, setRequestHeaderThisArg, setRequestHeaderArgArray) { + const [header3, value4] = setRequestHeaderArgArray; + const xhrInfo = setRequestHeaderThisArg[SENTRY_XHR_DATA_KEY]; + if (xhrInfo && isString$a(header3) && isString$a(value4)) { + xhrInfo.request_headers[header3.toLowerCase()] = value4; + } + return originalSetRequestHeader.apply(setRequestHeaderThisArg, setRequestHeaderArgArray); + } + }); + return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray); + } + }); + xhrproto.send = new Proxy(xhrproto.send, { + apply(originalSend, sendThisArg, sendArgArray) { + const sentryXhrData = sendThisArg[SENTRY_XHR_DATA_KEY]; + if (!sentryXhrData) { + return originalSend.apply(sendThisArg, sendArgArray); + } + if (sendArgArray[0] !== void 0) { + sentryXhrData.body = sendArgArray[0]; + } + const handlerData = { + startTimestamp: timestampInSeconds() * 1e3, + xhr: sendThisArg + }; + triggerHandlers$1("xhr", handlerData); + return originalSend.apply(sendThisArg, sendArgArray); + } + }); +} +__name(instrumentXHR, "instrumentXHR"); +function parseUrl(url) { + if (isString$a(url)) { + return url; + } + try { + return url.toString(); + } catch (e2) { + } + return void 0; +} +__name(parseUrl, "parseUrl"); +const LAST_INTERACTIONS = []; +const INTERACTIONS_SPAN_MAP = /* @__PURE__ */ new Map(); +function startTrackingINP() { + const performance2 = getBrowserPerformanceAPI(); + if (performance2 && browserPerformanceTimeOrigin) { + const inpCallback = _trackINP(); + return () => { + inpCallback(); + }; + } + return () => void 0; +} +__name(startTrackingINP, "startTrackingINP"); +const INP_ENTRY_MAP = { + click: "click", + pointerdown: "click", + pointerup: "click", + mousedown: "click", + mouseup: "click", + touchstart: "click", + touchend: "click", + mouseover: "hover", + mouseout: "hover", + mouseenter: "hover", + mouseleave: "hover", + pointerover: "hover", + pointerout: "hover", + pointerenter: "hover", + pointerleave: "hover", + dragstart: "drag", + dragend: "drag", + drag: "drag", + dragenter: "drag", + dragleave: "drag", + dragover: "drag", + drop: "drag", + keydown: "press", + keyup: "press", + keypress: "press", + input: "press" +}; +function _trackINP() { + return addInpInstrumentationHandler(({ metric }) => { + if (metric.value == void 0) { + return; + } + const entry = metric.entries.find((entry2) => entry2.duration === metric.value && INP_ENTRY_MAP[entry2.name]); + if (!entry) { + return; + } + const { interactionId } = entry; + const interactionType = INP_ENTRY_MAP[entry.name]; + const startTime = msToSec(browserPerformanceTimeOrigin + entry.startTime); + const duration = msToSec(metric.value); + const activeSpan = getActiveSpan(); + const rootSpan = activeSpan ? getRootSpan(activeSpan) : void 0; + const cachedSpan = interactionId != null ? INTERACTIONS_SPAN_MAP.get(interactionId) : void 0; + const spanToUse = cachedSpan || rootSpan; + const routeName = spanToUse ? spanToJSON(spanToUse).description : getCurrentScope$1().getScopeData().transactionName; + const name2 = htmlTreeAsString(entry.target); + const attributes = dropUndefinedKeys({ + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.http.browser.inp", + [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `ui.interaction.${interactionType}`, + [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: entry.duration + }); + const span = startStandaloneWebVitalSpan({ + name: name2, + transaction: routeName, + attributes, + startTime + }); + if (span) { + span.addEvent("inp", { + [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: "millisecond", + [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: metric.value + }); + span.end(startTime + duration); + } + }); +} +__name(_trackINP, "_trackINP"); +function registerInpInteractionListener(_latestRoute) { + const handleEntries = /* @__PURE__ */ __name(({ entries }) => { + const activeSpan = getActiveSpan(); + const activeRootSpan = activeSpan && getRootSpan(activeSpan); + entries.forEach((entry) => { + if (!isPerformanceEventTiming(entry) || !activeRootSpan) { + return; + } + const interactionId = entry.interactionId; + if (interactionId == null) { + return; + } + if (INTERACTIONS_SPAN_MAP.has(interactionId)) { + return; + } + if (LAST_INTERACTIONS.length > 10) { + const last = LAST_INTERACTIONS.shift(); + INTERACTIONS_SPAN_MAP.delete(last); + } + LAST_INTERACTIONS.push(interactionId); + INTERACTIONS_SPAN_MAP.set(interactionId, activeRootSpan); + }); + }, "handleEntries"); + addPerformanceInstrumentationHandler("event", handleEntries); + addPerformanceInstrumentationHandler("first-input", handleEntries); +} +__name(registerInpInteractionListener, "registerInpInteractionListener"); +function makeFetchTransport(options4, nativeFetch = getNativeImplementation("fetch")) { + let pendingBodySize = 0; + let pendingCount = 0; + function makeRequest(request) { + const requestSize = request.body.length; + pendingBodySize += requestSize; + pendingCount++; + const requestOptions = { + body: request.body, + method: "POST", + referrerPolicy: "origin", + headers: options4.headers, + // Outgoing requests are usually cancelled when navigating to a different page, causing a "TypeError: Failed to + // fetch" error and sending a "network_error" client-outcome - in Chrome, the request status shows "(cancelled)". + // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're + // frequently sending events right before the user is switching pages (eg. when finishing navigation transactions). + // Gotchas: + // - `keepalive` isn't supported by Firefox + // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch): + // If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error. + // We will therefore only activate the flag when we're below that limit. + // There is also a limit of requests that can be open at the same time, so we also limit this to 15 + // See https://github.com/getsentry/sentry-javascript/pull/7553 for details + keepalive: pendingBodySize <= 6e4 && pendingCount < 15, + ...options4.fetchOptions + }; + if (!nativeFetch) { + clearCachedImplementation("fetch"); + return rejectedSyncPromise("No fetch implementation available"); + } + try { + return nativeFetch(options4.url, requestOptions).then((response) => { + pendingBodySize -= requestSize; + pendingCount--; + return { + statusCode: response.status, + headers: { + "x-sentry-rate-limits": response.headers.get("X-Sentry-Rate-Limits"), + "retry-after": response.headers.get("Retry-After") + } + }; + }); + } catch (e2) { + clearCachedImplementation("fetch"); + pendingBodySize -= requestSize; + pendingCount--; + return rejectedSyncPromise(e2); + } + } + __name(makeRequest, "makeRequest"); + return createTransport(options4, makeRequest); +} +__name(makeFetchTransport, "makeFetchTransport"); +const OPERA10_PRIORITY = 10; +const OPERA11_PRIORITY = 20; +const CHROME_PRIORITY = 30; +const WINJS_PRIORITY = 40; +const GECKO_PRIORITY = 50; +function createFrame(filename, func, lineno, colno) { + const frame = { + filename, + function: func === "" ? UNKNOWN_FUNCTION : func, + in_app: true + // All browser frames are considered in_app + }; + if (lineno !== void 0) { + frame.lineno = lineno; + } + if (colno !== void 0) { + frame.colno = colno; + } + return frame; +} +__name(createFrame, "createFrame"); +const chromeRegexNoFnName = /^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i; +const chromeRegex = /^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i; +const chromeEvalRegex = /\((\S*)(?::(\d+))(?::(\d+))\)/; +const chromeStackParserFn = /* @__PURE__ */ __name((line) => { + const noFnParts = chromeRegexNoFnName.exec(line); + if (noFnParts) { + const [, filename, line2, col] = noFnParts; + return createFrame(filename, UNKNOWN_FUNCTION, +line2, +col); + } + const parts2 = chromeRegex.exec(line); + if (parts2) { + const isEval = parts2[2] && parts2[2].indexOf("eval") === 0; + if (isEval) { + const subMatch = chromeEvalRegex.exec(parts2[2]); + if (subMatch) { + parts2[2] = subMatch[1]; + parts2[3] = subMatch[2]; + parts2[4] = subMatch[3]; + } + } + const [func, filename] = extractSafariExtensionDetails(parts2[1] || UNKNOWN_FUNCTION, parts2[2]); + return createFrame(filename, func, parts2[3] ? +parts2[3] : void 0, parts2[4] ? +parts2[4] : void 0); + } + return; +}, "chromeStackParserFn"); +const chromeStackLineParser = [CHROME_PRIORITY, chromeStackParserFn]; +const geckoREgex = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i; +const geckoEvalRegex = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i; +const gecko$1 = /* @__PURE__ */ __name((line) => { + const parts2 = geckoREgex.exec(line); + if (parts2) { + const isEval = parts2[3] && parts2[3].indexOf(" > eval") > -1; + if (isEval) { + const subMatch = geckoEvalRegex.exec(parts2[3]); + if (subMatch) { + parts2[1] = parts2[1] || "eval"; + parts2[3] = subMatch[1]; + parts2[4] = subMatch[2]; + parts2[5] = ""; + } + } + let filename = parts2[3]; + let func = parts2[1] || UNKNOWN_FUNCTION; + [func, filename] = extractSafariExtensionDetails(func, filename); + return createFrame(filename, func, parts2[4] ? +parts2[4] : void 0, parts2[5] ? +parts2[5] : void 0); + } + return; +}, "gecko$1"); +const geckoStackLineParser = [GECKO_PRIORITY, gecko$1]; +const winjsRegex = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i; +const winjs = /* @__PURE__ */ __name((line) => { + const parts2 = winjsRegex.exec(line); + return parts2 ? createFrame(parts2[2], parts2[1] || UNKNOWN_FUNCTION, +parts2[3], parts2[4] ? +parts2[4] : void 0) : void 0; +}, "winjs"); +const winjsStackLineParser = [WINJS_PRIORITY, winjs]; +const opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i; +const opera10 = /* @__PURE__ */ __name((line) => { + const parts2 = opera10Regex.exec(line); + return parts2 ? createFrame(parts2[2], parts2[3] || UNKNOWN_FUNCTION, +parts2[1]) : void 0; +}, "opera10"); +const opera10StackLineParser = [OPERA10_PRIORITY, opera10]; +const opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:]+)>|([^)]+))\(.*\))? in (.*):\s*$/i; +const opera11 = /* @__PURE__ */ __name((line) => { + const parts2 = opera11Regex.exec(line); + return parts2 ? createFrame(parts2[5], parts2[3] || parts2[4] || UNKNOWN_FUNCTION, +parts2[1], +parts2[2]) : void 0; +}, "opera11"); +const opera11StackLineParser = [OPERA11_PRIORITY, opera11]; +const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser]; +const defaultStackParser = createStackParser(...defaultStackLineParsers); +const extractSafariExtensionDetails = /* @__PURE__ */ __name((func, filename) => { + const isSafariExtension = func.indexOf("safari-extension") !== -1; + const isSafariWebExtension = func.indexOf("safari-web-extension") !== -1; + return isSafariExtension || isSafariWebExtension ? [ + func.indexOf("@") !== -1 ? func.split("@")[0] : UNKNOWN_FUNCTION, + isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}` + ] : [func, filename]; +}, "extractSafariExtensionDetails"); +const MAX_ALLOWED_STRING_LENGTH = 1024; +const INTEGRATION_NAME$a = "Breadcrumbs"; +const _breadcrumbsIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const _options = { + console: true, + dom: true, + fetch: true, + history: true, + sentry: true, + xhr: true, + ...options4 + }; + return { + name: INTEGRATION_NAME$a, + setup(client) { + if (_options.console) { + addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client)); + } + if (_options.dom) { + addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom)); + } + if (_options.xhr) { + addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client)); + } + if (_options.fetch) { + addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client)); + } + if (_options.history) { + addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client)); + } + if (_options.sentry) { + client.on("beforeSendEvent", _getSentryBreadcrumbHandler(client)); + } + } + }; +}, "_breadcrumbsIntegration"); +const breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration); +function _getSentryBreadcrumbHandler(client) { + return /* @__PURE__ */ __name(function addSentryBreadcrumb(event) { + if (getClient() !== client) { + return; + } + addBreadcrumb( + { + category: `sentry.${event.type === "transaction" ? "transaction" : "event"}`, + event_id: event.event_id, + level: event.level, + message: getEventDescription(event) + }, + { + event + } + ); + }, "addSentryBreadcrumb"); +} +__name(_getSentryBreadcrumbHandler, "_getSentryBreadcrumbHandler"); +function _getDomBreadcrumbHandler(client, dom) { + return /* @__PURE__ */ __name(function _innerDomBreadcrumb(handlerData) { + if (getClient() !== client) { + return; + } + let target2; + let componentName; + let keyAttrs = typeof dom === "object" ? dom.serializeAttribute : void 0; + let maxStringLength = typeof dom === "object" && typeof dom.maxStringLength === "number" ? dom.maxStringLength : void 0; + if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) { + DEBUG_BUILD$4 && logger$2.warn( + `\`dom.maxStringLength\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.` + ); + maxStringLength = MAX_ALLOWED_STRING_LENGTH; + } + if (typeof keyAttrs === "string") { + keyAttrs = [keyAttrs]; + } + try { + const event = handlerData.event; + const element = _isEvent(event) ? event.target : event; + target2 = htmlTreeAsString(element, { keyAttrs, maxStringLength }); + componentName = getComponentName$1(element); + } catch (e2) { + target2 = ""; + } + if (target2.length === 0) { + return; + } + const breadcrumb = { + category: `ui.${handlerData.name}`, + message: target2 + }; + if (componentName) { + breadcrumb.data = { "ui.component_name": componentName }; + } + addBreadcrumb(breadcrumb, { + event: handlerData.event, + name: handlerData.name, + global: handlerData.global + }); + }, "_innerDomBreadcrumb"); +} +__name(_getDomBreadcrumbHandler, "_getDomBreadcrumbHandler"); +function _getConsoleBreadcrumbHandler(client) { + return /* @__PURE__ */ __name(function _consoleBreadcrumb(handlerData) { + if (getClient() !== client) { + return; + } + const breadcrumb = { + category: "console", + data: { + arguments: handlerData.args, + logger: "console" + }, + level: severityLevelFromString(handlerData.level), + message: safeJoin(handlerData.args, " ") + }; + if (handlerData.level === "assert") { + if (handlerData.args[0] === false) { + breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), " ") || "console.assert"}`; + breadcrumb.data.arguments = handlerData.args.slice(1); + } else { + return; + } + } + addBreadcrumb(breadcrumb, { + input: handlerData.args, + level: handlerData.level + }); + }, "_consoleBreadcrumb"); +} +__name(_getConsoleBreadcrumbHandler, "_getConsoleBreadcrumbHandler"); +function _getXhrBreadcrumbHandler(client) { + return /* @__PURE__ */ __name(function _xhrBreadcrumb(handlerData) { + if (getClient() !== client) { + return; + } + const { startTimestamp, endTimestamp } = handlerData; + const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY]; + if (!startTimestamp || !endTimestamp || !sentryXhrData) { + return; + } + const { method, url, status_code, body } = sentryXhrData; + const data26 = { + method, + url, + status_code + }; + const hint = { + xhr: handlerData.xhr, + input: body, + startTimestamp, + endTimestamp + }; + const level = getBreadcrumbLogLevelFromHttpStatusCode(status_code); + addBreadcrumb( + { + category: "xhr", + data: data26, + type: "http", + level + }, + hint + ); + }, "_xhrBreadcrumb"); +} +__name(_getXhrBreadcrumbHandler, "_getXhrBreadcrumbHandler"); +function _getFetchBreadcrumbHandler(client) { + return /* @__PURE__ */ __name(function _fetchBreadcrumb(handlerData) { + if (getClient() !== client) { + return; + } + const { startTimestamp, endTimestamp } = handlerData; + if (!endTimestamp) { + return; + } + if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === "POST") { + return; + } + if (handlerData.error) { + const data26 = handlerData.fetchData; + const hint = { + data: handlerData.error, + input: handlerData.args, + startTimestamp, + endTimestamp + }; + addBreadcrumb( + { + category: "fetch", + data: data26, + level: "error", + type: "http" + }, + hint + ); + } else { + const response = handlerData.response; + const data26 = { + ...handlerData.fetchData, + status_code: response && response.status + }; + const hint = { + input: handlerData.args, + response, + startTimestamp, + endTimestamp + }; + const level = getBreadcrumbLogLevelFromHttpStatusCode(data26.status_code); + addBreadcrumb( + { + category: "fetch", + data: data26, + type: "http", + level + }, + hint + ); + } + }, "_fetchBreadcrumb"); +} +__name(_getFetchBreadcrumbHandler, "_getFetchBreadcrumbHandler"); +function _getHistoryBreadcrumbHandler(client) { + return /* @__PURE__ */ __name(function _historyBreadcrumb(handlerData) { + if (getClient() !== client) { + return; + } + let from2 = handlerData.from; + let to = handlerData.to; + const parsedLoc = parseUrl$1(WINDOW$5.location.href); + let parsedFrom = from2 ? parseUrl$1(from2) : void 0; + const parsedTo = parseUrl$1(to); + if (!parsedFrom || !parsedFrom.path) { + parsedFrom = parsedLoc; + } + if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) { + to = parsedTo.relative; + } + if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) { + from2 = parsedFrom.relative; + } + addBreadcrumb({ + category: "navigation", + data: { + from: from2, + to + } + }); + }, "_historyBreadcrumb"); +} +__name(_getHistoryBreadcrumbHandler, "_getHistoryBreadcrumbHandler"); +function _isEvent(event) { + return !!event && !!event.target; +} +__name(_isEvent, "_isEvent"); +const DEFAULT_EVENT_TARGET = [ + "EventTarget", + "Window", + "Node", + "ApplicationCache", + "AudioTrackList", + "BroadcastChannel", + "ChannelMergerNode", + "CryptoOperation", + "EventSource", + "FileReader", + "HTMLUnknownElement", + "IDBDatabase", + "IDBRequest", + "IDBTransaction", + "KeyOperation", + "MediaController", + "MessagePort", + "ModalWindow", + "Notification", + "SVGElementInstance", + "Screen", + "SharedWorker", + "TextTrack", + "TextTrackCue", + "TextTrackList", + "WebSocket", + "WebSocketWorker", + "Worker", + "XMLHttpRequest", + "XMLHttpRequestEventTarget", + "XMLHttpRequestUpload" +]; +const INTEGRATION_NAME$9 = "BrowserApiErrors"; +const _browserApiErrorsIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const _options = { + XMLHttpRequest: true, + eventTarget: true, + requestAnimationFrame: true, + setInterval: true, + setTimeout: true, + ...options4 + }; + return { + name: INTEGRATION_NAME$9, + // TODO: This currently only works for the first client this is setup + // We may want to adjust this to check for client etc. + setupOnce() { + if (_options.setTimeout) { + fill(WINDOW$5, "setTimeout", _wrapTimeFunction); + } + if (_options.setInterval) { + fill(WINDOW$5, "setInterval", _wrapTimeFunction); + } + if (_options.requestAnimationFrame) { + fill(WINDOW$5, "requestAnimationFrame", _wrapRAF); + } + if (_options.XMLHttpRequest && "XMLHttpRequest" in WINDOW$5) { + fill(XMLHttpRequest.prototype, "send", _wrapXHR$1); + } + const eventTargetOption = _options.eventTarget; + if (eventTargetOption) { + const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET; + eventTarget.forEach(_wrapEventTarget); + } + } + }; +}, "_browserApiErrorsIntegration"); +const browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration); +function _wrapTimeFunction(original) { + return function(...args) { + const originalCallback = args[0]; + args[0] = wrap$1(originalCallback, { + mechanism: { + data: { function: getFunctionName(original) }, + handled: false, + type: "instrument" + } + }); + return original.apply(this, args); + }; +} +__name(_wrapTimeFunction, "_wrapTimeFunction"); +function _wrapRAF(original) { + return function(callback) { + return original.apply(this, [ + wrap$1(callback, { + mechanism: { + data: { + function: "requestAnimationFrame", + handler: getFunctionName(original) + }, + handled: false, + type: "instrument" + } + }) + ]); + }; +} +__name(_wrapRAF, "_wrapRAF"); +function _wrapXHR$1(originalSend) { + return function(...args) { + const xhr = this; + const xmlHttpRequestProps = ["onload", "onerror", "onprogress", "onreadystatechange"]; + xmlHttpRequestProps.forEach((prop2) => { + if (prop2 in xhr && typeof xhr[prop2] === "function") { + fill(xhr, prop2, function(original) { + const wrapOptions = { + mechanism: { + data: { + function: prop2, + handler: getFunctionName(original) + }, + handled: false, + type: "instrument" + } + }; + const originalFunction = getOriginalFunction(original); + if (originalFunction) { + wrapOptions.mechanism.data.handler = getFunctionName(originalFunction); + } + return wrap$1(original, wrapOptions); + }); + } + }); + return originalSend.apply(this, args); + }; +} +__name(_wrapXHR$1, "_wrapXHR$1"); +function _wrapEventTarget(target2) { + const globalObject = WINDOW$5; + const targetObj = globalObject[target2]; + const proto = targetObj && targetObj.prototype; + if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty("addEventListener")) { + return; + } + fill(proto, "addEventListener", function(original) { + return function(eventName, fn, options4) { + try { + if (isEventListenerObject(fn)) { + fn.handleEvent = wrap$1(fn.handleEvent, { + mechanism: { + data: { + function: "handleEvent", + handler: getFunctionName(fn), + target: target2 + }, + handled: false, + type: "instrument" + } + }); + } + } catch (e2) { + } + return original.apply(this, [ + eventName, + wrap$1(fn, { + mechanism: { + data: { + function: "addEventListener", + handler: getFunctionName(fn), + target: target2 + }, + handled: false, + type: "instrument" + } + }), + options4 + ]); + }; + }); + fill(proto, "removeEventListener", function(originalRemoveEventListener) { + return function(eventName, fn, options4) { + try { + const originalEventHandler = fn.__sentry_wrapped__; + if (originalEventHandler) { + originalRemoveEventListener.call(this, eventName, originalEventHandler, options4); + } + } catch (e2) { + } + return originalRemoveEventListener.call(this, eventName, fn, options4); + }; + }); +} +__name(_wrapEventTarget, "_wrapEventTarget"); +function isEventListenerObject(obj) { + return typeof obj.handleEvent === "function"; +} +__name(isEventListenerObject, "isEventListenerObject"); +const browserSessionIntegration = defineIntegration(() => { + return { + name: "BrowserSession", + setupOnce() { + if (typeof WINDOW$5.document === "undefined") { + DEBUG_BUILD$4 && logger$2.warn("Using the `browserSessionIntegration` in non-browser environments is not supported."); + return; + } + startSession({ ignoreDuration: true }); + captureSession(); + addHistoryInstrumentationHandler(({ from: from2, to }) => { + if (from2 !== void 0 && from2 !== to) { + startSession({ ignoreDuration: true }); + captureSession(); + } + }); + } + }; +}); +const INTEGRATION_NAME$8 = "GlobalHandlers"; +const _globalHandlersIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const _options = { + onerror: true, + onunhandledrejection: true, + ...options4 + }; + return { + name: INTEGRATION_NAME$8, + setupOnce() { + Error.stackTraceLimit = 50; + }, + setup(client) { + if (_options.onerror) { + _installGlobalOnErrorHandler(client); + globalHandlerLog("onerror"); + } + if (_options.onunhandledrejection) { + _installGlobalOnUnhandledRejectionHandler(client); + globalHandlerLog("onunhandledrejection"); + } + } + }; +}, "_globalHandlersIntegration"); +const globalHandlersIntegration = defineIntegration(_globalHandlersIntegration); +function _installGlobalOnErrorHandler(client) { + addGlobalErrorInstrumentationHandler((data26) => { + const { stackParser, attachStacktrace } = getOptions(); + if (getClient() !== client || shouldIgnoreOnError()) { + return; + } + const { msg, url, line, column, error: error2 } = data26; + const event = _enhanceEventWithInitialFrame( + eventFromUnknownInput(stackParser, error2 || msg, void 0, attachStacktrace, false), + url, + line, + column + ); + event.level = "error"; + captureEvent(event, { + originalException: error2, + mechanism: { + handled: false, + type: "onerror" + } + }); + }); +} +__name(_installGlobalOnErrorHandler, "_installGlobalOnErrorHandler"); +function _installGlobalOnUnhandledRejectionHandler(client) { + addGlobalUnhandledRejectionInstrumentationHandler((e2) => { + const { stackParser, attachStacktrace } = getOptions(); + if (getClient() !== client || shouldIgnoreOnError()) { + return; + } + const error2 = _getUnhandledRejectionError(e2); + const event = isPrimitive(error2) ? _eventFromRejectionWithPrimitive(error2) : eventFromUnknownInput(stackParser, error2, void 0, attachStacktrace, true); + event.level = "error"; + captureEvent(event, { + originalException: error2, + mechanism: { + handled: false, + type: "onunhandledrejection" + } + }); + }); +} +__name(_installGlobalOnUnhandledRejectionHandler, "_installGlobalOnUnhandledRejectionHandler"); +function _getUnhandledRejectionError(error2) { + if (isPrimitive(error2)) { + return error2; + } + try { + if ("reason" in error2) { + return error2.reason; + } + if ("detail" in error2 && "reason" in error2.detail) { + return error2.detail.reason; + } + } catch (e2) { + } + return error2; +} +__name(_getUnhandledRejectionError, "_getUnhandledRejectionError"); +function _eventFromRejectionWithPrimitive(reason) { + return { + exception: { + values: [ + { + type: "UnhandledRejection", + // String() is needed because the Primitive type includes symbols (which can't be automatically stringified) + value: `Non-Error promise rejection captured with value: ${String(reason)}` + } + ] + } + }; +} +__name(_eventFromRejectionWithPrimitive, "_eventFromRejectionWithPrimitive"); +function _enhanceEventWithInitialFrame(event, url, line, column) { + const e2 = event.exception = event.exception || {}; + const ev = e2.values = e2.values || []; + const ev0 = ev[0] = ev[0] || {}; + const ev0s = ev0.stacktrace = ev0.stacktrace || {}; + const ev0sf = ev0s.frames = ev0s.frames || []; + const colno = column; + const lineno = line; + const filename = isString$a(url) && url.length > 0 ? url : getLocationHref(); + if (ev0sf.length === 0) { + ev0sf.push({ + colno, + filename, + function: UNKNOWN_FUNCTION, + in_app: true, + lineno + }); + } + return event; +} +__name(_enhanceEventWithInitialFrame, "_enhanceEventWithInitialFrame"); +function globalHandlerLog(type) { + DEBUG_BUILD$4 && logger$2.log(`Global Handler attached: ${type}`); +} +__name(globalHandlerLog, "globalHandlerLog"); +function getOptions() { + const client = getClient(); + const options4 = client && client.getOptions() || { + stackParser: /* @__PURE__ */ __name(() => [], "stackParser"), + attachStacktrace: false + }; + return options4; +} +__name(getOptions, "getOptions"); +const httpContextIntegration = defineIntegration(() => { + return { + name: "HttpContext", + preprocessEvent(event) { + if (!WINDOW$5.navigator && !WINDOW$5.location && !WINDOW$5.document) { + return; + } + const url = event.request && event.request.url || WINDOW$5.location && WINDOW$5.location.href; + const { referrer } = WINDOW$5.document || {}; + const { userAgent } = WINDOW$5.navigator || {}; + const headers = { + ...event.request && event.request.headers, + ...referrer && { Referer: referrer }, + ...userAgent && { "User-Agent": userAgent } + }; + const request = { ...event.request, ...url && { url }, headers }; + event.request = request; + } + }; +}); +const DEFAULT_KEY = "cause"; +const DEFAULT_LIMIT = 5; +const INTEGRATION_NAME$7 = "LinkedErrors"; +const _linkedErrorsIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const limit = options4.limit || DEFAULT_LIMIT; + const key = options4.key || DEFAULT_KEY; + return { + name: INTEGRATION_NAME$7, + preprocessEvent(event, hint, client) { + const options5 = client.getOptions(); + applyAggregateErrorsToEvent( + // This differs from the LinkedErrors integration in core by using a different exceptionFromError function + exceptionFromError, + options5.stackParser, + options5.maxValueLength, + key, + limit, + event, + hint + ); + } + }; +}, "_linkedErrorsIntegration"); +const linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration); +function getDefaultIntegrations(options4) { + const integrations = [ + inboundFiltersIntegration(), + functionToStringIntegration(), + browserApiErrorsIntegration(), + breadcrumbsIntegration(), + globalHandlersIntegration(), + linkedErrorsIntegration(), + dedupeIntegration(), + httpContextIntegration() + ]; + if (options4.autoSessionTracking !== false) { + integrations.push(browserSessionIntegration()); + } + return integrations; +} +__name(getDefaultIntegrations, "getDefaultIntegrations"); +function applyDefaultOptions(optionsArg = {}) { + const defaultOptions2 = { + defaultIntegrations: getDefaultIntegrations(optionsArg), + release: typeof __SENTRY_RELEASE__ === "string" ? __SENTRY_RELEASE__ : WINDOW$5.SENTRY_RELEASE && WINDOW$5.SENTRY_RELEASE.id ? WINDOW$5.SENTRY_RELEASE.id : void 0, + autoSessionTracking: true, + sendClientReports: true + }; + if (optionsArg.defaultIntegrations == null) { + delete optionsArg.defaultIntegrations; + } + return { ...defaultOptions2, ...optionsArg }; +} +__name(applyDefaultOptions, "applyDefaultOptions"); +function shouldShowBrowserExtensionError() { + const windowWithMaybeExtension = typeof WINDOW$5.window !== "undefined" && WINDOW$5; + if (!windowWithMaybeExtension) { + return false; + } + const extensionKey = windowWithMaybeExtension.chrome ? "chrome" : "browser"; + const extensionObject = windowWithMaybeExtension[extensionKey]; + const runtimeId = extensionObject && extensionObject.runtime && extensionObject.runtime.id; + const href = WINDOW$5.location && WINDOW$5.location.href || ""; + const extensionProtocols = ["chrome-extension:", "moz-extension:", "ms-browser-extension:", "safari-web-extension:"]; + const isDedicatedExtensionPage = !!runtimeId && WINDOW$5 === WINDOW$5.top && extensionProtocols.some((protocol) => href.startsWith(`${protocol}//`)); + const isNWjs = typeof windowWithMaybeExtension.nw !== "undefined"; + return !!runtimeId && !isDedicatedExtensionPage && !isNWjs; +} +__name(shouldShowBrowserExtensionError, "shouldShowBrowserExtensionError"); +function init$4(browserOptions = {}) { + const options4 = applyDefaultOptions(browserOptions); + if (!options4.skipBrowserExtensionCheck && shouldShowBrowserExtensionError()) { + consoleSandbox(() => { + console.error( + "[Sentry] You cannot run Sentry this way in a browser extension, check: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/" + ); + }); + return; + } + if (DEBUG_BUILD$4) { + if (!supportsFetch()) { + logger$2.warn( + "No Fetch API detected. The Sentry SDK requires a Fetch API compatible environment to send events. Please add a Fetch API polyfill." + ); + } + } + const clientOptions = { + ...options4, + stackParser: stackParserFromStackParserOptions(options4.stackParser || defaultStackParser), + integrations: getIntegrationsToSetup(options4), + transport: options4.transport || makeFetchTransport + }; + return initAndBind(BrowserClient, clientOptions); +} +__name(init$4, "init$4"); +function showReportDialog(options4 = {}) { + if (!WINDOW$5.document) { + DEBUG_BUILD$4 && logger$2.error("Global document not defined in showReportDialog call"); + return; + } + const scope = getCurrentScope$1(); + const client = scope.getClient(); + const dsn = client && client.getDsn(); + if (!dsn) { + DEBUG_BUILD$4 && logger$2.error("DSN not configured for showReportDialog call"); + return; + } + if (scope) { + options4.user = { + ...scope.getUser(), + ...options4.user + }; + } + if (!options4.eventId) { + const eventId = lastEventId(); + if (eventId) { + options4.eventId = eventId; + } + } + const script2 = WINDOW$5.document.createElement("script"); + script2.async = true; + script2.crossOrigin = "anonymous"; + script2.src = getReportDialogEndpoint(dsn, options4); + if (options4.onLoad) { + script2.onload = options4.onLoad; + } + const { onClose } = options4; + if (onClose) { + const reportDialogClosedMessageHandler = /* @__PURE__ */ __name((event) => { + if (event.data === "__sentry_reportdialog_closed__") { + try { + onClose(); + } finally { + WINDOW$5.removeEventListener("message", reportDialogClosedMessageHandler); + } + } + }, "reportDialogClosedMessageHandler"); + WINDOW$5.addEventListener("message", reportDialogClosedMessageHandler); + } + const injectionPoint = WINDOW$5.document.head || WINDOW$5.document.body; + if (injectionPoint) { + injectionPoint.appendChild(script2); + } else { + DEBUG_BUILD$4 && logger$2.error("Not injecting report dialog. No injection point found in HTML"); + } +} +__name(showReportDialog, "showReportDialog"); +function forceLoad() { +} +__name(forceLoad, "forceLoad"); +function onLoad(callback) { + callback(); +} +__name(onLoad, "onLoad"); +function captureUserFeedback(feedback) { + const client = getClient(); + if (client) { + client.captureUserFeedback(feedback); + } +} +__name(captureUserFeedback, "captureUserFeedback"); +const LazyLoadableIntegrations = { + replayIntegration: "replay", + replayCanvasIntegration: "replay-canvas", + feedbackIntegration: "feedback", + feedbackModalIntegration: "feedback-modal", + feedbackScreenshotIntegration: "feedback-screenshot", + captureConsoleIntegration: "captureconsole", + contextLinesIntegration: "contextlines", + linkedErrorsIntegration: "linkederrors", + debugIntegration: "debug", + dedupeIntegration: "dedupe", + extraErrorDataIntegration: "extraerrordata", + httpClientIntegration: "httpclient", + reportingObserverIntegration: "reportingobserver", + rewriteFramesIntegration: "rewriteframes", + sessionTimingIntegration: "sessiontiming", + browserProfilingIntegration: "browserprofiling", + moduleMetadataIntegration: "modulemetadata" +}; +const WindowWithMaybeIntegration = WINDOW$5; +async function lazyLoadIntegration(name2, scriptNonce) { + const bundle = LazyLoadableIntegrations[name2]; + const sentryOnWindow = WindowWithMaybeIntegration.Sentry = WindowWithMaybeIntegration.Sentry || {}; + if (!bundle) { + throw new Error(`Cannot lazy load integration: ${name2}`); + } + const existing = sentryOnWindow[name2]; + if (typeof existing === "function" && !("_isShim" in existing)) { + return existing; + } + const url = getScriptURL(bundle); + const script2 = WINDOW$5.document.createElement("script"); + script2.src = url; + script2.crossOrigin = "anonymous"; + script2.referrerPolicy = "origin"; + if (scriptNonce) { + script2.setAttribute("nonce", scriptNonce); + } + const waitForLoad = new Promise((resolve2, reject3) => { + script2.addEventListener("load", () => resolve2()); + script2.addEventListener("error", reject3); + }); + const currentScript = WINDOW$5.document.currentScript; + const parent = WINDOW$5.document.body || WINDOW$5.document.head || currentScript && currentScript.parentElement; + if (parent) { + parent.appendChild(script2); + } else { + throw new Error(`Could not find parent element to insert lazy-loaded ${name2} script`); + } + try { + await waitForLoad; + } catch (e2) { + throw new Error(`Error when loading integration: ${name2}`); + } + const integrationFn = sentryOnWindow[name2]; + if (typeof integrationFn !== "function") { + throw new Error(`Could not load integration: ${name2}`); + } + return integrationFn; +} +__name(lazyLoadIntegration, "lazyLoadIntegration"); +function getScriptURL(bundle) { + const client = getClient(); + const options4 = client && client.getOptions(); + const baseURL = options4 && options4.cdnBaseUrl || "https://browser.sentry-cdn.com"; + return new URL(`/${SDK_VERSION}/${bundle}.min.js`, baseURL).toString(); +} +__name(getScriptURL, "getScriptURL"); +const WINDOW$3 = GLOBAL_OBJ; +const INTEGRATION_NAME$6 = "ReportingObserver"; +const SETUP_CLIENTS = /* @__PURE__ */ new WeakMap(); +const _reportingObserverIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const types = options4.types || ["crash", "deprecation", "intervention"]; + function handler12(reports) { + if (!SETUP_CLIENTS.has(getClient())) { + return; + } + for (const report of reports) { + withScope((scope) => { + scope.setExtra("url", report.url); + const label5 = `ReportingObserver [${report.type}]`; + let details = "No details available"; + if (report.body) { + const plainBody = {}; + for (const prop2 in report.body) { + plainBody[prop2] = report.body[prop2]; + } + scope.setExtra("body", plainBody); + if (report.type === "crash") { + const body = report.body; + details = [body.crashId || "", body.reason || ""].join(" ").trim() || details; + } else { + const body = report.body; + details = body.message || details; + } + } + captureMessage(`${label5}: ${details}`); + }); + } + } + __name(handler12, "handler"); + return { + name: INTEGRATION_NAME$6, + setupOnce() { + if (!supportsReportingObserver()) { + return; + } + const observer = new WINDOW$3.ReportingObserver( + handler12, + { + buffered: true, + types + } + ); + observer.observe(); + }, + setup(client) { + SETUP_CLIENTS.set(client, true); + } + }; +}, "_reportingObserverIntegration"); +const reportingObserverIntegration = defineIntegration(_reportingObserverIntegration); +const INTEGRATION_NAME$5 = "HttpClient"; +const _httpClientIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const _options = { + failedRequestStatusCodes: [[500, 599]], + failedRequestTargets: [/.*/], + ...options4 + }; + return { + name: INTEGRATION_NAME$5, + setup(client) { + _wrapFetch(client, _options); + _wrapXHR(client, _options); + } + }; +}, "_httpClientIntegration"); +const httpClientIntegration = defineIntegration(_httpClientIntegration); +function _fetchResponseHandler(options4, requestInfo, response, requestInit, error2) { + if (_shouldCaptureResponse(options4, response.status, response.url)) { + const request = _getRequest(requestInfo, requestInit); + let requestHeaders, responseHeaders, requestCookies, responseCookies; + if (_shouldSendDefaultPii()) { + [requestHeaders, requestCookies] = _parseCookieHeaders("Cookie", request); + [responseHeaders, responseCookies] = _parseCookieHeaders("Set-Cookie", response); + } + const event = _createEvent({ + url: request.url, + method: request.method, + status: response.status, + requestHeaders, + responseHeaders, + requestCookies, + responseCookies, + error: error2 + }); + captureEvent(event); + } +} +__name(_fetchResponseHandler, "_fetchResponseHandler"); +function _parseCookieHeaders(cookieHeader, obj) { + const headers = _extractFetchHeaders(obj.headers); + let cookies2; + try { + const cookieString = headers[cookieHeader] || headers[cookieHeader.toLowerCase()] || void 0; + if (cookieString) { + cookies2 = _parseCookieString(cookieString); + } + } catch (e2) { + } + return [headers, cookies2]; +} +__name(_parseCookieHeaders, "_parseCookieHeaders"); +function _xhrResponseHandler(options4, xhr, method, headers, error2) { + if (_shouldCaptureResponse(options4, xhr.status, xhr.responseURL)) { + let requestHeaders, responseCookies, responseHeaders; + if (_shouldSendDefaultPii()) { + try { + const cookieString = xhr.getResponseHeader("Set-Cookie") || xhr.getResponseHeader("set-cookie") || void 0; + if (cookieString) { + responseCookies = _parseCookieString(cookieString); + } + } catch (e3) { + } + try { + responseHeaders = _getXHRResponseHeaders(xhr); + } catch (e4) { + } + requestHeaders = headers; + } + const event = _createEvent({ + url: xhr.responseURL, + method, + status: xhr.status, + requestHeaders, + // Can't access request cookies from XHR + responseHeaders, + responseCookies, + error: error2 + }); + captureEvent(event); + } +} +__name(_xhrResponseHandler, "_xhrResponseHandler"); +function _getResponseSizeFromHeaders(headers) { + if (headers) { + const contentLength = headers["Content-Length"] || headers["content-length"]; + if (contentLength) { + return parseInt(contentLength, 10); + } + } + return void 0; +} +__name(_getResponseSizeFromHeaders, "_getResponseSizeFromHeaders"); +function _parseCookieString(cookieString) { + return cookieString.split("; ").reduce((acc, cookie) => { + const [key, value4] = cookie.split("="); + if (key && value4) { + acc[key] = value4; + } + return acc; + }, {}); +} +__name(_parseCookieString, "_parseCookieString"); +function _extractFetchHeaders(headers) { + const result = {}; + headers.forEach((value4, key) => { + result[key] = value4; + }); + return result; +} +__name(_extractFetchHeaders, "_extractFetchHeaders"); +function _getXHRResponseHeaders(xhr) { + const headers = xhr.getAllResponseHeaders(); + if (!headers) { + return {}; + } + return headers.split("\r\n").reduce((acc, line) => { + const [key, value4] = line.split(": "); + if (key && value4) { + acc[key] = value4; + } + return acc; + }, {}); +} +__name(_getXHRResponseHeaders, "_getXHRResponseHeaders"); +function _isInGivenRequestTargets(failedRequestTargets, target2) { + return failedRequestTargets.some((givenRequestTarget) => { + if (typeof givenRequestTarget === "string") { + return target2.includes(givenRequestTarget); + } + return givenRequestTarget.test(target2); + }); +} +__name(_isInGivenRequestTargets, "_isInGivenRequestTargets"); +function _isInGivenStatusRanges(failedRequestStatusCodes, status) { + return failedRequestStatusCodes.some((range2) => { + if (typeof range2 === "number") { + return range2 === status; + } + return status >= range2[0] && status <= range2[1]; + }); +} +__name(_isInGivenStatusRanges, "_isInGivenStatusRanges"); +function _wrapFetch(client, options4) { + if (!supportsNativeFetch()) { + return; + } + addFetchInstrumentationHandler((handlerData) => { + if (getClient() !== client) { + return; + } + const { response, args, error: error2, virtualError } = handlerData; + const [requestInfo, requestInit] = args; + if (!response) { + return; + } + _fetchResponseHandler(options4, requestInfo, response, requestInit, error2 || virtualError); + }, false); +} +__name(_wrapFetch, "_wrapFetch"); +function _wrapXHR(client, options4) { + if (!("XMLHttpRequest" in GLOBAL_OBJ)) { + return; + } + addXhrInstrumentationHandler((handlerData) => { + if (getClient() !== client) { + return; + } + const { error: error2, virtualError } = handlerData; + const xhr = handlerData.xhr; + const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY]; + if (!sentryXhrData) { + return; + } + const { method, request_headers: headers } = sentryXhrData; + try { + _xhrResponseHandler(options4, xhr, method, headers, error2 || virtualError); + } catch (e2) { + DEBUG_BUILD$4 && logger$2.warn("Error while extracting response event form XHR response", e2); + } + }); +} +__name(_wrapXHR, "_wrapXHR"); +function _shouldCaptureResponse(options4, status, url) { + return _isInGivenStatusRanges(options4.failedRequestStatusCodes, status) && _isInGivenRequestTargets(options4.failedRequestTargets, url) && !isSentryRequestUrl(url, getClient()); +} +__name(_shouldCaptureResponse, "_shouldCaptureResponse"); +function _createEvent(data26) { + const client = getClient(); + const virtualStackTrace = client && data26.error && data26.error instanceof Error ? data26.error.stack : void 0; + const stack2 = virtualStackTrace && client ? client.getOptions().stackParser(virtualStackTrace, 0, 1) : void 0; + const message3 = `HTTP Client Error with status code: ${data26.status}`; + const event = { + message: message3, + exception: { + values: [ + { + type: "Error", + value: message3, + stacktrace: stack2 ? { frames: stack2 } : void 0 + } + ] + }, + request: { + url: data26.url, + method: data26.method, + headers: data26.requestHeaders, + cookies: data26.requestCookies + }, + contexts: { + response: { + status_code: data26.status, + headers: data26.responseHeaders, + cookies: data26.responseCookies, + body_size: _getResponseSizeFromHeaders(data26.responseHeaders) + } + } + }; + addExceptionMechanism(event, { + type: "http.client", + handled: false + }); + return event; +} +__name(_createEvent, "_createEvent"); +function _getRequest(requestInfo, requestInit) { + if (!requestInit && requestInfo instanceof Request) { + return requestInfo; + } + if (requestInfo instanceof Request && requestInfo.bodyUsed) { + return requestInfo; + } + return new Request(requestInfo, requestInit); +} +__name(_getRequest, "_getRequest"); +function _shouldSendDefaultPii() { + const client = getClient(); + return client ? Boolean(client.getOptions().sendDefaultPii) : false; +} +__name(_shouldSendDefaultPii, "_shouldSendDefaultPii"); +const WINDOW$2 = GLOBAL_OBJ; +const DEFAULT_LINES_OF_CONTEXT = 7; +const INTEGRATION_NAME$4 = "ContextLines"; +const _contextLinesIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const contextLines = options4.frameContextLines != null ? options4.frameContextLines : DEFAULT_LINES_OF_CONTEXT; + return { + name: INTEGRATION_NAME$4, + processEvent(event) { + return addSourceContext(event, contextLines); + } + }; +}, "_contextLinesIntegration"); +const contextLinesIntegration = defineIntegration(_contextLinesIntegration); +function addSourceContext(event, contextLines) { + const doc2 = WINDOW$2.document; + const htmlFilename = WINDOW$2.location && stripUrlQueryAndFragment(WINDOW$2.location.href); + if (!doc2 || !htmlFilename) { + return event; + } + const exceptions = event.exception && event.exception.values; + if (!exceptions || !exceptions.length) { + return event; + } + const html = doc2.documentElement.innerHTML; + if (!html) { + return event; + } + const htmlLines = ["", "", ...html.split("\n"), ""]; + exceptions.forEach((exception) => { + const stacktrace = exception.stacktrace; + if (stacktrace && stacktrace.frames) { + stacktrace.frames = stacktrace.frames.map( + (frame) => applySourceContextToFrame(frame, htmlLines, htmlFilename, contextLines) + ); + } + }); + return event; +} +__name(addSourceContext, "addSourceContext"); +function applySourceContextToFrame(frame, htmlLines, htmlFilename, linesOfContext) { + if (frame.filename !== htmlFilename || !frame.lineno || !htmlLines.length) { + return frame; + } + addContextToFrame(htmlLines, frame, linesOfContext); + return frame; +} +__name(applySourceContextToFrame, "applySourceContextToFrame"); +const WINDOW$1 = GLOBAL_OBJ; +const REPLAY_SESSION_KEY = "sentryReplaySession"; +const REPLAY_EVENT_NAME = "replay_event"; +const UNABLE_TO_SEND_REPLAY = "Unable to send Replay"; +const SESSION_IDLE_PAUSE_DURATION = 3e5; +const SESSION_IDLE_EXPIRE_DURATION = 9e5; +const DEFAULT_FLUSH_MIN_DELAY = 5e3; +const DEFAULT_FLUSH_MAX_DELAY = 5500; +const BUFFER_CHECKOUT_TIME = 6e4; +const RETRY_BASE_INTERVAL = 5e3; +const RETRY_MAX_COUNT = 3; +const NETWORK_BODY_MAX_SIZE = 15e4; +const CONSOLE_ARG_MAX_SIZE = 5e3; +const SLOW_CLICK_THRESHOLD = 3e3; +const SLOW_CLICK_SCROLL_TIMEOUT = 300; +const REPLAY_MAX_EVENT_BUFFER_SIZE = 2e7; +const MIN_REPLAY_DURATION = 4999; +const MIN_REPLAY_DURATION_LIMIT = 15e3; +const MAX_REPLAY_DURATION = 36e5; +function _nullishCoalesce$1(lhs, rhsFn) { + if (lhs != null) { + return lhs; + } else { + return rhsFn(); + } +} +__name(_nullishCoalesce$1, "_nullishCoalesce$1"); +function _optionalChain$5(ops) { + let lastAccessLHS = void 0; + let value4 = ops[0]; + let i2 = 1; + while (i2 < ops.length) { + const op = ops[i2]; + const fn = ops[i2 + 1]; + i2 += 2; + if ((op === "optionalAccess" || op === "optionalCall") && value4 == null) { + return void 0; + } + if (op === "access" || op === "optionalAccess") { + lastAccessLHS = value4; + value4 = fn(value4); + } else if (op === "call" || op === "optionalCall") { + value4 = fn((...args) => value4.call(lastAccessLHS, ...args)); + lastAccessLHS = void 0; + } + } + return value4; +} +__name(_optionalChain$5, "_optionalChain$5"); +var NodeType$3; +(function(NodeType3) { + NodeType3[NodeType3["Document"] = 0] = "Document"; + NodeType3[NodeType3["DocumentType"] = 1] = "DocumentType"; + NodeType3[NodeType3["Element"] = 2] = "Element"; + NodeType3[NodeType3["Text"] = 3] = "Text"; + NodeType3[NodeType3["CDATA"] = 4] = "CDATA"; + NodeType3[NodeType3["Comment"] = 5] = "Comment"; +})(NodeType$3 || (NodeType$3 = {})); +function isElement$1$1(n2) { + return n2.nodeType === n2.ELEMENT_NODE; +} +__name(isElement$1$1, "isElement$1$1"); +function isShadowRoot(n2) { + const host = _optionalChain$5([n2, "optionalAccess", (_2) => _2.host]); + return Boolean(_optionalChain$5([host, "optionalAccess", (_2) => _2.shadowRoot]) === n2); +} +__name(isShadowRoot, "isShadowRoot"); +function isNativeShadowDom(shadowRoot) { + return Object.prototype.toString.call(shadowRoot) === "[object ShadowRoot]"; +} +__name(isNativeShadowDom, "isNativeShadowDom"); +function fixBrowserCompatibilityIssuesInCSS(cssText) { + if (cssText.includes(" background-clip: text;") && !cssText.includes(" -webkit-background-clip: text;")) { + cssText = cssText.replace(/\sbackground-clip:\s*text;/g, " -webkit-background-clip: text; background-clip: text;"); + } + return cssText; +} +__name(fixBrowserCompatibilityIssuesInCSS, "fixBrowserCompatibilityIssuesInCSS"); +function escapeImportStatement(rule) { + const { cssText } = rule; + if (cssText.split('"').length < 3) + return cssText; + const statement = ["@import", `url(${JSON.stringify(rule.href)})`]; + if (rule.layerName === "") { + statement.push(`layer`); + } else if (rule.layerName) { + statement.push(`layer(${rule.layerName})`); + } + if (rule.supportsText) { + statement.push(`supports(${rule.supportsText})`); + } + if (rule.media.length) { + statement.push(rule.media.mediaText); + } + return statement.join(" ") + ";"; +} +__name(escapeImportStatement, "escapeImportStatement"); +function stringifyStylesheet(s2) { + try { + const rules = s2.rules || s2.cssRules; + return rules ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join("")) : null; + } catch (error2) { + return null; + } +} +__name(stringifyStylesheet, "stringifyStylesheet"); +function fixAllCssProperty(rule) { + let styles = ""; + for (let i2 = 0; i2 < rule.style.length; i2++) { + const styleDeclaration = rule.style; + const attribute2 = styleDeclaration[i2]; + const isImportant = styleDeclaration.getPropertyPriority(attribute2); + styles += `${attribute2}:${styleDeclaration.getPropertyValue(attribute2)}${isImportant ? ` !important` : ""};`; + } + return `${rule.selectorText} { ${styles} }`; +} +__name(fixAllCssProperty, "fixAllCssProperty"); +function stringifyRule(rule) { + let importStringified; + if (isCSSImportRule(rule)) { + try { + importStringified = stringifyStylesheet(rule.styleSheet) || escapeImportStatement(rule); + } catch (error2) { + } + } else if (isCSSStyleRule(rule)) { + let cssText = rule.cssText; + const needsSafariColonFix = rule.selectorText.includes(":"); + const needsAllFix = typeof rule.style["all"] === "string" && rule.style["all"]; + if (needsAllFix) { + cssText = fixAllCssProperty(rule); + } + if (needsSafariColonFix) { + cssText = fixSafariColons(cssText); + } + if (needsSafariColonFix || needsAllFix) { + return cssText; + } + } + return importStringified || rule.cssText; +} +__name(stringifyRule, "stringifyRule"); +function fixSafariColons(cssStringified) { + const regex2 = /(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm; + return cssStringified.replace(regex2, "$1\\$2"); +} +__name(fixSafariColons, "fixSafariColons"); +function isCSSImportRule(rule) { + return "styleSheet" in rule; +} +__name(isCSSImportRule, "isCSSImportRule"); +function isCSSStyleRule(rule) { + return "selectorText" in rule; +} +__name(isCSSStyleRule, "isCSSStyleRule"); +class Mirror { + static { + __name(this, "Mirror"); + } + constructor() { + this.idNodeMap = /* @__PURE__ */ new Map(); + this.nodeMetaMap = /* @__PURE__ */ new WeakMap(); + } + getId(n2) { + if (!n2) + return -1; + const id3 = _optionalChain$5([this, "access", (_3) => _3.getMeta, "call", (_4) => _4(n2), "optionalAccess", (_5) => _5.id]); + return _nullishCoalesce$1(id3, () => -1); + } + getNode(id3) { + return this.idNodeMap.get(id3) || null; + } + getIds() { + return Array.from(this.idNodeMap.keys()); + } + getMeta(n2) { + return this.nodeMetaMap.get(n2) || null; + } + removeNodeFromMap(n2) { + const id3 = this.getId(n2); + this.idNodeMap.delete(id3); + if (n2.childNodes) { + n2.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode)); + } + } + has(id3) { + return this.idNodeMap.has(id3); + } + hasNode(node3) { + return this.nodeMetaMap.has(node3); + } + add(n2, meta) { + const id3 = meta.id; + this.idNodeMap.set(id3, n2); + this.nodeMetaMap.set(n2, meta); + } + replace(id3, n2) { + const oldNode = this.getNode(id3); + if (oldNode) { + const meta = this.nodeMetaMap.get(oldNode); + if (meta) + this.nodeMetaMap.set(n2, meta); + } + this.idNodeMap.set(id3, n2); + } + reset() { + this.idNodeMap = /* @__PURE__ */ new Map(); + this.nodeMetaMap = /* @__PURE__ */ new WeakMap(); + } +} +function createMirror() { + return new Mirror(); +} +__name(createMirror, "createMirror"); +function shouldMaskInput({ maskInputOptions, tagName, type }) { + if (tagName === "OPTION") { + tagName = "SELECT"; + } + return Boolean(maskInputOptions[tagName.toLowerCase()] || type && maskInputOptions[type] || type === "password" || tagName === "INPUT" && !type && maskInputOptions["text"]); +} +__name(shouldMaskInput, "shouldMaskInput"); +function maskInputValue({ isMasked: isMasked2, element, value: value4, maskInputFn }) { + let text2 = value4 || ""; + if (!isMasked2) { + return text2; + } + if (maskInputFn) { + text2 = maskInputFn(text2, element); + } + return "*".repeat(text2.length); +} +__name(maskInputValue, "maskInputValue"); +function toLowerCase(str) { + return str.toLowerCase(); +} +__name(toLowerCase, "toLowerCase"); +function toUpperCase(str) { + return str.toUpperCase(); +} +__name(toUpperCase, "toUpperCase"); +const ORIGINAL_ATTRIBUTE_NAME = "__rrweb_original__"; +function is2DCanvasBlank(canvas) { + const ctx = canvas.getContext("2d"); + if (!ctx) + return true; + const chunkSize = 50; + for (let x2 = 0; x2 < canvas.width; x2 += chunkSize) { + for (let y2 = 0; y2 < canvas.height; y2 += chunkSize) { + const getImageData = ctx.getImageData; + const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData; + const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x2, y2, Math.min(chunkSize, canvas.width - x2), Math.min(chunkSize, canvas.height - y2)).data.buffer); + if (pixelBuffer.some((pixel) => pixel !== 0)) + return false; + } + } + return true; +} +__name(is2DCanvasBlank, "is2DCanvasBlank"); +function getInputType(element) { + const type = element.type; + return element.hasAttribute("data-rr-is-password") ? "password" : type ? toLowerCase(type) : null; +} +__name(getInputType, "getInputType"); +function getInputValue(el, tagName, type) { + if (tagName === "INPUT" && (type === "radio" || type === "checkbox")) { + return el.getAttribute("value") || ""; + } + return el.value; +} +__name(getInputValue, "getInputValue"); +function extractFileExtension(path, baseURL) { + let url; + try { + url = new URL(path, _nullishCoalesce$1(baseURL, () => window.location.href)); + } catch (err) { + return null; + } + const regex2 = /\.([0-9a-z]+)(?:$)/i; + const match2 = url.pathname.match(regex2); + return _nullishCoalesce$1(_optionalChain$5([match2, "optionalAccess", (_6) => _6[1]]), () => null); +} +__name(extractFileExtension, "extractFileExtension"); +const cachedImplementations$1 = {}; +function getImplementation$1(name2) { + const cached = cachedImplementations$1[name2]; + if (cached) { + return cached; + } + const document2 = window.document; + let impl = window[name2]; + if (document2 && typeof document2.createElement === "function") { + try { + const sandbox = document2.createElement("iframe"); + sandbox.hidden = true; + document2.head.appendChild(sandbox); + const contentWindow = sandbox.contentWindow; + if (contentWindow && contentWindow[name2]) { + impl = contentWindow[name2]; + } + document2.head.removeChild(sandbox); + } catch (e2) { + } + } + return cachedImplementations$1[name2] = impl.bind(window); +} +__name(getImplementation$1, "getImplementation$1"); +function setTimeout$2(...rest) { + return getImplementation$1("setTimeout")(...rest); +} +__name(setTimeout$2, "setTimeout$2"); +function clearTimeout$2(...rest) { + return getImplementation$1("clearTimeout")(...rest); +} +__name(clearTimeout$2, "clearTimeout$2"); +function getIframeContentDocument(iframe) { + try { + return iframe.contentDocument; + } catch (e2) { + } +} +__name(getIframeContentDocument, "getIframeContentDocument"); +let _id$3 = 1; +const tagNameRegex = new RegExp("[^a-z0-9-_:]"); +const IGNORED_NODE = -2; +function genId() { + return _id$3++; +} +__name(genId, "genId"); +function getValidTagName(element) { + if (element instanceof HTMLFormElement) { + return "form"; + } + const processedTagName = toLowerCase(element.tagName); + if (tagNameRegex.test(processedTagName)) { + return "div"; + } + return processedTagName; +} +__name(getValidTagName, "getValidTagName"); +function extractOrigin(url) { + let origin2 = ""; + if (url.indexOf("//") > -1) { + origin2 = url.split("/").slice(0, 3).join("/"); + } else { + origin2 = url.split("/")[0]; + } + origin2 = origin2.split("?")[0]; + return origin2; +} +__name(extractOrigin, "extractOrigin"); +let canvasService; +let canvasCtx; +const URL_IN_CSS_REF = /url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm; +const URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\/\//i; +const URL_WWW_MATCH = /^www\..*/i; +const DATA_URI = /^(data:)([^,]*),(.*)/i; +function absoluteToStylesheet(cssText, href) { + return (cssText || "").replace(URL_IN_CSS_REF, (origin2, quote1, path1, quote2, path2, path3) => { + const filePath = path1 || path2 || path3; + const maybeQuote = quote1 || quote2 || ""; + if (!filePath) { + return origin2; + } + if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) { + return `url(${maybeQuote}${filePath}${maybeQuote})`; + } + if (DATA_URI.test(filePath)) { + return `url(${maybeQuote}${filePath}${maybeQuote})`; + } + if (filePath[0] === "/") { + return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`; + } + const stack2 = href.split("/"); + const parts2 = filePath.split("/"); + stack2.pop(); + for (const part of parts2) { + if (part === ".") { + continue; + } else if (part === "..") { + stack2.pop(); + } else { + stack2.push(part); + } + } + return `url(${maybeQuote}${stack2.join("/")}${maybeQuote})`; + }); +} +__name(absoluteToStylesheet, "absoluteToStylesheet"); +const SRCSET_NOT_SPACES = /^[^ \t\n\r\u000c]+/; +const SRCSET_COMMAS_OR_SPACES = /^[, \t\n\r\u000c]+/; +function getAbsoluteSrcsetString(doc2, attributeValue) { + if (attributeValue.trim() === "") { + return attributeValue; + } + let pos2 = 0; + function collectCharacters(regEx) { + let chars2; + const match2 = regEx.exec(attributeValue.substring(pos2)); + if (match2) { + chars2 = match2[0]; + pos2 += chars2.length; + return chars2; + } + return ""; + } + __name(collectCharacters, "collectCharacters"); + const output = []; + while (true) { + collectCharacters(SRCSET_COMMAS_OR_SPACES); + if (pos2 >= attributeValue.length) { + break; + } + let url = collectCharacters(SRCSET_NOT_SPACES); + if (url.slice(-1) === ",") { + url = absoluteToDoc(doc2, url.substring(0, url.length - 1)); + output.push(url); + } else { + let descriptorsStr = ""; + url = absoluteToDoc(doc2, url); + let inParens = false; + while (true) { + const c2 = attributeValue.charAt(pos2); + if (c2 === "") { + output.push((url + descriptorsStr).trim()); + break; + } else if (!inParens) { + if (c2 === ",") { + pos2 += 1; + output.push((url + descriptorsStr).trim()); + break; + } else if (c2 === "(") { + inParens = true; + } + } else { + if (c2 === ")") { + inParens = false; + } + } + descriptorsStr += c2; + pos2 += 1; + } + } + } + return output.join(", "); +} +__name(getAbsoluteSrcsetString, "getAbsoluteSrcsetString"); +const cachedDocument = /* @__PURE__ */ new WeakMap(); +function absoluteToDoc(doc2, attributeValue) { + if (!attributeValue || attributeValue.trim() === "") { + return attributeValue; + } + return getHref(doc2, attributeValue); +} +__name(absoluteToDoc, "absoluteToDoc"); +function isSVGElement(el) { + return Boolean(el.tagName === "svg" || el.ownerSVGElement); +} +__name(isSVGElement, "isSVGElement"); +function getHref(doc2, customHref) { + let a2 = cachedDocument.get(doc2); + if (!a2) { + a2 = doc2.createElement("a"); + cachedDocument.set(doc2, a2); + } + if (!customHref) { + customHref = ""; + } else if (customHref.startsWith("blob:") || customHref.startsWith("data:")) { + return customHref; + } + a2.setAttribute("href", customHref); + return a2.href; +} +__name(getHref, "getHref"); +function transformAttribute(doc2, tagName, name2, value4, element, maskAttributeFn) { + if (!value4) { + return value4; + } + if (name2 === "src" || name2 === "href" && !(tagName === "use" && value4[0] === "#")) { + return absoluteToDoc(doc2, value4); + } else if (name2 === "xlink:href" && value4[0] !== "#") { + return absoluteToDoc(doc2, value4); + } else if (name2 === "background" && (tagName === "table" || tagName === "td" || tagName === "th")) { + return absoluteToDoc(doc2, value4); + } else if (name2 === "srcset") { + return getAbsoluteSrcsetString(doc2, value4); + } else if (name2 === "style") { + return absoluteToStylesheet(value4, getHref(doc2)); + } else if (tagName === "object" && name2 === "data") { + return absoluteToDoc(doc2, value4); + } + if (typeof maskAttributeFn === "function") { + return maskAttributeFn(name2, value4, element); + } + return value4; +} +__name(transformAttribute, "transformAttribute"); +function ignoreAttribute(tagName, name2, _value) { + return (tagName === "video" || tagName === "audio") && name2 === "autoplay"; +} +__name(ignoreAttribute, "ignoreAttribute"); +function _isBlockedElement(element, blockClass, blockSelector, unblockSelector) { + try { + if (unblockSelector && element.matches(unblockSelector)) { + return false; + } + if (typeof blockClass === "string") { + if (element.classList.contains(blockClass)) { + return true; + } + } else { + for (let eIndex = element.classList.length; eIndex--; ) { + const className = element.classList[eIndex]; + if (blockClass.test(className)) { + return true; + } + } + } + if (blockSelector) { + return element.matches(blockSelector); + } + } catch (e2) { + } + return false; +} +__name(_isBlockedElement, "_isBlockedElement"); +function elementClassMatchesRegex$1(el, regex2) { + for (let eIndex = el.classList.length; eIndex--; ) { + const className = el.classList[eIndex]; + if (regex2.test(className)) { + return true; + } + } + return false; +} +__name(elementClassMatchesRegex$1, "elementClassMatchesRegex$1"); +function distanceToMatch$1(node3, matchPredicate, limit = Infinity, distance2 = 0) { + if (!node3) + return -1; + if (node3.nodeType !== node3.ELEMENT_NODE) + return -1; + if (distance2 > limit) + return -1; + if (matchPredicate(node3)) + return distance2; + return distanceToMatch$1(node3.parentNode, matchPredicate, limit, distance2 + 1); +} +__name(distanceToMatch$1, "distanceToMatch$1"); +function createMatchPredicate$1(className, selector) { + return (node3) => { + const el = node3; + if (el === null) + return false; + try { + if (className) { + if (typeof className === "string") { + if (el.matches(`.${className}`)) + return true; + } else if (elementClassMatchesRegex$1(el, className)) { + return true; + } + } + if (selector && el.matches(selector)) + return true; + return false; + } catch (e2) { + return false; + } + }; +} +__name(createMatchPredicate$1, "createMatchPredicate$1"); +function needMaskingText(node3, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) { + try { + const el = node3.nodeType === node3.ELEMENT_NODE ? node3 : node3.parentElement; + if (el === null) + return false; + if (el.tagName === "INPUT") { + const autocomplete = el.getAttribute("autocomplete"); + const disallowedAutocompleteValues = [ + "current-password", + "new-password", + "cc-number", + "cc-exp", + "cc-exp-month", + "cc-exp-year", + "cc-csc" + ]; + if (disallowedAutocompleteValues.includes(autocomplete)) { + return true; + } + } + let maskDistance = -1; + let unmaskDistance = -1; + if (maskAllText) { + unmaskDistance = distanceToMatch$1(el, createMatchPredicate$1(unmaskTextClass, unmaskTextSelector)); + if (unmaskDistance < 0) { + return true; + } + maskDistance = distanceToMatch$1(el, createMatchPredicate$1(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity); + } else { + maskDistance = distanceToMatch$1(el, createMatchPredicate$1(maskTextClass, maskTextSelector)); + if (maskDistance < 0) { + return false; + } + unmaskDistance = distanceToMatch$1(el, createMatchPredicate$1(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity); + } + return maskDistance >= 0 ? unmaskDistance >= 0 ? maskDistance <= unmaskDistance : true : unmaskDistance >= 0 ? false : !!maskAllText; + } catch (e2) { + } + return !!maskAllText; +} +__name(needMaskingText, "needMaskingText"); +function onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) { + const win = iframeEl.contentWindow; + if (!win) { + return; + } + let fired = false; + let readyState; + try { + readyState = win.document.readyState; + } catch (error2) { + return; + } + if (readyState !== "complete") { + const timer = setTimeout$2(() => { + if (!fired) { + listener(); + fired = true; + } + }, iframeLoadTimeout); + iframeEl.addEventListener("load", () => { + clearTimeout$2(timer); + fired = true; + listener(); + }); + return; + } + const blankUrl = "about:blank"; + if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === "") { + setTimeout$2(listener, 0); + return iframeEl.addEventListener("load", listener); + } + iframeEl.addEventListener("load", listener); +} +__name(onceIframeLoaded, "onceIframeLoaded"); +function onceStylesheetLoaded(link2, listener, styleSheetLoadTimeout) { + let fired = false; + let styleSheetLoaded; + try { + styleSheetLoaded = link2.sheet; + } catch (error2) { + return; + } + if (styleSheetLoaded) + return; + const timer = setTimeout$2(() => { + if (!fired) { + listener(); + fired = true; + } + }, styleSheetLoadTimeout); + link2.addEventListener("load", () => { + clearTimeout$2(timer); + fired = true; + listener(); + }); +} +__name(onceStylesheetLoaded, "onceStylesheetLoaded"); +function serializeNode(n2, options4) { + const { doc: doc2, mirror: mirror2, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false } = options4; + const rootId = getRootId(doc2, mirror2); + switch (n2.nodeType) { + case n2.DOCUMENT_NODE: + if (n2.compatMode !== "CSS1Compat") { + return { + type: NodeType$3.Document, + childNodes: [], + compatMode: n2.compatMode + }; + } else { + return { + type: NodeType$3.Document, + childNodes: [] + }; + } + case n2.DOCUMENT_TYPE_NODE: + return { + type: NodeType$3.DocumentType, + name: n2.name, + publicId: n2.publicId, + systemId: n2.systemId, + rootId + }; + case n2.ELEMENT_NODE: + return serializeElementNode(n2, { + doc: doc2, + blockClass, + blockSelector, + unblockSelector, + inlineStylesheet, + maskAttributeFn, + maskInputOptions, + maskInputFn, + dataURLOptions, + inlineImages, + recordCanvas, + keepIframeSrcFn, + newlyAddedElement, + rootId, + maskAllText, + maskTextClass, + unmaskTextClass, + maskTextSelector, + unmaskTextSelector + }); + case n2.TEXT_NODE: + return serializeTextNode(n2, { + doc: doc2, + maskAllText, + maskTextClass, + unmaskTextClass, + maskTextSelector, + unmaskTextSelector, + maskTextFn, + maskInputOptions, + maskInputFn, + rootId + }); + case n2.CDATA_SECTION_NODE: + return { + type: NodeType$3.CDATA, + textContent: "", + rootId + }; + case n2.COMMENT_NODE: + return { + type: NodeType$3.Comment, + textContent: n2.textContent || "", + rootId + }; + default: + return false; + } +} +__name(serializeNode, "serializeNode"); +function getRootId(doc2, mirror2) { + if (!mirror2.hasNode(doc2)) + return void 0; + const docId = mirror2.getId(doc2); + return docId === 1 ? void 0 : docId; +} +__name(getRootId, "getRootId"); +function serializeTextNode(n2, options4) { + const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId } = options4; + const parentTagName = n2.parentNode && n2.parentNode.tagName; + let textContent = n2.textContent; + const isStyle = parentTagName === "STYLE" ? true : void 0; + const isScript = parentTagName === "SCRIPT" ? true : void 0; + const isTextarea = parentTagName === "TEXTAREA" ? true : void 0; + if (isStyle && textContent) { + try { + if (n2.nextSibling || n2.previousSibling) { + } else if (_optionalChain$5([n2, "access", (_7) => _7.parentNode, "access", (_8) => _8.sheet, "optionalAccess", (_9) => _9.cssRules])) { + textContent = stringifyStylesheet(n2.parentNode.sheet); + } + } catch (err) { + console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n2); + } + textContent = absoluteToStylesheet(textContent, getHref(options4.doc)); + } + if (isScript) { + textContent = "SCRIPT_PLACEHOLDER"; + } + const forceMask = needMaskingText(n2, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText); + if (!isStyle && !isScript && !isTextarea && textContent && forceMask) { + textContent = maskTextFn ? maskTextFn(textContent, n2.parentElement) : textContent.replace(/[\S]/g, "*"); + } + if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) { + textContent = maskInputFn ? maskInputFn(textContent, n2.parentNode) : textContent.replace(/[\S]/g, "*"); + } + if (parentTagName === "OPTION" && textContent) { + const isInputMasked = shouldMaskInput({ + type: null, + tagName: parentTagName, + maskInputOptions + }); + textContent = maskInputValue({ + isMasked: needMaskingText(n2, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked), + element: n2, + value: textContent, + maskInputFn + }); + } + return { + type: NodeType$3.Text, + textContent: textContent || "", + isStyle, + rootId + }; +} +__name(serializeTextNode, "serializeTextNode"); +function serializeElementNode(n2, options4) { + const { doc: doc2, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector } = options4; + const needBlock = _isBlockedElement(n2, blockClass, blockSelector, unblockSelector); + const tagName = getValidTagName(n2); + let attributes = {}; + const len = n2.attributes.length; + for (let i2 = 0; i2 < len; i2++) { + const attr = n2.attributes[i2]; + if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) { + attributes[attr.name] = transformAttribute(doc2, tagName, toLowerCase(attr.name), attr.value, n2, maskAttributeFn); + } + } + if (tagName === "link" && inlineStylesheet) { + const stylesheet = Array.from(doc2.styleSheets).find((s2) => { + return s2.href === n2.href; + }); + let cssText = null; + if (stylesheet) { + cssText = stringifyStylesheet(stylesheet); + } + if (cssText) { + attributes.rel = null; + attributes.href = null; + attributes.crossorigin = null; + attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href); + } + } + if (tagName === "style" && n2.sheet && !(n2.innerText || n2.textContent || "").trim().length) { + const cssText = stringifyStylesheet(n2.sheet); + if (cssText) { + attributes._cssText = absoluteToStylesheet(cssText, getHref(doc2)); + } + } + if (tagName === "input" || tagName === "textarea" || tagName === "select" || tagName === "option") { + const el = n2; + const type = getInputType(el); + const value4 = getInputValue(el, toUpperCase(tagName), type); + const checked4 = el.checked; + if (type !== "submit" && type !== "button" && value4) { + const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({ + type, + tagName: toUpperCase(tagName), + maskInputOptions + })); + attributes.value = maskInputValue({ + isMasked: forceMask, + element: el, + value: value4, + maskInputFn + }); + } + if (checked4) { + attributes.checked = checked4; + } + } + if (tagName === "option") { + if (n2.selected && !maskInputOptions["select"]) { + attributes.selected = true; + } else { + delete attributes.selected; + } + } + if (tagName === "canvas" && recordCanvas) { + if (n2.__context === "2d") { + if (!is2DCanvasBlank(n2)) { + attributes.rr_dataURL = n2.toDataURL(dataURLOptions.type, dataURLOptions.quality); + } + } else if (!("__context" in n2)) { + const canvasDataURL = n2.toDataURL(dataURLOptions.type, dataURLOptions.quality); + const blankCanvas = doc2.createElement("canvas"); + blankCanvas.width = n2.width; + blankCanvas.height = n2.height; + const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality); + if (canvasDataURL !== blankCanvasDataURL) { + attributes.rr_dataURL = canvasDataURL; + } + } + } + if (tagName === "img" && inlineImages) { + if (!canvasService) { + canvasService = doc2.createElement("canvas"); + canvasCtx = canvasService.getContext("2d"); + } + const image2 = n2; + const imageSrc = image2.currentSrc || image2.getAttribute("src") || ""; + const priorCrossOrigin = image2.crossOrigin; + const recordInlineImage = /* @__PURE__ */ __name(() => { + image2.removeEventListener("load", recordInlineImage); + try { + canvasService.width = image2.naturalWidth; + canvasService.height = image2.naturalHeight; + canvasCtx.drawImage(image2, 0, 0); + attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality); + } catch (err) { + if (image2.crossOrigin !== "anonymous") { + image2.crossOrigin = "anonymous"; + if (image2.complete && image2.naturalWidth !== 0) + recordInlineImage(); + else + image2.addEventListener("load", recordInlineImage); + return; + } else { + console.warn(`Cannot inline img src=${imageSrc}! Error: ${err}`); + } + } + if (image2.crossOrigin === "anonymous") { + priorCrossOrigin ? attributes.crossOrigin = priorCrossOrigin : image2.removeAttribute("crossorigin"); + } + }, "recordInlineImage"); + if (image2.complete && image2.naturalWidth !== 0) + recordInlineImage(); + else + image2.addEventListener("load", recordInlineImage); + } + if (tagName === "audio" || tagName === "video") { + attributes.rr_mediaState = n2.paused ? "paused" : "played"; + attributes.rr_mediaCurrentTime = n2.currentTime; + } + if (!newlyAddedElement) { + if (n2.scrollLeft) { + attributes.rr_scrollLeft = n2.scrollLeft; + } + if (n2.scrollTop) { + attributes.rr_scrollTop = n2.scrollTop; + } + } + if (needBlock) { + const { width: width2, height } = n2.getBoundingClientRect(); + attributes = { + class: attributes.class, + rr_width: `${width2}px`, + rr_height: `${height}px` + }; + } + if (tagName === "iframe" && !keepIframeSrcFn(attributes.src)) { + if (!needBlock && !getIframeContentDocument(n2)) { + attributes.rr_src = attributes.src; + } + delete attributes.src; + } + let isCustomElement; + try { + if (customElements.get(tagName)) + isCustomElement = true; + } catch (e2) { + } + return { + type: NodeType$3.Element, + tagName, + attributes, + childNodes: [], + isSVG: isSVGElement(n2) || void 0, + needBlock, + rootId, + isCustom: isCustomElement + }; +} +__name(serializeElementNode, "serializeElementNode"); +function lowerIfExists(maybeAttr) { + if (maybeAttr === void 0 || maybeAttr === null) { + return ""; + } else { + return maybeAttr.toLowerCase(); + } +} +__name(lowerIfExists, "lowerIfExists"); +function slimDOMExcluded(sn, slimDOMOptions) { + if (slimDOMOptions.comment && sn.type === NodeType$3.Comment) { + return true; + } else if (sn.type === NodeType$3.Element) { + if (slimDOMOptions.script && (sn.tagName === "script" || sn.tagName === "link" && (sn.attributes.rel === "preload" || sn.attributes.rel === "modulepreload") || sn.tagName === "link" && sn.attributes.rel === "prefetch" && typeof sn.attributes.href === "string" && extractFileExtension(sn.attributes.href) === "js")) { + return true; + } else if (slimDOMOptions.headFavicon && (sn.tagName === "link" && sn.attributes.rel === "shortcut icon" || sn.tagName === "meta" && (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) || lowerIfExists(sn.attributes.name) === "application-name" || lowerIfExists(sn.attributes.rel) === "icon" || lowerIfExists(sn.attributes.rel) === "apple-touch-icon" || lowerIfExists(sn.attributes.rel) === "shortcut icon"))) { + return true; + } else if (sn.tagName === "meta") { + if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) { + return true; + } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === "pinterest")) { + return true; + } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === "robots" || lowerIfExists(sn.attributes.name) === "googlebot" || lowerIfExists(sn.attributes.name) === "bingbot")) { + return true; + } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes["http-equiv"] !== void 0) { + return true; + } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === "author" || lowerIfExists(sn.attributes.name) === "generator" || lowerIfExists(sn.attributes.name) === "framework" || lowerIfExists(sn.attributes.name) === "publisher" || lowerIfExists(sn.attributes.name) === "progid" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) { + return true; + } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === "google-site-verification" || lowerIfExists(sn.attributes.name) === "yandex-verification" || lowerIfExists(sn.attributes.name) === "csrf-token" || lowerIfExists(sn.attributes.name) === "p:domain_verify" || lowerIfExists(sn.attributes.name) === "verify-v1" || lowerIfExists(sn.attributes.name) === "verification" || lowerIfExists(sn.attributes.name) === "shopify-checkout-api-token")) { + return true; + } + } + } + return false; +} +__name(slimDOMExcluded, "slimDOMExcluded"); +function serializeNodeWithId(n2, options4) { + const { doc: doc2, mirror: mirror2, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5e3, onStylesheetLoad, stylesheetLoadTimeout = 5e3, keepIframeSrcFn = /* @__PURE__ */ __name(() => false, "keepIframeSrcFn"), newlyAddedElement = false } = options4; + let { preserveWhiteSpace = true } = options4; + const _serializedNode = serializeNode(n2, { + doc: doc2, + mirror: mirror2, + blockClass, + blockSelector, + maskAllText, + unblockSelector, + maskTextClass, + unmaskTextClass, + maskTextSelector, + unmaskTextSelector, + inlineStylesheet, + maskInputOptions, + maskAttributeFn, + maskTextFn, + maskInputFn, + dataURLOptions, + inlineImages, + recordCanvas, + keepIframeSrcFn, + newlyAddedElement + }); + if (!_serializedNode) { + console.warn(n2, "not serialized"); + return null; + } + let id3; + if (mirror2.hasNode(n2)) { + id3 = mirror2.getId(n2); + } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$3.Text && !_serializedNode.isStyle && !_serializedNode.textContent.replace(/^\s+|\s+$/gm, "").length) { + id3 = IGNORED_NODE; + } else { + id3 = genId(); + } + const serializedNode = Object.assign(_serializedNode, { id: id3 }); + mirror2.add(n2, serializedNode); + if (id3 === IGNORED_NODE) { + return null; + } + if (onSerialize) { + onSerialize(n2); + } + let recordChild = !skipChild; + if (serializedNode.type === NodeType$3.Element) { + recordChild = recordChild && !serializedNode.needBlock; + delete serializedNode.needBlock; + const shadowRoot = n2.shadowRoot; + if (shadowRoot && isNativeShadowDom(shadowRoot)) + serializedNode.isShadowHost = true; + } + if ((serializedNode.type === NodeType$3.Document || serializedNode.type === NodeType$3.Element) && recordChild) { + if (slimDOMOptions.headWhitespace && serializedNode.type === NodeType$3.Element && serializedNode.tagName === "head") { + preserveWhiteSpace = false; + } + const bypassOptions = { + doc: doc2, + mirror: mirror2, + blockClass, + blockSelector, + maskAllText, + unblockSelector, + maskTextClass, + unmaskTextClass, + maskTextSelector, + unmaskTextSelector, + skipChild, + inlineStylesheet, + maskInputOptions, + maskAttributeFn, + maskTextFn, + maskInputFn, + slimDOMOptions, + dataURLOptions, + inlineImages, + recordCanvas, + preserveWhiteSpace, + onSerialize, + onIframeLoad, + iframeLoadTimeout, + onStylesheetLoad, + stylesheetLoadTimeout, + keepIframeSrcFn + }; + for (const childN of Array.from(n2.childNodes)) { + const serializedChildNode = serializeNodeWithId(childN, bypassOptions); + if (serializedChildNode) { + serializedNode.childNodes.push(serializedChildNode); + } + } + if (isElement$1$1(n2) && n2.shadowRoot) { + for (const childN of Array.from(n2.shadowRoot.childNodes)) { + const serializedChildNode = serializeNodeWithId(childN, bypassOptions); + if (serializedChildNode) { + isNativeShadowDom(n2.shadowRoot) && (serializedChildNode.isShadow = true); + serializedNode.childNodes.push(serializedChildNode); + } + } + } + } + if (n2.parentNode && isShadowRoot(n2.parentNode) && isNativeShadowDom(n2.parentNode)) { + serializedNode.isShadow = true; + } + if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === "iframe") { + onceIframeLoaded(n2, () => { + const iframeDoc = getIframeContentDocument(n2); + if (iframeDoc && onIframeLoad) { + const serializedIframeNode = serializeNodeWithId(iframeDoc, { + doc: iframeDoc, + mirror: mirror2, + blockClass, + blockSelector, + unblockSelector, + maskAllText, + maskTextClass, + unmaskTextClass, + maskTextSelector, + unmaskTextSelector, + skipChild: false, + inlineStylesheet, + maskInputOptions, + maskAttributeFn, + maskTextFn, + maskInputFn, + slimDOMOptions, + dataURLOptions, + inlineImages, + recordCanvas, + preserveWhiteSpace, + onSerialize, + onIframeLoad, + iframeLoadTimeout, + onStylesheetLoad, + stylesheetLoadTimeout, + keepIframeSrcFn + }); + if (serializedIframeNode) { + onIframeLoad(n2, serializedIframeNode); + } + } + }, iframeLoadTimeout); + } + if (serializedNode.type === NodeType$3.Element && serializedNode.tagName === "link" && typeof serializedNode.attributes.rel === "string" && (serializedNode.attributes.rel === "stylesheet" || serializedNode.attributes.rel === "preload" && typeof serializedNode.attributes.href === "string" && extractFileExtension(serializedNode.attributes.href) === "css")) { + onceStylesheetLoaded(n2, () => { + if (onStylesheetLoad) { + const serializedLinkNode = serializeNodeWithId(n2, { + doc: doc2, + mirror: mirror2, + blockClass, + blockSelector, + unblockSelector, + maskAllText, + maskTextClass, + unmaskTextClass, + maskTextSelector, + unmaskTextSelector, + skipChild: false, + inlineStylesheet, + maskInputOptions, + maskAttributeFn, + maskTextFn, + maskInputFn, + slimDOMOptions, + dataURLOptions, + inlineImages, + recordCanvas, + preserveWhiteSpace, + onSerialize, + onIframeLoad, + iframeLoadTimeout, + onStylesheetLoad, + stylesheetLoadTimeout, + keepIframeSrcFn + }); + if (serializedLinkNode) { + onStylesheetLoad(n2, serializedLinkNode); + } + } + }, stylesheetLoadTimeout); + } + return serializedNode; +} +__name(serializeNodeWithId, "serializeNodeWithId"); +function snapshot(n2, options4) { + const { mirror: mirror2 = new Mirror(), blockClass = "rr-block", blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = "rr-mask", unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = /* @__PURE__ */ __name(() => false, "keepIframeSrcFn") } = options4 || {}; + const maskInputOptions = maskAllInputs === true ? { + color: true, + date: true, + "datetime-local": true, + email: true, + month: true, + number: true, + range: true, + search: true, + tel: true, + text: true, + time: true, + url: true, + week: true, + textarea: true, + select: true + } : maskAllInputs === false ? {} : maskAllInputs; + const slimDOMOptions = slimDOM === true || slimDOM === "all" ? { + script: true, + comment: true, + headFavicon: true, + headWhitespace: true, + headMetaDescKeywords: slimDOM === "all", + headMetaSocial: true, + headMetaRobots: true, + headMetaHttpEquiv: true, + headMetaAuthorship: true, + headMetaVerification: true + } : slimDOM === false ? {} : slimDOM; + return serializeNodeWithId(n2, { + doc: n2, + mirror: mirror2, + blockClass, + blockSelector, + unblockSelector, + maskAllText, + maskTextClass, + unmaskTextClass, + maskTextSelector, + unmaskTextSelector, + skipChild: false, + inlineStylesheet, + maskInputOptions, + maskAttributeFn, + maskTextFn, + maskInputFn, + slimDOMOptions, + dataURLOptions, + inlineImages, + recordCanvas, + preserveWhiteSpace, + onSerialize, + onIframeLoad, + iframeLoadTimeout, + onStylesheetLoad, + stylesheetLoadTimeout, + keepIframeSrcFn, + newlyAddedElement: false + }); +} +__name(snapshot, "snapshot"); +function _optionalChain$4(ops) { + let lastAccessLHS = void 0; + let value4 = ops[0]; + let i2 = 1; + while (i2 < ops.length) { + const op = ops[i2]; + const fn = ops[i2 + 1]; + i2 += 2; + if ((op === "optionalAccess" || op === "optionalCall") && value4 == null) { + return void 0; + } + if (op === "access" || op === "optionalAccess") { + lastAccessLHS = value4; + value4 = fn(value4); + } else if (op === "call" || op === "optionalCall") { + value4 = fn((...args) => value4.call(lastAccessLHS, ...args)); + lastAccessLHS = void 0; + } + } + return value4; +} +__name(_optionalChain$4, "_optionalChain$4"); +function on(type, fn, target2 = document) { + const options4 = { capture: true, passive: true }; + target2.addEventListener(type, fn, options4); + return () => target2.removeEventListener(type, fn, options4); +} +__name(on, "on"); +const DEPARTED_MIRROR_ACCESS_WARNING$1 = "Please stop import mirror directly. Instead of that,\r\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\r\nor you can use record.mirror to access the mirror instance during recording."; +let _mirror$1 = { + map: {}, + getId() { + console.error(DEPARTED_MIRROR_ACCESS_WARNING$1); + return -1; + }, + getNode() { + console.error(DEPARTED_MIRROR_ACCESS_WARNING$1); + return null; + }, + removeNodeFromMap() { + console.error(DEPARTED_MIRROR_ACCESS_WARNING$1); + }, + has() { + console.error(DEPARTED_MIRROR_ACCESS_WARNING$1); + return false; + }, + reset() { + console.error(DEPARTED_MIRROR_ACCESS_WARNING$1); + } +}; +if (typeof window !== "undefined" && window.Proxy && window.Reflect) { + _mirror$1 = new Proxy(_mirror$1, { + get(target2, prop2, receiver) { + if (prop2 === "map") { + console.error(DEPARTED_MIRROR_ACCESS_WARNING$1); + } + return Reflect.get(target2, prop2, receiver); + } + }); +} +function throttle$1(func, wait, options4 = {}) { + let timeout = null; + let previous = 0; + return function(...args) { + const now2 = Date.now(); + if (!previous && options4.leading === false) { + previous = now2; + } + const remaining = wait - (now2 - previous); + const context = this; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout$1(timeout); + timeout = null; + } + previous = now2; + func.apply(context, args); + } else if (!timeout && options4.trailing !== false) { + timeout = setTimeout$1$1(() => { + previous = options4.leading === false ? 0 : Date.now(); + timeout = null; + func.apply(context, args); + }, remaining); + } + }; +} +__name(throttle$1, "throttle$1"); +function hookSetter$1(target2, key, d2, isRevoked, win = window) { + const original = win.Object.getOwnPropertyDescriptor(target2, key); + win.Object.defineProperty(target2, key, isRevoked ? d2 : { + set(value4) { + setTimeout$1$1(() => { + d2.set.call(this, value4); + }, 0); + if (original && original.set) { + original.set.call(this, value4); + } + } + }); + return () => hookSetter$1(target2, key, original || {}, true); +} +__name(hookSetter$1, "hookSetter$1"); +function patch$2(source, name2, replacement) { + try { + if (!(name2 in source)) { + return () => { + }; + } + const original = source[name2]; + const wrapped = replacement(original); + if (typeof wrapped === "function") { + wrapped.prototype = wrapped.prototype || {}; + Object.defineProperties(wrapped, { + __rrweb_original__: { + enumerable: false, + value: original + } + }); + } + source[name2] = wrapped; + return () => { + source[name2] = original; + }; + } catch (e2) { + return () => { + }; + } +} +__name(patch$2, "patch$2"); +let nowTimestamp = Date.now; +if (!/[1-9][0-9]{12}/.test(Date.now().toString())) { + nowTimestamp = /* @__PURE__ */ __name(() => (/* @__PURE__ */ new Date()).getTime(), "nowTimestamp"); +} +function getWindowScroll(win) { + const doc2 = win.document; + return { + left: doc2.scrollingElement ? doc2.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : _optionalChain$4([doc2, "optionalAccess", (_2) => _2.documentElement, "access", (_2) => _2.scrollLeft]) || _optionalChain$4([doc2, "optionalAccess", (_3) => _3.body, "optionalAccess", (_4) => _4.parentElement, "optionalAccess", (_5) => _5.scrollLeft]) || _optionalChain$4([doc2, "optionalAccess", (_6) => _6.body, "optionalAccess", (_7) => _7.scrollLeft]) || 0, + top: doc2.scrollingElement ? doc2.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : _optionalChain$4([doc2, "optionalAccess", (_8) => _8.documentElement, "access", (_9) => _9.scrollTop]) || _optionalChain$4([doc2, "optionalAccess", (_10) => _10.body, "optionalAccess", (_11) => _11.parentElement, "optionalAccess", (_12) => _12.scrollTop]) || _optionalChain$4([doc2, "optionalAccess", (_13) => _13.body, "optionalAccess", (_14) => _14.scrollTop]) || 0 + }; +} +__name(getWindowScroll, "getWindowScroll"); +function getWindowHeight() { + return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight; +} +__name(getWindowHeight, "getWindowHeight"); +function getWindowWidth() { + return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth; +} +__name(getWindowWidth, "getWindowWidth"); +function closestElementOfNode$1(node3) { + if (!node3) { + return null; + } + const el = node3.nodeType === node3.ELEMENT_NODE ? node3 : node3.parentElement; + return el; +} +__name(closestElementOfNode$1, "closestElementOfNode$1"); +function isBlocked$1(node3, blockClass, blockSelector, unblockSelector, checkAncestors) { + if (!node3) { + return false; + } + const el = closestElementOfNode$1(node3); + if (!el) { + return false; + } + const blockedPredicate = createMatchPredicate$1(blockClass, blockSelector); + if (!checkAncestors) { + const isUnblocked = unblockSelector && el.matches(unblockSelector); + return blockedPredicate(el) && !isUnblocked; + } + const blockDistance = distanceToMatch$1(el, blockedPredicate); + let unblockDistance = -1; + if (blockDistance < 0) { + return false; + } + if (unblockSelector) { + unblockDistance = distanceToMatch$1(el, createMatchPredicate$1(null, unblockSelector)); + } + if (blockDistance > -1 && unblockDistance < 0) { + return true; + } + return blockDistance < unblockDistance; +} +__name(isBlocked$1, "isBlocked$1"); +function isSerialized(n2, mirror2) { + return mirror2.getId(n2) !== -1; +} +__name(isSerialized, "isSerialized"); +function isIgnored(n2, mirror2) { + return mirror2.getId(n2) === IGNORED_NODE; +} +__name(isIgnored, "isIgnored"); +function isAncestorRemoved(target2, mirror2) { + if (isShadowRoot(target2)) { + return false; + } + const id3 = mirror2.getId(target2); + if (!mirror2.has(id3)) { + return true; + } + if (target2.parentNode && target2.parentNode.nodeType === target2.DOCUMENT_NODE) { + return false; + } + if (!target2.parentNode) { + return true; + } + return isAncestorRemoved(target2.parentNode, mirror2); +} +__name(isAncestorRemoved, "isAncestorRemoved"); +function legacy_isTouchEvent(event) { + return Boolean(event.changedTouches); +} +__name(legacy_isTouchEvent, "legacy_isTouchEvent"); +function polyfill(win = window) { + if ("NodeList" in win && !win.NodeList.prototype.forEach) { + win.NodeList.prototype.forEach = Array.prototype.forEach; + } + if ("DOMTokenList" in win && !win.DOMTokenList.prototype.forEach) { + win.DOMTokenList.prototype.forEach = Array.prototype.forEach; + } + if (!Node.prototype.contains) { + Node.prototype.contains = (...args) => { + let node3 = args[0]; + if (!(0 in args)) { + throw new TypeError("1 argument is required"); + } + do { + if (this === node3) { + return true; + } + } while (node3 = node3 && node3.parentNode); + return false; + }; + } +} +__name(polyfill, "polyfill"); +function isSerializedIframe(n2, mirror2) { + return Boolean(n2.nodeName === "IFRAME" && mirror2.getMeta(n2)); +} +__name(isSerializedIframe, "isSerializedIframe"); +function isSerializedStylesheet(n2, mirror2) { + return Boolean(n2.nodeName === "LINK" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute("rel") === "stylesheet" && mirror2.getMeta(n2)); +} +__name(isSerializedStylesheet, "isSerializedStylesheet"); +function hasShadowRoot(n2) { + return Boolean(_optionalChain$4([n2, "optionalAccess", (_18) => _18.shadowRoot])); +} +__name(hasShadowRoot, "hasShadowRoot"); +class StyleSheetMirror { + static { + __name(this, "StyleSheetMirror"); + } + constructor() { + this.id = 1; + this.styleIDMap = /* @__PURE__ */ new WeakMap(); + this.idStyleMap = /* @__PURE__ */ new Map(); + } + getId(stylesheet) { + return _nullishCoalesce(this.styleIDMap.get(stylesheet), () => -1); + } + has(stylesheet) { + return this.styleIDMap.has(stylesheet); + } + add(stylesheet, id3) { + if (this.has(stylesheet)) + return this.getId(stylesheet); + let newId; + if (id3 === void 0) { + newId = this.id++; + } else + newId = id3; + this.styleIDMap.set(stylesheet, newId); + this.idStyleMap.set(newId, stylesheet); + return newId; + } + getStyle(id3) { + return this.idStyleMap.get(id3) || null; + } + reset() { + this.styleIDMap = /* @__PURE__ */ new WeakMap(); + this.idStyleMap = /* @__PURE__ */ new Map(); + this.id = 1; + } + generateId() { + return this.id++; + } +} +function getShadowHost(n2) { + let shadowHost = null; + if (_optionalChain$4([n2, "access", (_19) => _19.getRootNode, "optionalCall", (_20) => _20(), "optionalAccess", (_21) => _21.nodeType]) === Node.DOCUMENT_FRAGMENT_NODE && n2.getRootNode().host) + shadowHost = n2.getRootNode().host; + return shadowHost; +} +__name(getShadowHost, "getShadowHost"); +function getRootShadowHost(n2) { + let rootShadowHost = n2; + let shadowHost; + while (shadowHost = getShadowHost(rootShadowHost)) + rootShadowHost = shadowHost; + return rootShadowHost; +} +__name(getRootShadowHost, "getRootShadowHost"); +function shadowHostInDom(n2) { + const doc2 = n2.ownerDocument; + if (!doc2) + return false; + const shadowHost = getRootShadowHost(n2); + return doc2.contains(shadowHost); +} +__name(shadowHostInDom, "shadowHostInDom"); +function inDom(n2) { + const doc2 = n2.ownerDocument; + if (!doc2) + return false; + return doc2.contains(n2) || shadowHostInDom(n2); +} +__name(inDom, "inDom"); +const cachedImplementations$2 = {}; +function getImplementation$2(name2) { + const cached = cachedImplementations$2[name2]; + if (cached) { + return cached; + } + const document2 = window.document; + let impl = window[name2]; + if (document2 && typeof document2.createElement === "function") { + try { + const sandbox = document2.createElement("iframe"); + sandbox.hidden = true; + document2.head.appendChild(sandbox); + const contentWindow = sandbox.contentWindow; + if (contentWindow && contentWindow[name2]) { + impl = contentWindow[name2]; + } + document2.head.removeChild(sandbox); + } catch (e2) { + } + } + return cachedImplementations$2[name2] = impl.bind(window); +} +__name(getImplementation$2, "getImplementation$2"); +function onRequestAnimationFrame$1(...rest) { + return getImplementation$2("requestAnimationFrame")(...rest); +} +__name(onRequestAnimationFrame$1, "onRequestAnimationFrame$1"); +function setTimeout$1$1(...rest) { + return getImplementation$2("setTimeout")(...rest); +} +__name(setTimeout$1$1, "setTimeout$1$1"); +function clearTimeout$1(...rest) { + return getImplementation$2("clearTimeout")(...rest); +} +__name(clearTimeout$1, "clearTimeout$1"); +var EventType = /* @__PURE__ */ ((EventType2) => { + EventType2[EventType2["DomContentLoaded"] = 0] = "DomContentLoaded"; + EventType2[EventType2["Load"] = 1] = "Load"; + EventType2[EventType2["FullSnapshot"] = 2] = "FullSnapshot"; + EventType2[EventType2["IncrementalSnapshot"] = 3] = "IncrementalSnapshot"; + EventType2[EventType2["Meta"] = 4] = "Meta"; + EventType2[EventType2["Custom"] = 5] = "Custom"; + EventType2[EventType2["Plugin"] = 6] = "Plugin"; + return EventType2; +})(EventType || {}); +var IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => { + IncrementalSource2[IncrementalSource2["Mutation"] = 0] = "Mutation"; + IncrementalSource2[IncrementalSource2["MouseMove"] = 1] = "MouseMove"; + IncrementalSource2[IncrementalSource2["MouseInteraction"] = 2] = "MouseInteraction"; + IncrementalSource2[IncrementalSource2["Scroll"] = 3] = "Scroll"; + IncrementalSource2[IncrementalSource2["ViewportResize"] = 4] = "ViewportResize"; + IncrementalSource2[IncrementalSource2["Input"] = 5] = "Input"; + IncrementalSource2[IncrementalSource2["TouchMove"] = 6] = "TouchMove"; + IncrementalSource2[IncrementalSource2["MediaInteraction"] = 7] = "MediaInteraction"; + IncrementalSource2[IncrementalSource2["StyleSheetRule"] = 8] = "StyleSheetRule"; + IncrementalSource2[IncrementalSource2["CanvasMutation"] = 9] = "CanvasMutation"; + IncrementalSource2[IncrementalSource2["Font"] = 10] = "Font"; + IncrementalSource2[IncrementalSource2["Log"] = 11] = "Log"; + IncrementalSource2[IncrementalSource2["Drag"] = 12] = "Drag"; + IncrementalSource2[IncrementalSource2["StyleDeclaration"] = 13] = "StyleDeclaration"; + IncrementalSource2[IncrementalSource2["Selection"] = 14] = "Selection"; + IncrementalSource2[IncrementalSource2["AdoptedStyleSheet"] = 15] = "AdoptedStyleSheet"; + IncrementalSource2[IncrementalSource2["CustomElement"] = 16] = "CustomElement"; + return IncrementalSource2; +})(IncrementalSource || {}); +var MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => { + MouseInteractions2[MouseInteractions2["MouseUp"] = 0] = "MouseUp"; + MouseInteractions2[MouseInteractions2["MouseDown"] = 1] = "MouseDown"; + MouseInteractions2[MouseInteractions2["Click"] = 2] = "Click"; + MouseInteractions2[MouseInteractions2["ContextMenu"] = 3] = "ContextMenu"; + MouseInteractions2[MouseInteractions2["DblClick"] = 4] = "DblClick"; + MouseInteractions2[MouseInteractions2["Focus"] = 5] = "Focus"; + MouseInteractions2[MouseInteractions2["Blur"] = 6] = "Blur"; + MouseInteractions2[MouseInteractions2["TouchStart"] = 7] = "TouchStart"; + MouseInteractions2[MouseInteractions2["TouchMove_Departed"] = 8] = "TouchMove_Departed"; + MouseInteractions2[MouseInteractions2["TouchEnd"] = 9] = "TouchEnd"; + MouseInteractions2[MouseInteractions2["TouchCancel"] = 10] = "TouchCancel"; + return MouseInteractions2; +})(MouseInteractions || {}); +var PointerTypes = /* @__PURE__ */ ((PointerTypes2) => { + PointerTypes2[PointerTypes2["Mouse"] = 0] = "Mouse"; + PointerTypes2[PointerTypes2["Pen"] = 1] = "Pen"; + PointerTypes2[PointerTypes2["Touch"] = 2] = "Touch"; + return PointerTypes2; +})(PointerTypes || {}); +var NodeType$1$1; +(function(NodeType3) { + NodeType3[NodeType3["Document"] = 0] = "Document"; + NodeType3[NodeType3["DocumentType"] = 1] = "DocumentType"; + NodeType3[NodeType3["Element"] = 2] = "Element"; + NodeType3[NodeType3["Text"] = 3] = "Text"; + NodeType3[NodeType3["CDATA"] = 4] = "CDATA"; + NodeType3[NodeType3["Comment"] = 5] = "Comment"; +})(NodeType$1$1 || (NodeType$1$1 = {})); +var NodeType$2$1; +(function(NodeType3) { + NodeType3[NodeType3["PLACEHOLDER"] = 0] = "PLACEHOLDER"; + NodeType3[NodeType3["ELEMENT_NODE"] = 1] = "ELEMENT_NODE"; + NodeType3[NodeType3["ATTRIBUTE_NODE"] = 2] = "ATTRIBUTE_NODE"; + NodeType3[NodeType3["TEXT_NODE"] = 3] = "TEXT_NODE"; + NodeType3[NodeType3["CDATA_SECTION_NODE"] = 4] = "CDATA_SECTION_NODE"; + NodeType3[NodeType3["ENTITY_REFERENCE_NODE"] = 5] = "ENTITY_REFERENCE_NODE"; + NodeType3[NodeType3["ENTITY_NODE"] = 6] = "ENTITY_NODE"; + NodeType3[NodeType3["PROCESSING_INSTRUCTION_NODE"] = 7] = "PROCESSING_INSTRUCTION_NODE"; + NodeType3[NodeType3["COMMENT_NODE"] = 8] = "COMMENT_NODE"; + NodeType3[NodeType3["DOCUMENT_NODE"] = 9] = "DOCUMENT_NODE"; + NodeType3[NodeType3["DOCUMENT_TYPE_NODE"] = 10] = "DOCUMENT_TYPE_NODE"; + NodeType3[NodeType3["DOCUMENT_FRAGMENT_NODE"] = 11] = "DOCUMENT_FRAGMENT_NODE"; +})(NodeType$2$1 || (NodeType$2$1 = {})); +function getIFrameContentDocument(iframe) { + try { + return iframe.contentDocument; + } catch (e2) { + } +} +__name(getIFrameContentDocument, "getIFrameContentDocument"); +function getIFrameContentWindow(iframe) { + try { + return iframe.contentWindow; + } catch (e2) { + } +} +__name(getIFrameContentWindow, "getIFrameContentWindow"); +function _optionalChain$3(ops) { + let lastAccessLHS = void 0; + let value4 = ops[0]; + let i2 = 1; + while (i2 < ops.length) { + const op = ops[i2]; + const fn = ops[i2 + 1]; + i2 += 2; + if ((op === "optionalAccess" || op === "optionalCall") && value4 == null) { + return void 0; + } + if (op === "access" || op === "optionalAccess") { + lastAccessLHS = value4; + value4 = fn(value4); + } else if (op === "call" || op === "optionalCall") { + value4 = fn((...args) => value4.call(lastAccessLHS, ...args)); + lastAccessLHS = void 0; + } + } + return value4; +} +__name(_optionalChain$3, "_optionalChain$3"); +function isNodeInLinkedList(n2) { + return "__ln" in n2; +} +__name(isNodeInLinkedList, "isNodeInLinkedList"); +class DoubleLinkedList { + static { + __name(this, "DoubleLinkedList"); + } + constructor() { + this.length = 0; + this.head = null; + this.tail = null; + } + get(position3) { + if (position3 >= this.length) { + throw new Error("Position outside of list range"); + } + let current = this.head; + for (let index2 = 0; index2 < position3; index2++) { + current = _optionalChain$3([current, "optionalAccess", (_2) => _2.next]) || null; + } + return current; + } + addNode(n2) { + const node3 = { + value: n2, + previous: null, + next: null + }; + n2.__ln = node3; + if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) { + const current = n2.previousSibling.__ln.next; + node3.next = current; + node3.previous = n2.previousSibling.__ln; + n2.previousSibling.__ln.next = node3; + if (current) { + current.previous = node3; + } + } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) { + const current = n2.nextSibling.__ln.previous; + node3.previous = current; + node3.next = n2.nextSibling.__ln; + n2.nextSibling.__ln.previous = node3; + if (current) { + current.next = node3; + } + } else { + if (this.head) { + this.head.previous = node3; + } + node3.next = this.head; + this.head = node3; + } + if (node3.next === null) { + this.tail = node3; + } + this.length++; + } + removeNode(n2) { + const current = n2.__ln; + if (!this.head) { + return; + } + if (!current.previous) { + this.head = current.next; + if (this.head) { + this.head.previous = null; + } else { + this.tail = null; + } + } else { + current.previous.next = current.next; + if (current.next) { + current.next.previous = current.previous; + } else { + this.tail = current.previous; + } + } + if (n2.__ln) { + delete n2.__ln; + } + this.length--; + } +} +const moveKey = /* @__PURE__ */ __name((id3, parentId) => `${id3}@${parentId}`, "moveKey"); +class MutationBuffer { + static { + __name(this, "MutationBuffer"); + } + constructor() { + this.frozen = false; + this.locked = false; + this.texts = []; + this.attributes = []; + this.attributeMap = /* @__PURE__ */ new WeakMap(); + this.removes = []; + this.mapRemoves = []; + this.movedMap = {}; + this.addedSet = /* @__PURE__ */ new Set(); + this.movedSet = /* @__PURE__ */ new Set(); + this.droppedSet = /* @__PURE__ */ new Set(); + this.processMutations = (mutations) => { + mutations.forEach(this.processMutation); + this.emit(); + }; + this.emit = () => { + if (this.frozen || this.locked) { + return; + } + const adds = []; + const addedIds = /* @__PURE__ */ new Set(); + const addList = new DoubleLinkedList(); + const getNextId = /* @__PURE__ */ __name((n2) => { + let ns = n2; + let nextId = IGNORED_NODE; + while (nextId === IGNORED_NODE) { + ns = ns && ns.nextSibling; + nextId = ns && this.mirror.getId(ns); + } + return nextId; + }, "getNextId"); + const pushAdd = /* @__PURE__ */ __name((n2) => { + if (!n2.parentNode || !inDom(n2)) { + return; + } + const parentId = isShadowRoot(n2.parentNode) ? this.mirror.getId(getShadowHost(n2)) : this.mirror.getId(n2.parentNode); + const nextId = getNextId(n2); + if (parentId === -1 || nextId === -1) { + return addList.addNode(n2); + } + const sn = serializeNodeWithId(n2, { + doc: this.doc, + mirror: this.mirror, + blockClass: this.blockClass, + blockSelector: this.blockSelector, + maskAllText: this.maskAllText, + unblockSelector: this.unblockSelector, + maskTextClass: this.maskTextClass, + unmaskTextClass: this.unmaskTextClass, + maskTextSelector: this.maskTextSelector, + unmaskTextSelector: this.unmaskTextSelector, + skipChild: true, + newlyAddedElement: true, + inlineStylesheet: this.inlineStylesheet, + maskInputOptions: this.maskInputOptions, + maskAttributeFn: this.maskAttributeFn, + maskTextFn: this.maskTextFn, + maskInputFn: this.maskInputFn, + slimDOMOptions: this.slimDOMOptions, + dataURLOptions: this.dataURLOptions, + recordCanvas: this.recordCanvas, + inlineImages: this.inlineImages, + onSerialize: /* @__PURE__ */ __name((currentN) => { + if (isSerializedIframe(currentN, this.mirror) && !isBlocked$1(currentN, this.blockClass, this.blockSelector, this.unblockSelector, false)) { + this.iframeManager.addIframe(currentN); + } + if (isSerializedStylesheet(currentN, this.mirror)) { + this.stylesheetManager.trackLinkElement(currentN); + } + if (hasShadowRoot(n2)) { + this.shadowDomManager.addShadowRoot(n2.shadowRoot, this.doc); + } + }, "onSerialize"), + onIframeLoad: /* @__PURE__ */ __name((iframe, childSn) => { + if (isBlocked$1(iframe, this.blockClass, this.blockSelector, this.unblockSelector, false)) { + return; + } + this.iframeManager.attachIframe(iframe, childSn); + if (iframe.contentWindow) { + this.canvasManager.addWindow(iframe.contentWindow); + } + this.shadowDomManager.observeAttachShadow(iframe); + }, "onIframeLoad"), + onStylesheetLoad: /* @__PURE__ */ __name((link2, childSn) => { + this.stylesheetManager.attachLinkElement(link2, childSn); + }, "onStylesheetLoad") + }); + if (sn) { + adds.push({ + parentId, + nextId, + node: sn + }); + addedIds.add(sn.id); + } + }, "pushAdd"); + while (this.mapRemoves.length) { + this.mirror.removeNodeFromMap(this.mapRemoves.shift()); + } + for (const n2 of this.movedSet) { + if (isParentRemoved(this.removes, n2, this.mirror) && !this.movedSet.has(n2.parentNode)) { + continue; + } + pushAdd(n2); + } + for (const n2 of this.addedSet) { + if (!isAncestorInSet(this.droppedSet, n2) && !isParentRemoved(this.removes, n2, this.mirror)) { + pushAdd(n2); + } else if (isAncestorInSet(this.movedSet, n2)) { + pushAdd(n2); + } else { + this.droppedSet.add(n2); + } + } + let candidate = null; + while (addList.length) { + let node3 = null; + if (candidate) { + const parentId = this.mirror.getId(candidate.value.parentNode); + const nextId = getNextId(candidate.value); + if (parentId !== -1 && nextId !== -1) { + node3 = candidate; + } + } + if (!node3) { + let tailNode = addList.tail; + while (tailNode) { + const _node = tailNode; + tailNode = tailNode.previous; + if (_node) { + const parentId = this.mirror.getId(_node.value.parentNode); + const nextId = getNextId(_node.value); + if (nextId === -1) + continue; + else if (parentId !== -1) { + node3 = _node; + break; + } else { + const unhandledNode = _node.value; + if (unhandledNode.parentNode && unhandledNode.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { + const shadowHost = unhandledNode.parentNode.host; + const parentId2 = this.mirror.getId(shadowHost); + if (parentId2 !== -1) { + node3 = _node; + break; + } + } + } + } + } + } + if (!node3) { + while (addList.head) { + addList.removeNode(addList.head.value); + } + break; + } + candidate = node3.previous; + addList.removeNode(node3.value); + pushAdd(node3.value); + } + const payload = { + texts: this.texts.map((text2) => ({ + id: this.mirror.getId(text2.node), + value: text2.value + })).filter((text2) => !addedIds.has(text2.id)).filter((text2) => this.mirror.has(text2.id)), + attributes: this.attributes.map((attribute2) => { + const { attributes } = attribute2; + if (typeof attributes.style === "string") { + const diffAsStr = JSON.stringify(attribute2.styleDiff); + const unchangedAsStr = JSON.stringify(attribute2._unchangedStyles); + if (diffAsStr.length < attributes.style.length) { + if ((diffAsStr + unchangedAsStr).split("var(").length === attributes.style.split("var(").length) { + attributes.style = attribute2.styleDiff; + } + } + } + return { + id: this.mirror.getId(attribute2.node), + attributes + }; + }).filter((attribute2) => !addedIds.has(attribute2.id)).filter((attribute2) => this.mirror.has(attribute2.id)), + removes: this.removes, + adds + }; + if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) { + return; + } + this.texts = []; + this.attributes = []; + this.attributeMap = /* @__PURE__ */ new WeakMap(); + this.removes = []; + this.addedSet = /* @__PURE__ */ new Set(); + this.movedSet = /* @__PURE__ */ new Set(); + this.droppedSet = /* @__PURE__ */ new Set(); + this.movedMap = {}; + this.mutationCb(payload); + }; + this.processMutation = (m2) => { + if (isIgnored(m2.target, this.mirror)) { + return; + } + switch (m2.type) { + case "characterData": { + const value4 = m2.target.textContent; + if (!isBlocked$1(m2.target, this.blockClass, this.blockSelector, this.unblockSelector, false) && value4 !== m2.oldValue) { + this.texts.push({ + value: needMaskingText(m2.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value4 ? this.maskTextFn ? this.maskTextFn(value4, closestElementOfNode$1(m2.target)) : value4.replace(/[\S]/g, "*") : value4, + node: m2.target + }); + } + break; + } + case "attributes": { + const target2 = m2.target; + let attributeName = m2.attributeName; + let value4 = m2.target.getAttribute(attributeName); + if (attributeName === "value") { + const type = getInputType(target2); + const tagName = target2.tagName; + value4 = getInputValue(target2, tagName, type); + const isInputMasked = shouldMaskInput({ + maskInputOptions: this.maskInputOptions, + tagName, + type + }); + const forceMask = needMaskingText(m2.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked); + value4 = maskInputValue({ + isMasked: forceMask, + element: target2, + value: value4, + maskInputFn: this.maskInputFn + }); + } + if (isBlocked$1(m2.target, this.blockClass, this.blockSelector, this.unblockSelector, false) || value4 === m2.oldValue) { + return; + } + let item3 = this.attributeMap.get(m2.target); + if (target2.tagName === "IFRAME" && attributeName === "src" && !this.keepIframeSrcFn(value4)) { + const iframeDoc = getIFrameContentDocument(target2); + if (!iframeDoc) { + attributeName = "rr_src"; + } else { + return; + } + } + if (!item3) { + item3 = { + node: m2.target, + attributes: {}, + styleDiff: {}, + _unchangedStyles: {} + }; + this.attributes.push(item3); + this.attributeMap.set(m2.target, item3); + } + if (attributeName === "type" && target2.tagName === "INPUT" && (m2.oldValue || "").toLowerCase() === "password") { + target2.setAttribute("data-rr-is-password", "true"); + } + if (!ignoreAttribute(target2.tagName, attributeName)) { + item3.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target2.tagName), toLowerCase(attributeName), value4, target2, this.maskAttributeFn); + if (attributeName === "style") { + if (!this.unattachedDoc) { + try { + this.unattachedDoc = document.implementation.createHTMLDocument(); + } catch (e2) { + this.unattachedDoc = this.doc; + } + } + const old = this.unattachedDoc.createElement("span"); + if (m2.oldValue) { + old.setAttribute("style", m2.oldValue); + } + for (const pname of Array.from(target2.style)) { + const newValue2 = target2.style.getPropertyValue(pname); + const newPriority = target2.style.getPropertyPriority(pname); + if (newValue2 !== old.style.getPropertyValue(pname) || newPriority !== old.style.getPropertyPriority(pname)) { + if (newPriority === "") { + item3.styleDiff[pname] = newValue2; + } else { + item3.styleDiff[pname] = [newValue2, newPriority]; + } + } else { + item3._unchangedStyles[pname] = [newValue2, newPriority]; + } + } + for (const pname of Array.from(old.style)) { + if (target2.style.getPropertyValue(pname) === "") { + item3.styleDiff[pname] = false; + } + } + } + } + break; + } + case "childList": { + if (isBlocked$1(m2.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) { + return; + } + m2.addedNodes.forEach((n2) => this.genAdds(n2, m2.target)); + m2.removedNodes.forEach((n2) => { + const nodeId = this.mirror.getId(n2); + const parentId = isShadowRoot(m2.target) ? this.mirror.getId(m2.target.host) : this.mirror.getId(m2.target); + if (isBlocked$1(m2.target, this.blockClass, this.blockSelector, this.unblockSelector, false) || isIgnored(n2, this.mirror) || !isSerialized(n2, this.mirror)) { + return; + } + if (this.addedSet.has(n2)) { + deepDelete(this.addedSet, n2); + this.droppedSet.add(n2); + } else if (this.addedSet.has(m2.target) && nodeId === -1) ; + else if (isAncestorRemoved(m2.target, this.mirror)) ; + else if (this.movedSet.has(n2) && this.movedMap[moveKey(nodeId, parentId)]) { + deepDelete(this.movedSet, n2); + } else { + this.removes.push({ + parentId, + id: nodeId, + isShadow: isShadowRoot(m2.target) && isNativeShadowDom(m2.target) ? true : void 0 + }); + } + this.mapRemoves.push(n2); + }); + break; + } + } + }; + this.genAdds = (n2, target2) => { + if (this.processedNodeManager.inOtherBuffer(n2, this)) + return; + if (this.addedSet.has(n2) || this.movedSet.has(n2)) + return; + if (this.mirror.hasNode(n2)) { + if (isIgnored(n2, this.mirror)) { + return; + } + this.movedSet.add(n2); + let targetId = null; + if (target2 && this.mirror.hasNode(target2)) { + targetId = this.mirror.getId(target2); + } + if (targetId && targetId !== -1) { + this.movedMap[moveKey(this.mirror.getId(n2), targetId)] = true; + } + } else { + this.addedSet.add(n2); + this.droppedSet.delete(n2); + } + if (!isBlocked$1(n2, this.blockClass, this.blockSelector, this.unblockSelector, false)) { + n2.childNodes.forEach((childN) => this.genAdds(childN)); + if (hasShadowRoot(n2)) { + n2.shadowRoot.childNodes.forEach((childN) => { + this.processedNodeManager.add(childN, this); + this.genAdds(childN, n2); + }); + } + } + }; + } + init(options4) { + [ + "mutationCb", + "blockClass", + "blockSelector", + "unblockSelector", + "maskAllText", + "maskTextClass", + "unmaskTextClass", + "maskTextSelector", + "unmaskTextSelector", + "inlineStylesheet", + "maskInputOptions", + "maskAttributeFn", + "maskTextFn", + "maskInputFn", + "keepIframeSrcFn", + "recordCanvas", + "inlineImages", + "slimDOMOptions", + "dataURLOptions", + "doc", + "mirror", + "iframeManager", + "stylesheetManager", + "shadowDomManager", + "canvasManager", + "processedNodeManager" + ].forEach((key) => { + this[key] = options4[key]; + }); + } + freeze() { + this.frozen = true; + this.canvasManager.freeze(); + } + unfreeze() { + this.frozen = false; + this.canvasManager.unfreeze(); + this.emit(); + } + isFrozen() { + return this.frozen; + } + lock() { + this.locked = true; + this.canvasManager.lock(); + } + unlock() { + this.locked = false; + this.canvasManager.unlock(); + this.emit(); + } + reset() { + this.shadowDomManager.reset(); + this.canvasManager.reset(); + } +} +function deepDelete(addsSet, n2) { + addsSet.delete(n2); + n2.childNodes.forEach((childN) => deepDelete(addsSet, childN)); +} +__name(deepDelete, "deepDelete"); +function isParentRemoved(removes, n2, mirror2) { + if (removes.length === 0) + return false; + return _isParentRemoved(removes, n2, mirror2); +} +__name(isParentRemoved, "isParentRemoved"); +function _isParentRemoved(removes, n2, mirror2) { + let node3 = n2.parentNode; + while (node3) { + const parentId = mirror2.getId(node3); + if (removes.some((r2) => r2.id === parentId)) { + return true; + } + node3 = node3.parentNode; + } + return false; +} +__name(_isParentRemoved, "_isParentRemoved"); +function isAncestorInSet(set3, n2) { + if (set3.size === 0) + return false; + return _isAncestorInSet(set3, n2); +} +__name(isAncestorInSet, "isAncestorInSet"); +function _isAncestorInSet(set3, n2) { + const { parentNode: parentNode2 } = n2; + if (!parentNode2) { + return false; + } + if (set3.has(parentNode2)) { + return true; + } + return _isAncestorInSet(set3, parentNode2); +} +__name(_isAncestorInSet, "_isAncestorInSet"); +let errorHandler$1; +function registerErrorHandler$1(handler12) { + errorHandler$1 = handler12; +} +__name(registerErrorHandler$1, "registerErrorHandler$1"); +function unregisterErrorHandler() { + errorHandler$1 = void 0; +} +__name(unregisterErrorHandler, "unregisterErrorHandler"); +const callbackWrapper$1 = /* @__PURE__ */ __name((cb) => { + if (!errorHandler$1) { + return cb; + } + const rrwebWrapped = /* @__PURE__ */ __name((...rest) => { + try { + return cb(...rest); + } catch (error2) { + if (errorHandler$1 && errorHandler$1(error2) === true) { + return () => { + }; + } + throw error2; + } + }, "rrwebWrapped"); + return rrwebWrapped; +}, "callbackWrapper$1"); +function _optionalChain$2(ops) { + let lastAccessLHS = void 0; + let value4 = ops[0]; + let i2 = 1; + while (i2 < ops.length) { + const op = ops[i2]; + const fn = ops[i2 + 1]; + i2 += 2; + if ((op === "optionalAccess" || op === "optionalCall") && value4 == null) { + return void 0; + } + if (op === "access" || op === "optionalAccess") { + lastAccessLHS = value4; + value4 = fn(value4); + } else if (op === "call" || op === "optionalCall") { + value4 = fn((...args) => value4.call(lastAccessLHS, ...args)); + lastAccessLHS = void 0; + } + } + return value4; +} +__name(_optionalChain$2, "_optionalChain$2"); +const mutationBuffers = []; +function getEventTarget(event) { + try { + if ("composedPath" in event) { + const path = event.composedPath(); + if (path.length) { + return path[0]; + } + } else if ("path" in event && event.path.length) { + return event.path[0]; + } + } catch (e2) { + } + return event && event.target; +} +__name(getEventTarget, "getEventTarget"); +function initMutationObserver(options4, rootEl) { + const mutationBuffer = new MutationBuffer(); + mutationBuffers.push(mutationBuffer); + mutationBuffer.init(options4); + let mutationObserverCtor = window.MutationObserver || window.__rrMutationObserver; + const angularZoneSymbol = _optionalChain$2([window, "optionalAccess", (_2) => _2.Zone, "optionalAccess", (_2) => _2.__symbol__, "optionalCall", (_3) => _3("MutationObserver")]); + if (angularZoneSymbol && window[angularZoneSymbol]) { + mutationObserverCtor = window[angularZoneSymbol]; + } + const observer = new mutationObserverCtor(callbackWrapper$1((mutations) => { + if (options4.onMutation && options4.onMutation(mutations) === false) { + return; + } + mutationBuffer.processMutations.bind(mutationBuffer)(mutations); + })); + observer.observe(rootEl, { + attributes: true, + attributeOldValue: true, + characterData: true, + characterDataOldValue: true, + childList: true, + subtree: true + }); + return observer; +} +__name(initMutationObserver, "initMutationObserver"); +function initMoveObserver({ mousemoveCb, sampling, doc: doc2, mirror: mirror2 }) { + if (sampling.mousemove === false) { + return () => { + }; + } + const threshold = typeof sampling.mousemove === "number" ? sampling.mousemove : 50; + const callbackThreshold = typeof sampling.mousemoveCallback === "number" ? sampling.mousemoveCallback : 500; + let positions = []; + let timeBaseline; + const wrappedCb = throttle$1(callbackWrapper$1((source) => { + const totalOffset = Date.now() - timeBaseline; + mousemoveCb(positions.map((p2) => { + p2.timeOffset -= totalOffset; + return p2; + }), source); + positions = []; + timeBaseline = null; + }), callbackThreshold); + const updatePosition = callbackWrapper$1(throttle$1(callbackWrapper$1((evt) => { + const target2 = getEventTarget(evt); + const { clientX, clientY } = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt; + if (!timeBaseline) { + timeBaseline = nowTimestamp(); + } + positions.push({ + x: clientX, + y: clientY, + id: mirror2.getId(target2), + timeOffset: nowTimestamp() - timeBaseline + }); + wrappedCb(typeof DragEvent !== "undefined" && evt instanceof DragEvent ? IncrementalSource.Drag : evt instanceof MouseEvent ? IncrementalSource.MouseMove : IncrementalSource.TouchMove); + }), threshold, { + trailing: false + })); + const handlers2 = [ + on("mousemove", updatePosition, doc2), + on("touchmove", updatePosition, doc2), + on("drag", updatePosition, doc2) + ]; + return callbackWrapper$1(() => { + handlers2.forEach((h2) => h2()); + }); +} +__name(initMoveObserver, "initMoveObserver"); +function initMouseInteractionObserver({ mouseInteractionCb, doc: doc2, mirror: mirror2, blockClass, blockSelector, unblockSelector, sampling }) { + if (sampling.mouseInteraction === false) { + return () => { + }; + } + const disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction; + const handlers2 = []; + let currentPointerType = null; + const getHandler = /* @__PURE__ */ __name((eventKey) => { + return (event) => { + const target2 = getEventTarget(event); + if (isBlocked$1(target2, blockClass, blockSelector, unblockSelector, true)) { + return; + } + let pointerType = null; + let thisEventKey = eventKey; + if ("pointerType" in event) { + switch (event.pointerType) { + case "mouse": + pointerType = PointerTypes.Mouse; + break; + case "touch": + pointerType = PointerTypes.Touch; + break; + case "pen": + pointerType = PointerTypes.Pen; + break; + } + if (pointerType === PointerTypes.Touch) { + if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) { + thisEventKey = "TouchStart"; + } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) { + thisEventKey = "TouchEnd"; + } + } else if (pointerType === PointerTypes.Pen) ; + } else if (legacy_isTouchEvent(event)) { + pointerType = PointerTypes.Touch; + } + if (pointerType !== null) { + currentPointerType = pointerType; + if (thisEventKey.startsWith("Touch") && pointerType === PointerTypes.Touch || thisEventKey.startsWith("Mouse") && pointerType === PointerTypes.Mouse) { + pointerType = null; + } + } else if (MouseInteractions[eventKey] === MouseInteractions.Click) { + pointerType = currentPointerType; + currentPointerType = null; + } + const e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event; + if (!e2) { + return; + } + const id3 = mirror2.getId(target2); + const { clientX, clientY } = e2; + callbackWrapper$1(mouseInteractionCb)({ + type: MouseInteractions[thisEventKey], + id: id3, + x: clientX, + y: clientY, + ...pointerType !== null && { pointerType } + }); + }; + }, "getHandler"); + Object.keys(MouseInteractions).filter((key) => Number.isNaN(Number(key)) && !key.endsWith("_Departed") && disableMap[key] !== false).forEach((eventKey) => { + let eventName = toLowerCase(eventKey); + const handler12 = getHandler(eventKey); + if (window.PointerEvent) { + switch (MouseInteractions[eventKey]) { + case MouseInteractions.MouseDown: + case MouseInteractions.MouseUp: + eventName = eventName.replace("mouse", "pointer"); + break; + case MouseInteractions.TouchStart: + case MouseInteractions.TouchEnd: + return; + } + } + handlers2.push(on(eventName, handler12, doc2)); + }); + return callbackWrapper$1(() => { + handlers2.forEach((h2) => h2()); + }); +} +__name(initMouseInteractionObserver, "initMouseInteractionObserver"); +function initScrollObserver({ scrollCb, doc: doc2, mirror: mirror2, blockClass, blockSelector, unblockSelector, sampling }) { + const updatePosition = callbackWrapper$1(throttle$1(callbackWrapper$1((evt) => { + const target2 = getEventTarget(evt); + if (!target2 || isBlocked$1(target2, blockClass, blockSelector, unblockSelector, true)) { + return; + } + const id3 = mirror2.getId(target2); + if (target2 === doc2 && doc2.defaultView) { + const scrollLeftTop = getWindowScroll(doc2.defaultView); + scrollCb({ + id: id3, + x: scrollLeftTop.left, + y: scrollLeftTop.top + }); + } else { + scrollCb({ + id: id3, + x: target2.scrollLeft, + y: target2.scrollTop + }); + } + }), sampling.scroll || 100)); + return on("scroll", updatePosition, doc2); +} +__name(initScrollObserver, "initScrollObserver"); +function initViewportResizeObserver({ viewportResizeCb }, { win }) { + let lastH = -1; + let lastW = -1; + const updateDimension = callbackWrapper$1(throttle$1(callbackWrapper$1(() => { + const height = getWindowHeight(); + const width2 = getWindowWidth(); + if (lastH !== height || lastW !== width2) { + viewportResizeCb({ + width: Number(width2), + height: Number(height) + }); + lastH = height; + lastW = width2; + } + }), 200)); + return on("resize", updateDimension, win); +} +__name(initViewportResizeObserver, "initViewportResizeObserver"); +const INPUT_TAGS = ["INPUT", "TEXTAREA", "SELECT"]; +const lastInputValueMap = /* @__PURE__ */ new WeakMap(); +function initInputObserver({ inputCb, doc: doc2, mirror: mirror2, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector }) { + function eventHandler(event) { + let target2 = getEventTarget(event); + const userTriggered = event.isTrusted; + const tagName = target2 && toUpperCase(target2.tagName); + if (tagName === "OPTION") + target2 = target2.parentElement; + if (!target2 || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked$1(target2, blockClass, blockSelector, unblockSelector, true)) { + return; + } + const el = target2; + if (el.classList.contains(ignoreClass) || ignoreSelector && el.matches(ignoreSelector)) { + return; + } + const type = getInputType(target2); + let text2 = getInputValue(el, tagName, type); + let isChecked2 = false; + const isInputMasked = shouldMaskInput({ + maskInputOptions, + tagName, + type + }); + const forceMask = needMaskingText(target2, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked); + if (type === "radio" || type === "checkbox") { + isChecked2 = target2.checked; + } + text2 = maskInputValue({ + isMasked: forceMask, + element: target2, + value: text2, + maskInputFn + }); + cbWithDedup(target2, userTriggeredOnInput ? { text: text2, isChecked: isChecked2, userTriggered } : { text: text2, isChecked: isChecked2 }); + const name2 = target2.name; + if (type === "radio" && name2 && isChecked2) { + doc2.querySelectorAll(`input[type="radio"][name="${name2}"]`).forEach((el2) => { + if (el2 !== target2) { + const text3 = maskInputValue({ + isMasked: forceMask, + element: el2, + value: getInputValue(el2, tagName, type), + maskInputFn + }); + cbWithDedup(el2, userTriggeredOnInput ? { text: text3, isChecked: !isChecked2, userTriggered: false } : { text: text3, isChecked: !isChecked2 }); + } + }); + } + } + __name(eventHandler, "eventHandler"); + function cbWithDedup(target2, v2) { + const lastInputValue = lastInputValueMap.get(target2); + if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) { + lastInputValueMap.set(target2, v2); + const id3 = mirror2.getId(target2); + callbackWrapper$1(inputCb)({ + ...v2, + id: id3 + }); + } + } + __name(cbWithDedup, "cbWithDedup"); + const events2 = sampling.input === "last" ? ["change"] : ["input", "change"]; + const handlers2 = events2.map((eventName) => on(eventName, callbackWrapper$1(eventHandler), doc2)); + const currentWindow = doc2.defaultView; + if (!currentWindow) { + return () => { + handlers2.forEach((h2) => h2()); + }; + } + const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, "value"); + const hookProperties = [ + [currentWindow.HTMLInputElement.prototype, "value"], + [currentWindow.HTMLInputElement.prototype, "checked"], + [currentWindow.HTMLSelectElement.prototype, "value"], + [currentWindow.HTMLTextAreaElement.prototype, "value"], + [currentWindow.HTMLSelectElement.prototype, "selectedIndex"], + [currentWindow.HTMLOptionElement.prototype, "selected"] + ]; + if (propertyDescriptor && propertyDescriptor.set) { + handlers2.push(...hookProperties.map((p2) => hookSetter$1(p2[0], p2[1], { + set() { + callbackWrapper$1(eventHandler)({ + target: this, + isTrusted: false + }); + } + }, false, currentWindow))); + } + return callbackWrapper$1(() => { + handlers2.forEach((h2) => h2()); + }); +} +__name(initInputObserver, "initInputObserver"); +function getNestedCSSRulePositions(rule) { + const positions = []; + function recurse(childRule, pos2) { + if (hasNestedCSSRule("CSSGroupingRule") && childRule.parentRule instanceof CSSGroupingRule || hasNestedCSSRule("CSSMediaRule") && childRule.parentRule instanceof CSSMediaRule || hasNestedCSSRule("CSSSupportsRule") && childRule.parentRule instanceof CSSSupportsRule || hasNestedCSSRule("CSSConditionRule") && childRule.parentRule instanceof CSSConditionRule) { + const rules = Array.from(childRule.parentRule.cssRules); + const index2 = rules.indexOf(childRule); + pos2.unshift(index2); + } else if (childRule.parentStyleSheet) { + const rules = Array.from(childRule.parentStyleSheet.cssRules); + const index2 = rules.indexOf(childRule); + pos2.unshift(index2); + } + return pos2; + } + __name(recurse, "recurse"); + return recurse(rule, positions); +} +__name(getNestedCSSRulePositions, "getNestedCSSRulePositions"); +function getIdAndStyleId(sheet, mirror2, styleMirror) { + let id3, styleId; + if (!sheet) + return {}; + if (sheet.ownerNode) + id3 = mirror2.getId(sheet.ownerNode); + else + styleId = styleMirror.getId(sheet); + return { + styleId, + id: id3 + }; +} +__name(getIdAndStyleId, "getIdAndStyleId"); +function initStyleSheetObserver({ styleSheetRuleCb, mirror: mirror2, stylesheetManager }, { win }) { + if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) { + return () => { + }; + } + const insertRule = win.CSSStyleSheet.prototype.insertRule; + win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, { + apply: callbackWrapper$1((target2, thisArg, argumentsList) => { + const [rule, index2] = argumentsList; + const { id: id3, styleId } = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror); + if (id3 && id3 !== -1 || styleId && styleId !== -1) { + styleSheetRuleCb({ + id: id3, + styleId, + adds: [{ rule, index: index2 }] + }); + } + return target2.apply(thisArg, argumentsList); + }) + }); + const deleteRule = win.CSSStyleSheet.prototype.deleteRule; + win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, { + apply: callbackWrapper$1((target2, thisArg, argumentsList) => { + const [index2] = argumentsList; + const { id: id3, styleId } = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror); + if (id3 && id3 !== -1 || styleId && styleId !== -1) { + styleSheetRuleCb({ + id: id3, + styleId, + removes: [{ index: index2 }] + }); + } + return target2.apply(thisArg, argumentsList); + }) + }); + let replace2; + if (win.CSSStyleSheet.prototype.replace) { + replace2 = win.CSSStyleSheet.prototype.replace; + win.CSSStyleSheet.prototype.replace = new Proxy(replace2, { + apply: callbackWrapper$1((target2, thisArg, argumentsList) => { + const [text2] = argumentsList; + const { id: id3, styleId } = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror); + if (id3 && id3 !== -1 || styleId && styleId !== -1) { + styleSheetRuleCb({ + id: id3, + styleId, + replace: text2 + }); + } + return target2.apply(thisArg, argumentsList); + }) + }); + } + let replaceSync; + if (win.CSSStyleSheet.prototype.replaceSync) { + replaceSync = win.CSSStyleSheet.prototype.replaceSync; + win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, { + apply: callbackWrapper$1((target2, thisArg, argumentsList) => { + const [text2] = argumentsList; + const { id: id3, styleId } = getIdAndStyleId(thisArg, mirror2, stylesheetManager.styleMirror); + if (id3 && id3 !== -1 || styleId && styleId !== -1) { + styleSheetRuleCb({ + id: id3, + styleId, + replaceSync: text2 + }); + } + return target2.apply(thisArg, argumentsList); + }) + }); + } + const supportedNestedCSSRuleTypes = {}; + if (canMonkeyPatchNestedCSSRule("CSSGroupingRule")) { + supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule; + } else { + if (canMonkeyPatchNestedCSSRule("CSSMediaRule")) { + supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule; + } + if (canMonkeyPatchNestedCSSRule("CSSConditionRule")) { + supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule; + } + if (canMonkeyPatchNestedCSSRule("CSSSupportsRule")) { + supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule; + } + } + const unmodifiedFunctions = {}; + Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => { + unmodifiedFunctions[typeKey] = { + insertRule: type.prototype.insertRule, + deleteRule: type.prototype.deleteRule + }; + type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, { + apply: callbackWrapper$1((target2, thisArg, argumentsList) => { + const [rule, index2] = argumentsList; + const { id: id3, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror2, stylesheetManager.styleMirror); + if (id3 && id3 !== -1 || styleId && styleId !== -1) { + styleSheetRuleCb({ + id: id3, + styleId, + adds: [ + { + rule, + index: [ + ...getNestedCSSRulePositions(thisArg), + index2 || 0 + ] + } + ] + }); + } + return target2.apply(thisArg, argumentsList); + }) + }); + type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, { + apply: callbackWrapper$1((target2, thisArg, argumentsList) => { + const [index2] = argumentsList; + const { id: id3, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror2, stylesheetManager.styleMirror); + if (id3 && id3 !== -1 || styleId && styleId !== -1) { + styleSheetRuleCb({ + id: id3, + styleId, + removes: [ + { index: [...getNestedCSSRulePositions(thisArg), index2] } + ] + }); + } + return target2.apply(thisArg, argumentsList); + }) + }); + }); + return callbackWrapper$1(() => { + win.CSSStyleSheet.prototype.insertRule = insertRule; + win.CSSStyleSheet.prototype.deleteRule = deleteRule; + replace2 && (win.CSSStyleSheet.prototype.replace = replace2); + replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync); + Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => { + type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule; + type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule; + }); + }); +} +__name(initStyleSheetObserver, "initStyleSheetObserver"); +function initAdoptedStyleSheetObserver({ mirror: mirror2, stylesheetManager }, host) { + let hostId = null; + if (host.nodeName === "#document") + hostId = mirror2.getId(host); + else + hostId = mirror2.getId(host.host); + const patchTarget = host.nodeName === "#document" ? _optionalChain$2([host, "access", (_4) => _4.defaultView, "optionalAccess", (_5) => _5.Document]) : _optionalChain$2([host, "access", (_6) => _6.ownerDocument, "optionalAccess", (_7) => _7.defaultView, "optionalAccess", (_8) => _8.ShadowRoot]); + const originalPropertyDescriptor = _optionalChain$2([patchTarget, "optionalAccess", (_9) => _9.prototype]) ? Object.getOwnPropertyDescriptor(_optionalChain$2([patchTarget, "optionalAccess", (_10) => _10.prototype]), "adoptedStyleSheets") : void 0; + if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor) + return () => { + }; + Object.defineProperty(host, "adoptedStyleSheets", { + configurable: originalPropertyDescriptor.configurable, + enumerable: originalPropertyDescriptor.enumerable, + get() { + return _optionalChain$2([originalPropertyDescriptor, "access", (_11) => _11.get, "optionalAccess", (_12) => _12.call, "call", (_13) => _13(this)]); + }, + set(sheets) { + const result = _optionalChain$2([originalPropertyDescriptor, "access", (_14) => _14.set, "optionalAccess", (_15) => _15.call, "call", (_16) => _16(this, sheets)]); + if (hostId !== null && hostId !== -1) { + try { + stylesheetManager.adoptStyleSheets(sheets, hostId); + } catch (e2) { + } + } + return result; + } + }); + return callbackWrapper$1(() => { + Object.defineProperty(host, "adoptedStyleSheets", { + configurable: originalPropertyDescriptor.configurable, + enumerable: originalPropertyDescriptor.enumerable, + get: originalPropertyDescriptor.get, + set: originalPropertyDescriptor.set + }); + }); +} +__name(initAdoptedStyleSheetObserver, "initAdoptedStyleSheetObserver"); +function initStyleDeclarationObserver({ styleDeclarationCb, mirror: mirror2, ignoreCSSAttributes, stylesheetManager }, { win }) { + const setProperty2 = win.CSSStyleDeclaration.prototype.setProperty; + win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty2, { + apply: callbackWrapper$1((target2, thisArg, argumentsList) => { + const [property, value4, priority] = argumentsList; + if (ignoreCSSAttributes.has(property)) { + return setProperty2.apply(thisArg, [property, value4, priority]); + } + const { id: id3, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, "access", (_17) => _17.parentRule, "optionalAccess", (_18) => _18.parentStyleSheet]), mirror2, stylesheetManager.styleMirror); + if (id3 && id3 !== -1 || styleId && styleId !== -1) { + styleDeclarationCb({ + id: id3, + styleId, + set: { + property, + value: value4, + priority + }, + index: getNestedCSSRulePositions(thisArg.parentRule) + }); + } + return target2.apply(thisArg, argumentsList); + }) + }); + const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty; + win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, { + apply: callbackWrapper$1((target2, thisArg, argumentsList) => { + const [property] = argumentsList; + if (ignoreCSSAttributes.has(property)) { + return removeProperty.apply(thisArg, [property]); + } + const { id: id3, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, "access", (_19) => _19.parentRule, "optionalAccess", (_20) => _20.parentStyleSheet]), mirror2, stylesheetManager.styleMirror); + if (id3 && id3 !== -1 || styleId && styleId !== -1) { + styleDeclarationCb({ + id: id3, + styleId, + remove: { + property + }, + index: getNestedCSSRulePositions(thisArg.parentRule) + }); + } + return target2.apply(thisArg, argumentsList); + }) + }); + return callbackWrapper$1(() => { + win.CSSStyleDeclaration.prototype.setProperty = setProperty2; + win.CSSStyleDeclaration.prototype.removeProperty = removeProperty; + }); +} +__name(initStyleDeclarationObserver, "initStyleDeclarationObserver"); +function initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror: mirror2, sampling, doc: doc2 }) { + const handler12 = callbackWrapper$1((type) => throttle$1(callbackWrapper$1((event) => { + const target2 = getEventTarget(event); + if (!target2 || isBlocked$1(target2, blockClass, blockSelector, unblockSelector, true)) { + return; + } + const { currentTime, volume, muted, playbackRate } = target2; + mediaInteractionCb({ + type, + id: mirror2.getId(target2), + currentTime, + volume, + muted, + playbackRate + }); + }), sampling.media || 500)); + const handlers2 = [ + on("play", handler12(0), doc2), + on("pause", handler12(1), doc2), + on("seeked", handler12(2), doc2), + on("volumechange", handler12(3), doc2), + on("ratechange", handler12(4), doc2) + ]; + return callbackWrapper$1(() => { + handlers2.forEach((h2) => h2()); + }); +} +__name(initMediaInteractionObserver, "initMediaInteractionObserver"); +function initFontObserver({ fontCb, doc: doc2 }) { + const win = doc2.defaultView; + if (!win) { + return () => { + }; + } + const handlers2 = []; + const fontMap = /* @__PURE__ */ new WeakMap(); + const originalFontFace = win.FontFace; + win.FontFace = /* @__PURE__ */ __name(function FontFace(family, source, descriptors2) { + const fontFace = new originalFontFace(family, source, descriptors2); + fontMap.set(fontFace, { + family, + buffer: typeof source !== "string", + descriptors: descriptors2, + fontSource: typeof source === "string" ? source : JSON.stringify(Array.from(new Uint8Array(source))) + }); + return fontFace; + }, "FontFace"); + const restoreHandler = patch$2(doc2.fonts, "add", function(original) { + return function(fontFace) { + setTimeout$1$1(callbackWrapper$1(() => { + const p2 = fontMap.get(fontFace); + if (p2) { + fontCb(p2); + fontMap.delete(fontFace); + } + }), 0); + return original.apply(this, [fontFace]); + }; + }); + handlers2.push(() => { + win.FontFace = originalFontFace; + }); + handlers2.push(restoreHandler); + return callbackWrapper$1(() => { + handlers2.forEach((h2) => h2()); + }); +} +__name(initFontObserver, "initFontObserver"); +function initSelectionObserver(param) { + const { doc: doc2, mirror: mirror2, blockClass, blockSelector, unblockSelector, selectionCb } = param; + let collapsed2 = true; + const updateSelection2 = callbackWrapper$1(() => { + const selection = doc2.getSelection(); + if (!selection || collapsed2 && _optionalChain$2([selection, "optionalAccess", (_21) => _21.isCollapsed])) + return; + collapsed2 = selection.isCollapsed || false; + const ranges = []; + const count = selection.rangeCount || 0; + for (let i2 = 0; i2 < count; i2++) { + const range2 = selection.getRangeAt(i2); + const { startContainer, startOffset, endContainer, endOffset } = range2; + const blocked2 = isBlocked$1(startContainer, blockClass, blockSelector, unblockSelector, true) || isBlocked$1(endContainer, blockClass, blockSelector, unblockSelector, true); + if (blocked2) + continue; + ranges.push({ + start: mirror2.getId(startContainer), + startOffset, + end: mirror2.getId(endContainer), + endOffset + }); + } + selectionCb({ ranges }); + }); + updateSelection2(); + return on("selectionchange", updateSelection2); +} +__name(initSelectionObserver, "initSelectionObserver"); +function initCustomElementObserver({ doc: doc2, customElementCb }) { + const win = doc2.defaultView; + if (!win || !win.customElements) + return () => { + }; + const restoreHandler = patch$2(win.customElements, "define", function(original) { + return function(name2, constructor, options4) { + try { + customElementCb({ + define: { + name: name2 + } + }); + } catch (e2) { + } + return original.apply(this, [name2, constructor, options4]); + }; + }); + return restoreHandler; +} +__name(initCustomElementObserver, "initCustomElementObserver"); +function initObservers(o2, _hooks = {}) { + const currentWindow = o2.doc.defaultView; + if (!currentWindow) { + return () => { + }; + } + let mutationObserver; + if (o2.recordDOM) { + mutationObserver = initMutationObserver(o2, o2.doc); + } + const mousemoveHandler = initMoveObserver(o2); + const mouseInteractionHandler = initMouseInteractionObserver(o2); + const scrollHandler = initScrollObserver(o2); + const viewportResizeHandler = initViewportResizeObserver(o2, { + win: currentWindow + }); + const inputHandler = initInputObserver(o2); + const mediaInteractionHandler = initMediaInteractionObserver(o2); + let styleSheetObserver = /* @__PURE__ */ __name(() => { + }, "styleSheetObserver"); + let adoptedStyleSheetObserver = /* @__PURE__ */ __name(() => { + }, "adoptedStyleSheetObserver"); + let styleDeclarationObserver = /* @__PURE__ */ __name(() => { + }, "styleDeclarationObserver"); + let fontObserver = /* @__PURE__ */ __name(() => { + }, "fontObserver"); + if (o2.recordDOM) { + styleSheetObserver = initStyleSheetObserver(o2, { win: currentWindow }); + adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc); + styleDeclarationObserver = initStyleDeclarationObserver(o2, { + win: currentWindow + }); + if (o2.collectFonts) { + fontObserver = initFontObserver(o2); + } + } + const selectionObserver = initSelectionObserver(o2); + const customElementObserver = initCustomElementObserver(o2); + const pluginHandlers = []; + for (const plugin of o2.plugins) { + pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options)); + } + return callbackWrapper$1(() => { + mutationBuffers.forEach((b2) => b2.reset()); + _optionalChain$2([mutationObserver, "optionalAccess", (_22) => _22.disconnect, "call", (_23) => _23()]); + mousemoveHandler(); + mouseInteractionHandler(); + scrollHandler(); + viewportResizeHandler(); + inputHandler(); + mediaInteractionHandler(); + styleSheetObserver(); + adoptedStyleSheetObserver(); + styleDeclarationObserver(); + fontObserver(); + selectionObserver(); + customElementObserver(); + pluginHandlers.forEach((h2) => h2()); + }); +} +__name(initObservers, "initObservers"); +function hasNestedCSSRule(prop2) { + return typeof window[prop2] !== "undefined"; +} +__name(hasNestedCSSRule, "hasNestedCSSRule"); +function canMonkeyPatchNestedCSSRule(prop2) { + return Boolean(typeof window[prop2] !== "undefined" && window[prop2].prototype && "insertRule" in window[prop2].prototype && "deleteRule" in window[prop2].prototype); +} +__name(canMonkeyPatchNestedCSSRule, "canMonkeyPatchNestedCSSRule"); +class CrossOriginIframeMirror { + static { + __name(this, "CrossOriginIframeMirror"); + } + constructor(generateIdFn) { + this.generateIdFn = generateIdFn; + this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap(); + this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap(); + } + getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) { + const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe); + const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe); + let id3 = idToRemoteIdMap.get(remoteId); + if (!id3) { + id3 = this.generateIdFn(); + idToRemoteIdMap.set(remoteId, id3); + remoteIdToIdMap.set(id3, remoteId); + } + return id3; + } + getIds(iframe, remoteId) { + const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe); + const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe); + return remoteId.map((id3) => this.getId(iframe, id3, idToRemoteIdMap, remoteIdToIdMap)); + } + getRemoteId(iframe, id3, map3) { + const remoteIdToIdMap = map3 || this.getRemoteIdToIdMap(iframe); + if (typeof id3 !== "number") + return id3; + const remoteId = remoteIdToIdMap.get(id3); + if (!remoteId) + return -1; + return remoteId; + } + getRemoteIds(iframe, ids) { + const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe); + return ids.map((id3) => this.getRemoteId(iframe, id3, remoteIdToIdMap)); + } + reset(iframe) { + if (!iframe) { + this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap(); + this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap(); + return; + } + this.iframeIdToRemoteIdMap.delete(iframe); + this.iframeRemoteIdToIdMap.delete(iframe); + } + getIdToRemoteIdMap(iframe) { + let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe); + if (!idToRemoteIdMap) { + idToRemoteIdMap = /* @__PURE__ */ new Map(); + this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap); + } + return idToRemoteIdMap; + } + getRemoteIdToIdMap(iframe) { + let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe); + if (!remoteIdToIdMap) { + remoteIdToIdMap = /* @__PURE__ */ new Map(); + this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap); + } + return remoteIdToIdMap; + } +} +function _optionalChain$1(ops) { + let lastAccessLHS = void 0; + let value4 = ops[0]; + let i2 = 1; + while (i2 < ops.length) { + const op = ops[i2]; + const fn = ops[i2 + 1]; + i2 += 2; + if ((op === "optionalAccess" || op === "optionalCall") && value4 == null) { + return void 0; + } + if (op === "access" || op === "optionalAccess") { + lastAccessLHS = value4; + value4 = fn(value4); + } else if (op === "call" || op === "optionalCall") { + value4 = fn((...args) => value4.call(lastAccessLHS, ...args)); + lastAccessLHS = void 0; + } + } + return value4; +} +__name(_optionalChain$1, "_optionalChain$1"); +class IframeManagerNoop { + static { + __name(this, "IframeManagerNoop"); + } + constructor() { + this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId); + this.crossOriginIframeRootIdMap = /* @__PURE__ */ new WeakMap(); + } + addIframe() { + } + addLoadListener() { + } + attachIframe() { + } +} +class IframeManager { + static { + __name(this, "IframeManager"); + } + constructor(options4) { + this.iframes = /* @__PURE__ */ new WeakMap(); + this.crossOriginIframeMap = /* @__PURE__ */ new WeakMap(); + this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId); + this.crossOriginIframeRootIdMap = /* @__PURE__ */ new WeakMap(); + this.mutationCb = options4.mutationCb; + this.wrappedEmit = options4.wrappedEmit; + this.stylesheetManager = options4.stylesheetManager; + this.recordCrossOriginIframes = options4.recordCrossOriginIframes; + this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror)); + this.mirror = options4.mirror; + if (this.recordCrossOriginIframes) { + window.addEventListener("message", this.handleMessage.bind(this)); + } + } + addIframe(iframeEl) { + this.iframes.set(iframeEl, true); + if (iframeEl.contentWindow) + this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl); + } + addLoadListener(cb) { + this.loadListener = cb; + } + attachIframe(iframeEl, childSn) { + this.mutationCb({ + adds: [ + { + parentId: this.mirror.getId(iframeEl), + nextId: null, + node: childSn + } + ], + removes: [], + texts: [], + attributes: [], + isAttachIframe: true + }); + _optionalChain$1([this, "access", (_2) => _2.loadListener, "optionalCall", (_2) => _2(iframeEl)]); + const iframeDoc = getIFrameContentDocument(iframeEl); + if (iframeDoc && iframeDoc.adoptedStyleSheets && iframeDoc.adoptedStyleSheets.length > 0) + this.stylesheetManager.adoptStyleSheets(iframeDoc.adoptedStyleSheets, this.mirror.getId(iframeDoc)); + } + handleMessage(message3) { + const crossOriginMessageEvent = message3; + if (crossOriginMessageEvent.data.type !== "rrweb" || crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin) + return; + const iframeSourceWindow = message3.source; + if (!iframeSourceWindow) + return; + const iframeEl = this.crossOriginIframeMap.get(message3.source); + if (!iframeEl) + return; + const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event); + if (transformedEvent) + this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout); + } + transformCrossOriginEvent(iframeEl, e2) { + switch (e2.type) { + case EventType.FullSnapshot: { + this.crossOriginIframeMirror.reset(iframeEl); + this.crossOriginIframeStyleMirror.reset(iframeEl); + this.replaceIdOnNode(e2.data.node, iframeEl); + const rootId = e2.data.node.id; + this.crossOriginIframeRootIdMap.set(iframeEl, rootId); + this.patchRootIdOnNode(e2.data.node, rootId); + return { + timestamp: e2.timestamp, + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.Mutation, + adds: [ + { + parentId: this.mirror.getId(iframeEl), + nextId: null, + node: e2.data.node + } + ], + removes: [], + texts: [], + attributes: [], + isAttachIframe: true + } + }; + } + case EventType.Meta: + case EventType.Load: + case EventType.DomContentLoaded: { + return false; + } + case EventType.Plugin: { + return e2; + } + case EventType.Custom: { + this.replaceIds(e2.data.payload, iframeEl, ["id", "parentId", "previousId", "nextId"]); + return e2; + } + case EventType.IncrementalSnapshot: { + switch (e2.data.source) { + case IncrementalSource.Mutation: { + e2.data.adds.forEach((n2) => { + this.replaceIds(n2, iframeEl, [ + "parentId", + "nextId", + "previousId" + ]); + this.replaceIdOnNode(n2.node, iframeEl); + const rootId = this.crossOriginIframeRootIdMap.get(iframeEl); + rootId && this.patchRootIdOnNode(n2.node, rootId); + }); + e2.data.removes.forEach((n2) => { + this.replaceIds(n2, iframeEl, ["parentId", "id"]); + }); + e2.data.attributes.forEach((n2) => { + this.replaceIds(n2, iframeEl, ["id"]); + }); + e2.data.texts.forEach((n2) => { + this.replaceIds(n2, iframeEl, ["id"]); + }); + return e2; + } + case IncrementalSource.Drag: + case IncrementalSource.TouchMove: + case IncrementalSource.MouseMove: { + e2.data.positions.forEach((p2) => { + this.replaceIds(p2, iframeEl, ["id"]); + }); + return e2; + } + case IncrementalSource.ViewportResize: { + return false; + } + case IncrementalSource.MediaInteraction: + case IncrementalSource.MouseInteraction: + case IncrementalSource.Scroll: + case IncrementalSource.CanvasMutation: + case IncrementalSource.Input: { + this.replaceIds(e2.data, iframeEl, ["id"]); + return e2; + } + case IncrementalSource.StyleSheetRule: + case IncrementalSource.StyleDeclaration: { + this.replaceIds(e2.data, iframeEl, ["id"]); + this.replaceStyleIds(e2.data, iframeEl, ["styleId"]); + return e2; + } + case IncrementalSource.Font: { + return e2; + } + case IncrementalSource.Selection: { + e2.data.ranges.forEach((range2) => { + this.replaceIds(range2, iframeEl, ["start", "end"]); + }); + return e2; + } + case IncrementalSource.AdoptedStyleSheet: { + this.replaceIds(e2.data, iframeEl, ["id"]); + this.replaceStyleIds(e2.data, iframeEl, ["styleIds"]); + _optionalChain$1([e2, "access", (_3) => _3.data, "access", (_4) => _4.styles, "optionalAccess", (_5) => _5.forEach, "call", (_6) => _6((style2) => { + this.replaceStyleIds(style2, iframeEl, ["styleId"]); + })]); + return e2; + } + } + } + } + return false; + } + replace(iframeMirror, obj, iframeEl, keys2) { + for (const key of keys2) { + if (!Array.isArray(obj[key]) && typeof obj[key] !== "number") + continue; + if (Array.isArray(obj[key])) { + obj[key] = iframeMirror.getIds(iframeEl, obj[key]); + } else { + obj[key] = iframeMirror.getId(iframeEl, obj[key]); + } + } + return obj; + } + replaceIds(obj, iframeEl, keys2) { + return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys2); + } + replaceStyleIds(obj, iframeEl, keys2) { + return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys2); + } + replaceIdOnNode(node3, iframeEl) { + this.replaceIds(node3, iframeEl, ["id", "rootId"]); + if ("childNodes" in node3) { + node3.childNodes.forEach((child) => { + this.replaceIdOnNode(child, iframeEl); + }); + } + } + patchRootIdOnNode(node3, rootId) { + if (node3.type !== NodeType$3.Document && !node3.rootId) + node3.rootId = rootId; + if ("childNodes" in node3) { + node3.childNodes.forEach((child) => { + this.patchRootIdOnNode(child, rootId); + }); + } + } +} +class ShadowDomManagerNoop { + static { + __name(this, "ShadowDomManagerNoop"); + } + init() { + } + addShadowRoot() { + } + observeAttachShadow() { + } + reset() { + } +} +class ShadowDomManager { + static { + __name(this, "ShadowDomManager"); + } + constructor(options4) { + this.shadowDoms = /* @__PURE__ */ new WeakSet(); + this.restoreHandlers = []; + this.mutationCb = options4.mutationCb; + this.scrollCb = options4.scrollCb; + this.bypassOptions = options4.bypassOptions; + this.mirror = options4.mirror; + this.init(); + } + init() { + this.reset(); + this.patchAttachShadow(Element, document); + } + addShadowRoot(shadowRoot, doc2) { + if (!isNativeShadowDom(shadowRoot)) + return; + if (this.shadowDoms.has(shadowRoot)) + return; + this.shadowDoms.add(shadowRoot); + this.bypassOptions.canvasManager.addShadowRoot(shadowRoot); + const observer = initMutationObserver({ + ...this.bypassOptions, + doc: doc2, + mutationCb: this.mutationCb, + mirror: this.mirror, + shadowDomManager: this + }, shadowRoot); + this.restoreHandlers.push(() => observer.disconnect()); + this.restoreHandlers.push(initScrollObserver({ + ...this.bypassOptions, + scrollCb: this.scrollCb, + doc: shadowRoot, + mirror: this.mirror + })); + setTimeout$1$1(() => { + if (shadowRoot.adoptedStyleSheets && shadowRoot.adoptedStyleSheets.length > 0) + this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host)); + this.restoreHandlers.push(initAdoptedStyleSheetObserver({ + mirror: this.mirror, + stylesheetManager: this.bypassOptions.stylesheetManager + }, shadowRoot)); + }, 0); + } + observeAttachShadow(iframeElement) { + const iframeDoc = getIFrameContentDocument(iframeElement); + const iframeWindow = getIFrameContentWindow(iframeElement); + if (!iframeDoc || !iframeWindow) + return; + this.patchAttachShadow(iframeWindow.Element, iframeDoc); + } + patchAttachShadow(element, doc2) { + const manager = this; + this.restoreHandlers.push(patch$2(element.prototype, "attachShadow", function(original) { + return function(option3) { + const shadowRoot = original.call(this, option3); + if (this.shadowRoot && inDom(this)) + manager.addShadowRoot(this.shadowRoot, doc2); + return shadowRoot; + }; + })); + } + reset() { + this.restoreHandlers.forEach((handler12) => { + try { + handler12(); + } catch (e2) { + } + }); + this.restoreHandlers = []; + this.shadowDoms = /* @__PURE__ */ new WeakSet(); + this.bypassOptions.canvasManager.resetShadowRoots(); + } +} +class CanvasManagerNoop { + static { + __name(this, "CanvasManagerNoop"); + } + reset() { + } + freeze() { + } + unfreeze() { + } + lock() { + } + unlock() { + } + snapshot() { + } + addWindow() { + } + addShadowRoot() { + } + resetShadowRoots() { + } +} +class StylesheetManager { + static { + __name(this, "StylesheetManager"); + } + constructor(options4) { + this.trackedLinkElements = /* @__PURE__ */ new WeakSet(); + this.styleMirror = new StyleSheetMirror(); + this.mutationCb = options4.mutationCb; + this.adoptedStyleSheetCb = options4.adoptedStyleSheetCb; + } + attachLinkElement(linkEl, childSn) { + if ("_cssText" in childSn.attributes) + this.mutationCb({ + adds: [], + removes: [], + texts: [], + attributes: [ + { + id: childSn.id, + attributes: childSn.attributes + } + ] + }); + this.trackLinkElement(linkEl); + } + trackLinkElement(linkEl) { + if (this.trackedLinkElements.has(linkEl)) + return; + this.trackedLinkElements.add(linkEl); + this.trackStylesheetInLinkElement(linkEl); + } + adoptStyleSheets(sheets, hostId) { + if (sheets.length === 0) + return; + const adoptedStyleSheetData = { + id: hostId, + styleIds: [] + }; + const styles = []; + for (const sheet of sheets) { + let styleId; + if (!this.styleMirror.has(sheet)) { + styleId = this.styleMirror.add(sheet); + styles.push({ + styleId, + rules: Array.from(sheet.rules || CSSRule, (r2, index2) => ({ + rule: stringifyRule(r2), + index: index2 + })) + }); + } else + styleId = this.styleMirror.getId(sheet); + adoptedStyleSheetData.styleIds.push(styleId); + } + if (styles.length > 0) + adoptedStyleSheetData.styles = styles; + this.adoptedStyleSheetCb(adoptedStyleSheetData); + } + reset() { + this.styleMirror.reset(); + this.trackedLinkElements = /* @__PURE__ */ new WeakSet(); + } + trackStylesheetInLinkElement(linkEl) { + } +} +class ProcessedNodeManager { + static { + __name(this, "ProcessedNodeManager"); + } + constructor() { + this.nodeMap = /* @__PURE__ */ new WeakMap(); + this.active = false; + } + inOtherBuffer(node3, thisBuffer) { + const buffers = this.nodeMap.get(node3); + return buffers && Array.from(buffers).some((buffer2) => buffer2 !== thisBuffer); + } + add(node3, buffer2) { + if (!this.active) { + this.active = true; + onRequestAnimationFrame$1(() => { + this.nodeMap = /* @__PURE__ */ new WeakMap(); + this.active = false; + }); + } + this.nodeMap.set(node3, (this.nodeMap.get(node3) || /* @__PURE__ */ new Set()).add(buffer2)); + } + destroy() { + } +} +let wrappedEmit; +let _takeFullSnapshot; +try { + if (Array.from([1], (x2) => x2 * 2)[0] !== 2) { + const cleanFrame = document.createElement("iframe"); + document.body.appendChild(cleanFrame); + Array.from = _optionalChain([cleanFrame, "access", (_2) => _2.contentWindow, "optionalAccess", (_2) => _2.Array, "access", (_3) => _3.from]) || Array.from; + document.body.removeChild(cleanFrame); + } +} catch (err) { + console.debug("Unable to override Array.from", err); +} +const mirror = createMirror(); +function record(options4 = {}) { + const { emit: emit2, checkoutEveryNms, checkoutEveryNth, blockClass = "rr-block", blockSelector = null, unblockSelector = null, ignoreClass = "rr-ignore", ignoreSelector = null, maskAllText = false, maskTextClass = "rr-mask", unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, maxCanvasSize = null, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordDOM = true, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options4.recordAfter === "DOMContentLoaded" ? options4.recordAfter : "load", userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = /* @__PURE__ */ __name(() => false, "keepIframeSrcFn"), ignoreCSSAttributes = /* @__PURE__ */ new Set([]), errorHandler: errorHandler2, onMutation, getCanvasManager } = options4; + registerErrorHandler$1(errorHandler2); + const inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true; + let passEmitsToParent = false; + if (!inEmittingFrame) { + try { + if (window.parent.document) { + passEmitsToParent = false; + } + } catch (e2) { + passEmitsToParent = true; + } + } + if (inEmittingFrame && !emit2) { + throw new Error("emit function is required"); + } + if (!inEmittingFrame && !passEmitsToParent) { + return () => { + }; + } + if (mousemoveWait !== void 0 && sampling.mousemove === void 0) { + sampling.mousemove = mousemoveWait; + } + mirror.reset(); + const maskInputOptions = maskAllInputs === true ? { + color: true, + date: true, + "datetime-local": true, + email: true, + month: true, + number: true, + range: true, + search: true, + tel: true, + text: true, + time: true, + url: true, + week: true, + textarea: true, + select: true, + radio: true, + checkbox: true + } : _maskInputOptions !== void 0 ? _maskInputOptions : {}; + const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === "all" ? { + script: true, + comment: true, + headFavicon: true, + headWhitespace: true, + headMetaSocial: true, + headMetaRobots: true, + headMetaHttpEquiv: true, + headMetaVerification: true, + headMetaAuthorship: _slimDOMOptions === "all", + headMetaDescKeywords: _slimDOMOptions === "all" + } : _slimDOMOptions ? _slimDOMOptions : {}; + polyfill(); + let lastFullSnapshotEvent; + let incrementalSnapshotCount = 0; + const eventProcessor = /* @__PURE__ */ __name((e2) => { + for (const plugin of plugins || []) { + if (plugin.eventProcessor) { + e2 = plugin.eventProcessor(e2); + } + } + if (packFn && !passEmitsToParent) { + e2 = packFn(e2); + } + return e2; + }, "eventProcessor"); + wrappedEmit = /* @__PURE__ */ __name((r2, isCheckout) => { + const e2 = r2; + e2.timestamp = nowTimestamp(); + if (_optionalChain([mutationBuffers, "access", (_4) => _4[0], "optionalAccess", (_5) => _5.isFrozen, "call", (_6) => _6()]) && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) { + mutationBuffers.forEach((buf) => buf.unfreeze()); + } + if (inEmittingFrame) { + _optionalChain([emit2, "optionalCall", (_7) => _7(eventProcessor(e2), isCheckout)]); + } else if (passEmitsToParent) { + const message3 = { + type: "rrweb", + event: eventProcessor(e2), + origin: window.location.origin, + isCheckout + }; + window.parent.postMessage(message3, "*"); + } + if (e2.type === EventType.FullSnapshot) { + lastFullSnapshotEvent = e2; + incrementalSnapshotCount = 0; + } else if (e2.type === EventType.IncrementalSnapshot) { + if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) { + return; + } + incrementalSnapshotCount++; + const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth; + const exceedTime = checkoutEveryNms && lastFullSnapshotEvent && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms; + if (exceedCount || exceedTime) { + takeFullSnapshot2(true); + } + } + }, "wrappedEmit"); + const wrappedMutationEmit = /* @__PURE__ */ __name((m2) => { + wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.Mutation, + ...m2 + } + }); + }, "wrappedMutationEmit"); + const wrappedScrollEmit = /* @__PURE__ */ __name((p2) => wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.Scroll, + ...p2 + } + }), "wrappedScrollEmit"); + const wrappedCanvasMutationEmit = /* @__PURE__ */ __name((p2) => wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.CanvasMutation, + ...p2 + } + }), "wrappedCanvasMutationEmit"); + const wrappedAdoptedStyleSheetEmit = /* @__PURE__ */ __name((a2) => wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.AdoptedStyleSheet, + ...a2 + } + }), "wrappedAdoptedStyleSheetEmit"); + const stylesheetManager = new StylesheetManager({ + mutationCb: wrappedMutationEmit, + adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit + }); + const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === "boolean" && __RRWEB_EXCLUDE_IFRAME__ ? new IframeManagerNoop() : new IframeManager({ + mirror, + mutationCb: wrappedMutationEmit, + stylesheetManager, + recordCrossOriginIframes, + wrappedEmit + }); + for (const plugin of plugins || []) { + if (plugin.getMirror) + plugin.getMirror({ + nodeMirror: mirror, + crossOriginIframeMirror: iframeManager.crossOriginIframeMirror, + crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror + }); + } + const processedNodeManager = new ProcessedNodeManager(); + const canvasManager = _getCanvasManager(getCanvasManager, { + mirror, + win: window, + mutationCb: /* @__PURE__ */ __name((p2) => wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.CanvasMutation, + ...p2 + } + }), "mutationCb"), + recordCanvas, + blockClass, + blockSelector, + unblockSelector, + maxCanvasSize, + sampling: sampling["canvas"], + dataURLOptions, + errorHandler: errorHandler2 + }); + const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === "boolean" && __RRWEB_EXCLUDE_SHADOW_DOM__ ? new ShadowDomManagerNoop() : new ShadowDomManager({ + mutationCb: wrappedMutationEmit, + scrollCb: wrappedScrollEmit, + bypassOptions: { + onMutation, + blockClass, + blockSelector, + unblockSelector, + maskAllText, + maskTextClass, + unmaskTextClass, + maskTextSelector, + unmaskTextSelector, + inlineStylesheet, + maskInputOptions, + dataURLOptions, + maskAttributeFn, + maskTextFn, + maskInputFn, + recordCanvas, + inlineImages, + sampling, + slimDOMOptions, + iframeManager, + stylesheetManager, + canvasManager, + keepIframeSrcFn, + processedNodeManager + }, + mirror + }); + const takeFullSnapshot2 = /* @__PURE__ */ __name((isCheckout = false) => { + if (!recordDOM) { + return; + } + wrappedEmit({ + type: EventType.Meta, + data: { + href: window.location.href, + width: getWindowWidth(), + height: getWindowHeight() + } + }, isCheckout); + stylesheetManager.reset(); + shadowDomManager.init(); + mutationBuffers.forEach((buf) => buf.lock()); + const node3 = snapshot(document, { + mirror, + blockClass, + blockSelector, + unblockSelector, + maskAllText, + maskTextClass, + unmaskTextClass, + maskTextSelector, + unmaskTextSelector, + inlineStylesheet, + maskAllInputs: maskInputOptions, + maskAttributeFn, + maskInputFn, + maskTextFn, + slimDOM: slimDOMOptions, + dataURLOptions, + recordCanvas, + inlineImages, + onSerialize: /* @__PURE__ */ __name((n2) => { + if (isSerializedIframe(n2, mirror)) { + iframeManager.addIframe(n2); + } + if (isSerializedStylesheet(n2, mirror)) { + stylesheetManager.trackLinkElement(n2); + } + if (hasShadowRoot(n2)) { + shadowDomManager.addShadowRoot(n2.shadowRoot, document); + } + }, "onSerialize"), + onIframeLoad: /* @__PURE__ */ __name((iframe, childSn) => { + iframeManager.attachIframe(iframe, childSn); + if (iframe.contentWindow) { + canvasManager.addWindow(iframe.contentWindow); + } + shadowDomManager.observeAttachShadow(iframe); + }, "onIframeLoad"), + onStylesheetLoad: /* @__PURE__ */ __name((linkEl, childSn) => { + stylesheetManager.attachLinkElement(linkEl, childSn); + }, "onStylesheetLoad"), + keepIframeSrcFn + }); + if (!node3) { + return console.warn("Failed to snapshot the document"); + } + wrappedEmit({ + type: EventType.FullSnapshot, + data: { + node: node3, + initialOffset: getWindowScroll(window) + } + }); + mutationBuffers.forEach((buf) => buf.unlock()); + if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0) + stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document)); + }, "takeFullSnapshot"); + _takeFullSnapshot = takeFullSnapshot2; + try { + const handlers2 = []; + const observe2 = /* @__PURE__ */ __name((doc2) => { + return callbackWrapper$1(initObservers)({ + onMutation, + mutationCb: wrappedMutationEmit, + mousemoveCb: /* @__PURE__ */ __name((positions, source) => wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source, + positions + } + }), "mousemoveCb"), + mouseInteractionCb: /* @__PURE__ */ __name((d2) => wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.MouseInteraction, + ...d2 + } + }), "mouseInteractionCb"), + scrollCb: wrappedScrollEmit, + viewportResizeCb: /* @__PURE__ */ __name((d2) => wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.ViewportResize, + ...d2 + } + }), "viewportResizeCb"), + inputCb: /* @__PURE__ */ __name((v2) => wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.Input, + ...v2 + } + }), "inputCb"), + mediaInteractionCb: /* @__PURE__ */ __name((p2) => wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.MediaInteraction, + ...p2 + } + }), "mediaInteractionCb"), + styleSheetRuleCb: /* @__PURE__ */ __name((r2) => wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.StyleSheetRule, + ...r2 + } + }), "styleSheetRuleCb"), + styleDeclarationCb: /* @__PURE__ */ __name((r2) => wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.StyleDeclaration, + ...r2 + } + }), "styleDeclarationCb"), + canvasMutationCb: wrappedCanvasMutationEmit, + fontCb: /* @__PURE__ */ __name((p2) => wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.Font, + ...p2 + } + }), "fontCb"), + selectionCb: /* @__PURE__ */ __name((p2) => { + wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.Selection, + ...p2 + } + }); + }, "selectionCb"), + customElementCb: /* @__PURE__ */ __name((c2) => { + wrappedEmit({ + type: EventType.IncrementalSnapshot, + data: { + source: IncrementalSource.CustomElement, + ...c2 + } + }); + }, "customElementCb"), + blockClass, + ignoreClass, + ignoreSelector, + maskAllText, + maskTextClass, + unmaskTextClass, + maskTextSelector, + unmaskTextSelector, + maskInputOptions, + inlineStylesheet, + sampling, + recordDOM, + recordCanvas, + inlineImages, + userTriggeredOnInput, + collectFonts, + doc: doc2, + maskAttributeFn, + maskInputFn, + maskTextFn, + keepIframeSrcFn, + blockSelector, + unblockSelector, + slimDOMOptions, + dataURLOptions, + mirror, + iframeManager, + stylesheetManager, + shadowDomManager, + processedNodeManager, + canvasManager, + ignoreCSSAttributes, + plugins: _optionalChain([ + plugins, + "optionalAccess", + (_8) => _8.filter, + "call", + (_9) => _9((p2) => p2.observer), + "optionalAccess", + (_10) => _10.map, + "call", + (_11) => _11((p2) => ({ + observer: p2.observer, + options: p2.options, + callback: /* @__PURE__ */ __name((payload) => wrappedEmit({ + type: EventType.Plugin, + data: { + plugin: p2.name, + payload + } + }), "callback") + })) + ]) || [] + }, {}); + }, "observe"); + iframeManager.addLoadListener((iframeEl) => { + try { + handlers2.push(observe2(iframeEl.contentDocument)); + } catch (error2) { + console.warn(error2); + } + }); + const init3 = /* @__PURE__ */ __name(() => { + takeFullSnapshot2(); + handlers2.push(observe2(document)); + }, "init"); + if (document.readyState === "interactive" || document.readyState === "complete") { + init3(); + } else { + handlers2.push(on("DOMContentLoaded", () => { + wrappedEmit({ + type: EventType.DomContentLoaded, + data: {} + }); + if (recordAfter === "DOMContentLoaded") + init3(); + })); + handlers2.push(on("load", () => { + wrappedEmit({ + type: EventType.Load, + data: {} + }); + if (recordAfter === "load") + init3(); + }, window)); + } + return () => { + handlers2.forEach((h2) => h2()); + processedNodeManager.destroy(); + _takeFullSnapshot = void 0; + unregisterErrorHandler(); + }; + } catch (error2) { + console.warn(error2); + } +} +__name(record, "record"); +function takeFullSnapshot(isCheckout) { + if (!_takeFullSnapshot) { + throw new Error("please take full snapshot after start recording"); + } + _takeFullSnapshot(isCheckout); +} +__name(takeFullSnapshot, "takeFullSnapshot"); +record.mirror = mirror; +record.takeFullSnapshot = takeFullSnapshot; +function _getCanvasManager(getCanvasManagerFn, options4) { + try { + return getCanvasManagerFn ? getCanvasManagerFn(options4) : new CanvasManagerNoop(); + } catch (e2) { + console.warn("Unable to initialize CanvasManager"); + return new CanvasManagerNoop(); + } +} +__name(_getCanvasManager, "_getCanvasManager"); +const ReplayEventTypeIncrementalSnapshot = 3; +const ReplayEventTypeCustom = 5; +function timestampToMs(timestamp2) { + const isMs = timestamp2 > 9999999999; + return isMs ? timestamp2 : timestamp2 * 1e3; +} +__name(timestampToMs, "timestampToMs"); +function timestampToS(timestamp2) { + const isMs = timestamp2 > 9999999999; + return isMs ? timestamp2 / 1e3 : timestamp2; +} +__name(timestampToS, "timestampToS"); +function addBreadcrumbEvent(replay, breadcrumb) { + if (breadcrumb.category === "sentry.transaction") { + return; + } + if (["ui.click", "ui.input"].includes(breadcrumb.category)) { + replay.triggerUserActivity(); + } else { + replay.checkAndHandleExpiredSession(); + } + replay.addUpdate(() => { + replay.throttledAddEvent({ + type: EventType.Custom, + // TODO: We were converting from ms to seconds for breadcrumbs, spans, + // but maybe we should just keep them as milliseconds + timestamp: (breadcrumb.timestamp || 0) * 1e3, + data: { + tag: "breadcrumb", + // normalize to max. 10 depth and 1_000 properties per object + payload: normalize$2(breadcrumb, 10, 1e3) + } + }); + return breadcrumb.category === "console"; + }); +} +__name(addBreadcrumbEvent, "addBreadcrumbEvent"); +const INTERACTIVE_SELECTOR = "button,a"; +function getClosestInteractive(element) { + const closestInteractive = element.closest(INTERACTIVE_SELECTOR); + return closestInteractive || element; +} +__name(getClosestInteractive, "getClosestInteractive"); +function getClickTargetNode(event) { + const target2 = getTargetNode(event); + if (!target2 || !(target2 instanceof Element)) { + return target2; + } + return getClosestInteractive(target2); +} +__name(getClickTargetNode, "getClickTargetNode"); +function getTargetNode(event) { + if (isEventWithTarget(event)) { + return event.target; + } + return event; +} +__name(getTargetNode, "getTargetNode"); +function isEventWithTarget(event) { + return typeof event === "object" && !!event && "target" in event; +} +__name(isEventWithTarget, "isEventWithTarget"); +let handlers$2; +function onWindowOpen(cb) { + if (!handlers$2) { + handlers$2 = []; + monkeyPatchWindowOpen(); + } + handlers$2.push(cb); + return () => { + const pos2 = handlers$2 ? handlers$2.indexOf(cb) : -1; + if (pos2 > -1) { + handlers$2.splice(pos2, 1); + } + }; +} +__name(onWindowOpen, "onWindowOpen"); +function monkeyPatchWindowOpen() { + fill(WINDOW$1, "open", function(originalWindowOpen) { + return function(...args) { + if (handlers$2) { + try { + handlers$2.forEach((handler12) => handler12()); + } catch (e2) { + } + } + return originalWindowOpen.apply(WINDOW$1, args); + }; + }); +} +__name(monkeyPatchWindowOpen, "monkeyPatchWindowOpen"); +const IncrementalMutationSources = /* @__PURE__ */ new Set([ + IncrementalSource.Mutation, + IncrementalSource.StyleSheetRule, + IncrementalSource.StyleDeclaration, + IncrementalSource.AdoptedStyleSheet, + IncrementalSource.CanvasMutation, + IncrementalSource.Selection, + IncrementalSource.MediaInteraction +]); +function handleClick$1(clickDetector, clickBreadcrumb, node3) { + clickDetector.handleClick(clickBreadcrumb, node3); +} +__name(handleClick$1, "handleClick$1"); +class ClickDetector { + static { + __name(this, "ClickDetector"); + } + // protected for testing + constructor(replay, slowClickConfig, _addBreadcrumbEvent = addBreadcrumbEvent) { + this._lastMutation = 0; + this._lastScroll = 0; + this._clicks = []; + this._timeout = slowClickConfig.timeout / 1e3; + this._threshold = slowClickConfig.threshold / 1e3; + this._scrollTimeout = slowClickConfig.scrollTimeout / 1e3; + this._replay = replay; + this._ignoreSelector = slowClickConfig.ignoreSelector; + this._addBreadcrumbEvent = _addBreadcrumbEvent; + } + /** Register click detection handlers on mutation or scroll. */ + addListeners() { + const cleanupWindowOpen = onWindowOpen(() => { + this._lastMutation = nowInSeconds(); + }); + this._teardown = () => { + cleanupWindowOpen(); + this._clicks = []; + this._lastMutation = 0; + this._lastScroll = 0; + }; + } + /** Clean up listeners. */ + removeListeners() { + if (this._teardown) { + this._teardown(); + } + if (this._checkClickTimeout) { + clearTimeout(this._checkClickTimeout); + } + } + /** @inheritDoc */ + handleClick(breadcrumb, node3) { + if (ignoreElement(node3, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) { + return; + } + const newClick = { + timestamp: timestampToS(breadcrumb.timestamp), + clickBreadcrumb: breadcrumb, + // Set this to 0 so we know it originates from the click breadcrumb + clickCount: 0, + node: node3 + }; + if (this._clicks.some((click2) => click2.node === newClick.node && Math.abs(click2.timestamp - newClick.timestamp) < 1)) { + return; + } + this._clicks.push(newClick); + if (this._clicks.length === 1) { + this._scheduleCheckClicks(); + } + } + /** @inheritDoc */ + registerMutation(timestamp2 = Date.now()) { + this._lastMutation = timestampToS(timestamp2); + } + /** @inheritDoc */ + registerScroll(timestamp2 = Date.now()) { + this._lastScroll = timestampToS(timestamp2); + } + /** @inheritDoc */ + registerClick(element) { + const node3 = getClosestInteractive(element); + this._handleMultiClick(node3); + } + /** Count multiple clicks on elements. */ + _handleMultiClick(node3) { + this._getClicks(node3).forEach((click2) => { + click2.clickCount++; + }); + } + /** Get all pending clicks for a given node. */ + _getClicks(node3) { + return this._clicks.filter((click2) => click2.node === node3); + } + /** Check the clicks that happened. */ + _checkClicks() { + const timedOutClicks = []; + const now2 = nowInSeconds(); + this._clicks.forEach((click2) => { + if (!click2.mutationAfter && this._lastMutation) { + click2.mutationAfter = click2.timestamp <= this._lastMutation ? this._lastMutation - click2.timestamp : void 0; + } + if (!click2.scrollAfter && this._lastScroll) { + click2.scrollAfter = click2.timestamp <= this._lastScroll ? this._lastScroll - click2.timestamp : void 0; + } + if (click2.timestamp + this._timeout <= now2) { + timedOutClicks.push(click2); + } + }); + for (const click2 of timedOutClicks) { + const pos2 = this._clicks.indexOf(click2); + if (pos2 > -1) { + this._generateBreadcrumbs(click2); + this._clicks.splice(pos2, 1); + } + } + if (this._clicks.length) { + this._scheduleCheckClicks(); + } + } + /** Generate matching breadcrumb(s) for the click. */ + _generateBreadcrumbs(click2) { + const replay = this._replay; + const hadScroll = click2.scrollAfter && click2.scrollAfter <= this._scrollTimeout; + const hadMutation = click2.mutationAfter && click2.mutationAfter <= this._threshold; + const isSlowClick = !hadScroll && !hadMutation; + const { clickCount, clickBreadcrumb } = click2; + if (isSlowClick) { + const timeAfterClickMs = Math.min(click2.mutationAfter || this._timeout, this._timeout) * 1e3; + const endReason = timeAfterClickMs < this._timeout * 1e3 ? "mutation" : "timeout"; + const breadcrumb = { + type: "default", + message: clickBreadcrumb.message, + timestamp: clickBreadcrumb.timestamp, + category: "ui.slowClickDetected", + data: { + ...clickBreadcrumb.data, + url: WINDOW$1.location.href, + route: replay.getCurrentRoute(), + timeAfterClickMs, + endReason, + // If clickCount === 0, it means multiClick was not correctly captured here + // - we still want to send 1 in this case + clickCount: clickCount || 1 + } + }; + this._addBreadcrumbEvent(replay, breadcrumb); + return; + } + if (clickCount > 1) { + const breadcrumb = { + type: "default", + message: clickBreadcrumb.message, + timestamp: clickBreadcrumb.timestamp, + category: "ui.multiClick", + data: { + ...clickBreadcrumb.data, + url: WINDOW$1.location.href, + route: replay.getCurrentRoute(), + clickCount, + metric: true + } + }; + this._addBreadcrumbEvent(replay, breadcrumb); + } + } + /** Schedule to check current clicks. */ + _scheduleCheckClicks() { + if (this._checkClickTimeout) { + clearTimeout(this._checkClickTimeout); + } + this._checkClickTimeout = setTimeout$3(() => this._checkClicks(), 1e3); + } +} +const SLOW_CLICK_TAGS = ["A", "BUTTON", "INPUT"]; +function ignoreElement(node3, ignoreSelector) { + if (!SLOW_CLICK_TAGS.includes(node3.tagName)) { + return true; + } + if (node3.tagName === "INPUT" && !["submit", "button"].includes(node3.getAttribute("type") || "")) { + return true; + } + if (node3.tagName === "A" && (node3.hasAttribute("download") || node3.hasAttribute("target") && node3.getAttribute("target") !== "_self")) { + return true; + } + if (ignoreSelector && node3.matches(ignoreSelector)) { + return true; + } + return false; +} +__name(ignoreElement, "ignoreElement"); +function isClickBreadcrumb(breadcrumb) { + return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === "number" && breadcrumb.timestamp); +} +__name(isClickBreadcrumb, "isClickBreadcrumb"); +function nowInSeconds() { + return Date.now() / 1e3; +} +__name(nowInSeconds, "nowInSeconds"); +function updateClickDetectorForRecordingEvent(clickDetector, event) { + try { + if (!isIncrementalEvent(event)) { + return; + } + const { source } = event.data; + if (IncrementalMutationSources.has(source)) { + clickDetector.registerMutation(event.timestamp); + } + if (source === IncrementalSource.Scroll) { + clickDetector.registerScroll(event.timestamp); + } + if (isIncrementalMouseInteraction(event)) { + const { type, id: id3 } = event.data; + const node3 = record.mirror.getNode(id3); + if (node3 instanceof HTMLElement && type === MouseInteractions.Click) { + clickDetector.registerClick(node3); + } + } + } catch (e2) { + } +} +__name(updateClickDetectorForRecordingEvent, "updateClickDetectorForRecordingEvent"); +function isIncrementalEvent(event) { + return event.type === ReplayEventTypeIncrementalSnapshot; +} +__name(isIncrementalEvent, "isIncrementalEvent"); +function isIncrementalMouseInteraction(event) { + return event.data.source === IncrementalSource.MouseInteraction; +} +__name(isIncrementalMouseInteraction, "isIncrementalMouseInteraction"); +function createBreadcrumb(breadcrumb) { + return { + timestamp: Date.now() / 1e3, + type: "default", + ...breadcrumb + }; +} +__name(createBreadcrumb, "createBreadcrumb"); +var NodeType$4; +(function(NodeType3) { + NodeType3[NodeType3["Document"] = 0] = "Document"; + NodeType3[NodeType3["DocumentType"] = 1] = "DocumentType"; + NodeType3[NodeType3["Element"] = 2] = "Element"; + NodeType3[NodeType3["Text"] = 3] = "Text"; + NodeType3[NodeType3["CDATA"] = 4] = "CDATA"; + NodeType3[NodeType3["Comment"] = 5] = "Comment"; +})(NodeType$4 || (NodeType$4 = {})); +const ATTRIBUTES_TO_RECORD = /* @__PURE__ */ new Set([ + "id", + "class", + "aria-label", + "role", + "name", + "alt", + "title", + "data-test-id", + "data-testid", + "disabled", + "aria-disabled", + "data-sentry-component" +]); +function getAttributesToRecord(attributes) { + const obj = {}; + if (!attributes["data-sentry-component"] && attributes["data-sentry-element"]) { + attributes["data-sentry-component"] = attributes["data-sentry-element"]; + } + for (const key in attributes) { + if (ATTRIBUTES_TO_RECORD.has(key)) { + let normalizedKey = key; + if (key === "data-testid" || key === "data-test-id") { + normalizedKey = "testId"; + } + obj[normalizedKey] = attributes[key]; + } + } + return obj; +} +__name(getAttributesToRecord, "getAttributesToRecord"); +const handleDomListener = /* @__PURE__ */ __name((replay) => { + return (handlerData) => { + if (!replay.isEnabled()) { + return; + } + const result = handleDom(handlerData); + if (!result) { + return; + } + const isClick = handlerData.name === "click"; + const event = isClick ? handlerData.event : void 0; + if (isClick && replay.clickDetector && event && event.target && !event.altKey && !event.metaKey && !event.ctrlKey && !event.shiftKey) { + handleClick$1( + replay.clickDetector, + result, + getClickTargetNode(handlerData.event) + ); + } + addBreadcrumbEvent(replay, result); + }; +}, "handleDomListener"); +function getBaseDomBreadcrumb(target2, message3) { + const nodeId = record.mirror.getId(target2); + const node3 = nodeId && record.mirror.getNode(nodeId); + const meta = node3 && record.mirror.getMeta(node3); + const element = meta && isElement$2(meta) ? meta : null; + return { + message: message3, + data: element ? { + nodeId, + node: { + id: nodeId, + tagName: element.tagName, + textContent: Array.from(element.childNodes).map((node4) => node4.type === NodeType$4.Text && node4.textContent).filter(Boolean).map((text2) => text2.trim()).join(""), + attributes: getAttributesToRecord(element.attributes) + } + } : {} + }; +} +__name(getBaseDomBreadcrumb, "getBaseDomBreadcrumb"); +function handleDom(handlerData) { + const { target: target2, message: message3 } = getDomTarget(handlerData); + return createBreadcrumb({ + category: `ui.${handlerData.name}`, + ...getBaseDomBreadcrumb(target2, message3) + }); +} +__name(handleDom, "handleDom"); +function getDomTarget(handlerData) { + const isClick = handlerData.name === "click"; + let message3; + let target2 = null; + try { + target2 = isClick ? getClickTargetNode(handlerData.event) : getTargetNode(handlerData.event); + message3 = htmlTreeAsString(target2, { maxStringLength: 200 }) || ""; + } catch (e2) { + message3 = ""; + } + return { target: target2, message: message3 }; +} +__name(getDomTarget, "getDomTarget"); +function isElement$2(node3) { + return node3.type === NodeType$4.Element; +} +__name(isElement$2, "isElement$2"); +function handleKeyboardEvent(replay, event) { + if (!replay.isEnabled()) { + return; + } + replay.updateUserActivity(); + const breadcrumb = getKeyboardBreadcrumb(event); + if (!breadcrumb) { + return; + } + addBreadcrumbEvent(replay, breadcrumb); +} +__name(handleKeyboardEvent, "handleKeyboardEvent"); +function getKeyboardBreadcrumb(event) { + const { metaKey, shiftKey, ctrlKey, altKey, key, target: target2 } = event; + if (!target2 || isInputElement(target2) || !key) { + return null; + } + const hasModifierKey = metaKey || ctrlKey || altKey; + const isCharacterKey = key.length === 1; + if (!hasModifierKey && isCharacterKey) { + return null; + } + const message3 = htmlTreeAsString(target2, { maxStringLength: 200 }) || ""; + const baseBreadcrumb = getBaseDomBreadcrumb(target2, message3); + return createBreadcrumb({ + category: "ui.keyDown", + message: message3, + data: { + ...baseBreadcrumb.data, + metaKey, + shiftKey, + ctrlKey, + altKey, + key + } + }); +} +__name(getKeyboardBreadcrumb, "getKeyboardBreadcrumb"); +function isInputElement(target2) { + return target2.tagName === "INPUT" || target2.tagName === "TEXTAREA" || target2.isContentEditable; +} +__name(isInputElement, "isInputElement"); +const ENTRY_TYPES = { + // @ts-expect-error TODO: entry type does not fit the create* functions entry type + resource: createResourceEntry, + paint: createPaintEntry, + // @ts-expect-error TODO: entry type does not fit the create* functions entry type + navigation: createNavigationEntry +}; +function webVitalHandler(getter, replay) { + return ({ metric }) => void replay.replayPerformanceEntries.push(getter(metric)); +} +__name(webVitalHandler, "webVitalHandler"); +function createPerformanceEntries(entries) { + return entries.map(createPerformanceEntry).filter(Boolean); +} +__name(createPerformanceEntries, "createPerformanceEntries"); +function createPerformanceEntry(entry) { + const entryType = ENTRY_TYPES[entry.entryType]; + if (!entryType) { + return null; + } + return entryType(entry); +} +__name(createPerformanceEntry, "createPerformanceEntry"); +function getAbsoluteTime$1(time) { + return ((browserPerformanceTimeOrigin || WINDOW$1.performance.timeOrigin) + time) / 1e3; +} +__name(getAbsoluteTime$1, "getAbsoluteTime$1"); +function createPaintEntry(entry) { + const { duration, entryType, name: name2, startTime } = entry; + const start2 = getAbsoluteTime$1(startTime); + return { + type: entryType, + name: name2, + start: start2, + end: start2 + duration, + data: void 0 + }; +} +__name(createPaintEntry, "createPaintEntry"); +function createNavigationEntry(entry) { + const { + entryType, + name: name2, + decodedBodySize, + duration, + domComplete, + encodedBodySize, + domContentLoadedEventStart, + domContentLoadedEventEnd, + domInteractive, + loadEventStart, + loadEventEnd, + redirectCount, + startTime, + transferSize, + type + } = entry; + if (duration === 0) { + return null; + } + return { + type: `${entryType}.${type}`, + start: getAbsoluteTime$1(startTime), + end: getAbsoluteTime$1(domComplete), + name: name2, + data: { + size: transferSize, + decodedBodySize, + encodedBodySize, + duration, + domInteractive, + domContentLoadedEventStart, + domContentLoadedEventEnd, + loadEventStart, + loadEventEnd, + domComplete, + redirectCount + } + }; +} +__name(createNavigationEntry, "createNavigationEntry"); +function createResourceEntry(entry) { + const { + entryType, + initiatorType, + name: name2, + responseEnd, + startTime, + decodedBodySize, + encodedBodySize, + responseStatus, + transferSize + } = entry; + if (["fetch", "xmlhttprequest"].includes(initiatorType)) { + return null; + } + return { + type: `${entryType}.${initiatorType}`, + start: getAbsoluteTime$1(startTime), + end: getAbsoluteTime$1(responseEnd), + name: name2, + data: { + size: transferSize, + statusCode: responseStatus, + decodedBodySize, + encodedBodySize + } + }; +} +__name(createResourceEntry, "createResourceEntry"); +function getLargestContentfulPaint(metric) { + const lastEntry = metric.entries[metric.entries.length - 1]; + const node3 = lastEntry && lastEntry.element ? [lastEntry.element] : void 0; + return getWebVital(metric, "largest-contentful-paint", node3); +} +__name(getLargestContentfulPaint, "getLargestContentfulPaint"); +function isLayoutShift(entry) { + return entry.sources !== void 0; +} +__name(isLayoutShift, "isLayoutShift"); +function getCumulativeLayoutShift(metric) { + const layoutShifts = []; + const nodes = []; + for (const entry of metric.entries) { + if (isLayoutShift(entry)) { + const nodeIds = []; + for (const source of entry.sources) { + if (source.node) { + nodes.push(source.node); + const nodeId = record.mirror.getId(source.node); + if (nodeId) { + nodeIds.push(nodeId); + } + } + } + layoutShifts.push({ value: entry.value, nodeIds: nodeIds.length ? nodeIds : void 0 }); + } + } + return getWebVital(metric, "cumulative-layout-shift", nodes, layoutShifts); +} +__name(getCumulativeLayoutShift, "getCumulativeLayoutShift"); +function getFirstInputDelay(metric) { + const lastEntry = metric.entries[metric.entries.length - 1]; + const node3 = lastEntry && lastEntry.target ? [lastEntry.target] : void 0; + return getWebVital(metric, "first-input-delay", node3); +} +__name(getFirstInputDelay, "getFirstInputDelay"); +function getInteractionToNextPaint(metric) { + const lastEntry = metric.entries[metric.entries.length - 1]; + const node3 = lastEntry && lastEntry.target ? [lastEntry.target] : void 0; + return getWebVital(metric, "interaction-to-next-paint", node3); +} +__name(getInteractionToNextPaint, "getInteractionToNextPaint"); +function getWebVital(metric, name2, nodes, attributions) { + const value4 = metric.value; + const rating = metric.rating; + const end = getAbsoluteTime$1(value4); + return { + type: "web-vital", + name: name2, + start: end, + end, + data: { + value: value4, + size: value4, + rating, + nodeIds: nodes ? nodes.map((node3) => record.mirror.getId(node3)) : void 0, + attributions + } + }; +} +__name(getWebVital, "getWebVital"); +function setupPerformanceObserver(replay) { + function addPerformanceEntry(entry) { + if (!replay.performanceEntries.includes(entry)) { + replay.performanceEntries.push(entry); + } + } + __name(addPerformanceEntry, "addPerformanceEntry"); + function onEntries({ entries }) { + entries.forEach(addPerformanceEntry); + } + __name(onEntries, "onEntries"); + const clearCallbacks = []; + ["navigation", "paint", "resource"].forEach((type) => { + clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries)); + }); + clearCallbacks.push( + addLcpInstrumentationHandler(webVitalHandler(getLargestContentfulPaint, replay)), + addClsInstrumentationHandler(webVitalHandler(getCumulativeLayoutShift, replay)), + addFidInstrumentationHandler(webVitalHandler(getFirstInputDelay, replay)), + addInpInstrumentationHandler(webVitalHandler(getInteractionToNextPaint, replay)) + ); + return () => { + clearCallbacks.forEach((clearCallback) => clearCallback()); + }; +} +__name(setupPerformanceObserver, "setupPerformanceObserver"); +const DEBUG_BUILD$2 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; +const r$3 = `var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=function(t,e){for(var i=new n(31),a=0;a<31;++a)i[a]=e+=1<>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,a=0,s=new n(r);a>h]=l}else for(o=new n(i),a=0;a>15-t[a]);return o},g=new t(288);for(c=0;c<144;++c)g[c]=8;for(c=144;c<256;++c)g[c]=9;for(c=256;c<280;++c)g[c]=7;for(c=280;c<288;++c)g[c]=8;var w=new t(32);for(c=0;c<32;++c)w[c]=5;var p=d(g,9,0),y=d(w,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},_=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},x=function(r,e){for(var i=[],a=0;ad&&(d=o[a].s);var g=new n(d+1),w=A(i[c-1],g,0);if(w>e){a=0;var p=0,y=w-e,m=1<e))break;p+=m-(1<>=y;p>0;){var M=o[a].s;g[M]=0&&p;--a){var E=o[a].s;g[E]==e&&(--g[E],++p)}w=e}return{t:new t(g),l:w}},A=function(t,n,r){return-1==t.s?Math.max(A(t.l,n,r+1),A(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,a=t[0],s=1,o=function(t){e[i++]=t},f=1;f<=r;++f)if(t[f]==a&&f!=r)++s;else{if(!a&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(a),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(a);s=1,a=t[f]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a4&&!H[a[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(f,g)+T(h,w)+l,X=T(f,M)+T(h,U)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=p,P=g,Q=y,R=w;for(B=0;B255){_(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;_(r,m,Q[et]),m+=R[et],et>3&&(_(r,m,rt>>5&8191),m+=i[et])}else _(r,m,N[rt]),m+=P[rt]}return _(r,m,N[256]),m+P[256]},C=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e>>8;t=r},d:function(){return~t}}},L=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,a=0|r.length,s=0;s!=a;){for(var o=Math.min(s+2655,a);s>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},O=function(a,s,o,f,u){if(!u&&(u={l:1},s.dictionary)){var c=s.dictionary.subarray(-32768),v=new t(c.length+a.length);v.set(c),v.set(a,c.length),a=v,u.w=c.length}return function(a,s,o,f,u,c){var v=c.z||a.length,d=new t(f+v+5*(1+Math.ceil(v/7e3))+u),g=d.subarray(f,d.length-u),w=c.l,p=7&(c.r||0);if(s){p&&(g[0]=c.r>>3);for(var y=C[s-1],M=y>>13,E=8191&y,z=(1<7e3||q>24576)&&(N>423||!w)){p=U(a,g,0,F,I,S,O,q,G,j-G,p),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(a[j+Q]==a[j+Q-W]){for(var $=0;$Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;Pnt&&(nt=et,K=rt)}}}W+=(J=K)-(K=_[J])&32767}if(R){F[q++]=268435456|h[Q]<<18|l[R];var it=31&h[Q],at=31&l[R];O+=e[it]+i[at],++I[257+it],++S[at],B=j+Q,++L}else F[q++]=a[j],++I[a[j]]}}for(j=Math.max(j,B);j=v&&(g[p/8|0]=w,st=v),p=k(g,p+1,a.subarray(j,st))}c.i=v}return b(d,0,f+m(p)+u)}(a,null==s.level?6:s.level,null==s.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(a.length)))):12+s.mem,o,f,u)},j=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},q=function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&j(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}},B=function(t){return 10+(t.filename?t.filename.length+1:0)},G=function(){function n(n,r){if("function"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(O(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var a=this.b.length-this.s.z;a&&(this.b.set(n.subarray(0,a),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(a),32768),this.s.z=n.length-a+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n}();var H=function(){function t(t,n){this.c=L(),this.v=1,G.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),G.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=O(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=L();i.p(n.dictionary),j(t,2,i.d())}}(r,this.o),this.v=0),n&&j(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),J="undefined"!=typeof TextEncoder&&new TextEncoder,K="undefined"!=typeof TextDecoder&&new TextDecoder;try{K.decode(F,{stream:!0})}catch(t){}var N=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(P(t),this.d=n||!1)},t}();function P(n,r){if(J)return J.encode(n);for(var e=n.length,i=new t(n.length+(n.length>>1)),a=0,s=function(t){i[a++]=t},o=0;oi.length){var f=new t(a+8+(e-o<<1));f.set(i),i=f}var h=n.charCodeAt(o);h<128||r?s(h):h<2048?(s(192|h>>6),s(128|63&h)):h>55295&&h<57344?(s(240|(h=65536+(1047552&h)|1023&n.charCodeAt(++o))>>18),s(128|h>>12&63),s(128|h>>6&63),s(128|63&h)):(s(224|h>>12),s(128|h>>6&63),s(128|63&h))}return b(i,0,a)}function Q(t){return function(t,n){n||(n={});var r=S(),e=t.length;r.p(t);var i=O(t,n,B(n),8),a=i.length;return q(i,n),j(i,a-8,r.d()),j(i,a-4,e),i}(P(t))}const R=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error("Adding invalid event");const n=this._hasEvents?",":"";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push("]",!0);const t=function(t){let n=0;for(const r of t)n+=r.length;const r=new Uint8Array(n);for(let n=0,e=0,i=t.length;n{this._deflatedData.push(t)},this.stream=new N(((t,n)=>{this.deflate.push(t,n)})),this.stream.push("[")}},V={clear:()=>{R.clear()},addEvent:t=>R.addEvent(t),finish:()=>R.finish(),compress:t=>Q(t)};addEventListener("message",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in V&&"function"==typeof V[n])try{const t=V[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:"init",success:!0,response:void 0});`; +function e$1() { + const e2 = new Blob([r$3]); + return URL.createObjectURL(e2); +} +__name(e$1, "e$1"); +const CONSOLE_LEVELS = ["info", "warn", "error", "log"]; +const PREFIX$1 = "[Replay] "; +function _addBreadcrumb(message3, level = "info") { + addBreadcrumb( + { + category: "console", + data: { + logger: "replay" + }, + level, + message: `${PREFIX$1}${message3}` + }, + { level } + ); +} +__name(_addBreadcrumb, "_addBreadcrumb"); +function makeReplayLogger() { + let _capture = false; + let _trace = false; + const _logger = { + exception: /* @__PURE__ */ __name(() => void 0, "exception"), + infoTick: /* @__PURE__ */ __name(() => void 0, "infoTick"), + setConfig: /* @__PURE__ */ __name((opts) => { + _capture = opts.captureExceptions; + _trace = opts.traceInternals; + }, "setConfig") + }; + if (DEBUG_BUILD$2) { + CONSOLE_LEVELS.forEach((name2) => { + _logger[name2] = (...args) => { + logger$2[name2](PREFIX$1, ...args); + if (_trace) { + _addBreadcrumb(args.join(""), severityLevelFromString(name2)); + } + }; + }); + _logger.exception = (error2, ...message3) => { + if (message3.length && _logger.error) { + _logger.error(...message3); + } + logger$2.error(PREFIX$1, error2); + if (_capture) { + captureException(error2); + } else if (_trace) { + _addBreadcrumb(error2, "error"); + } + }; + _logger.infoTick = (...args) => { + logger$2.info(PREFIX$1, ...args); + if (_trace) { + setTimeout(() => _addBreadcrumb(args[0]), 0); + } + }; + } else { + CONSOLE_LEVELS.forEach((name2) => { + _logger[name2] = () => void 0; + }); + } + return _logger; +} +__name(makeReplayLogger, "makeReplayLogger"); +const logger$1 = makeReplayLogger(); +class EventBufferSizeExceededError extends Error { + static { + __name(this, "EventBufferSizeExceededError"); + } + constructor() { + super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`); + } +} +class EventBufferArray { + static { + __name(this, "EventBufferArray"); + } + /** All the events that are buffered to be sent. */ + /** @inheritdoc */ + /** @inheritdoc */ + constructor() { + this.events = []; + this._totalSize = 0; + this.hasCheckout = false; + this.waitForCheckout = false; + } + /** @inheritdoc */ + get hasEvents() { + return this.events.length > 0; + } + /** @inheritdoc */ + get type() { + return "sync"; + } + /** @inheritdoc */ + destroy() { + this.events = []; + } + /** @inheritdoc */ + async addEvent(event) { + const eventSize = JSON.stringify(event).length; + this._totalSize += eventSize; + if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) { + throw new EventBufferSizeExceededError(); + } + this.events.push(event); + } + /** @inheritdoc */ + finish() { + return new Promise((resolve2) => { + const eventsRet = this.events; + this.clear(); + resolve2(JSON.stringify(eventsRet)); + }); + } + /** @inheritdoc */ + clear() { + this.events = []; + this._totalSize = 0; + this.hasCheckout = false; + } + /** @inheritdoc */ + getEarliestTimestamp() { + const timestamp2 = this.events.map((event) => event.timestamp).sort()[0]; + if (!timestamp2) { + return null; + } + return timestampToMs(timestamp2); + } +} +class WorkerHandler { + static { + __name(this, "WorkerHandler"); + } + constructor(worker) { + this._worker = worker; + this._id = 0; + } + /** + * Ensure the worker is ready (or not). + * This will either resolve when the worker is ready, or reject if an error occurred. + */ + ensureReady() { + if (this._ensureReadyPromise) { + return this._ensureReadyPromise; + } + this._ensureReadyPromise = new Promise((resolve2, reject3) => { + this._worker.addEventListener( + "message", + ({ data: data26 }) => { + if (data26.success) { + resolve2(); + } else { + reject3(); + } + }, + { once: true } + ); + this._worker.addEventListener( + "error", + (error2) => { + reject3(error2); + }, + { once: true } + ); + }); + return this._ensureReadyPromise; + } + /** + * Destroy the worker. + */ + destroy() { + DEBUG_BUILD$2 && logger$1.info("Destroying compression worker"); + this._worker.terminate(); + } + /** + * Post message to worker and wait for response before resolving promise. + */ + postMessage(method, arg) { + const id3 = this._getAndIncrementId(); + return new Promise((resolve2, reject3) => { + const listener = /* @__PURE__ */ __name(({ data: data26 }) => { + const response = data26; + if (response.method !== method) { + return; + } + if (response.id !== id3) { + return; + } + this._worker.removeEventListener("message", listener); + if (!response.success) { + DEBUG_BUILD$2 && logger$1.error("Error in compression worker: ", response.response); + reject3(new Error("Error in compression worker")); + return; + } + resolve2(response.response); + }, "listener"); + this._worker.addEventListener("message", listener); + this._worker.postMessage({ id: id3, method, arg }); + }); + } + /** Get the current ID and increment it for the next call. */ + _getAndIncrementId() { + return this._id++; + } +} +class EventBufferCompressionWorker { + static { + __name(this, "EventBufferCompressionWorker"); + } + /** @inheritdoc */ + /** @inheritdoc */ + constructor(worker) { + this._worker = new WorkerHandler(worker); + this._earliestTimestamp = null; + this._totalSize = 0; + this.hasCheckout = false; + this.waitForCheckout = false; + } + /** @inheritdoc */ + get hasEvents() { + return !!this._earliestTimestamp; + } + /** @inheritdoc */ + get type() { + return "worker"; + } + /** + * Ensure the worker is ready (or not). + * This will either resolve when the worker is ready, or reject if an error occurred. + */ + ensureReady() { + return this._worker.ensureReady(); + } + /** + * Destroy the event buffer. + */ + destroy() { + this._worker.destroy(); + } + /** + * Add an event to the event buffer. + * + * Returns true if event was successfully received and processed by worker. + */ + addEvent(event) { + const timestamp2 = timestampToMs(event.timestamp); + if (!this._earliestTimestamp || timestamp2 < this._earliestTimestamp) { + this._earliestTimestamp = timestamp2; + } + const data26 = JSON.stringify(event); + this._totalSize += data26.length; + if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) { + return Promise.reject(new EventBufferSizeExceededError()); + } + return this._sendEventToWorker(data26); + } + /** + * Finish the event buffer and return the compressed data. + */ + finish() { + return this._finishRequest(); + } + /** @inheritdoc */ + clear() { + this._earliestTimestamp = null; + this._totalSize = 0; + this.hasCheckout = false; + this._worker.postMessage("clear").then(null, (e2) => { + DEBUG_BUILD$2 && logger$1.exception(e2, 'Sending "clear" message to worker failed', e2); + }); + } + /** @inheritdoc */ + getEarliestTimestamp() { + return this._earliestTimestamp; + } + /** + * Send the event to the worker. + */ + _sendEventToWorker(data26) { + return this._worker.postMessage("addEvent", data26); + } + /** + * Finish the request and return the compressed data from the worker. + */ + async _finishRequest() { + const response = await this._worker.postMessage("finish"); + this._earliestTimestamp = null; + this._totalSize = 0; + return response; + } +} +class EventBufferProxy { + static { + __name(this, "EventBufferProxy"); + } + constructor(worker) { + this._fallback = new EventBufferArray(); + this._compression = new EventBufferCompressionWorker(worker); + this._used = this._fallback; + this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded(); + } + /** @inheritdoc */ + get waitForCheckout() { + return this._used.waitForCheckout; + } + /** @inheritdoc */ + get type() { + return this._used.type; + } + /** @inheritDoc */ + get hasEvents() { + return this._used.hasEvents; + } + /** @inheritdoc */ + get hasCheckout() { + return this._used.hasCheckout; + } + /** @inheritdoc */ + set hasCheckout(value4) { + this._used.hasCheckout = value4; + } + /** @inheritdoc */ + // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures + set waitForCheckout(value4) { + this._used.waitForCheckout = value4; + } + /** @inheritDoc */ + destroy() { + this._fallback.destroy(); + this._compression.destroy(); + } + /** @inheritdoc */ + clear() { + return this._used.clear(); + } + /** @inheritdoc */ + getEarliestTimestamp() { + return this._used.getEarliestTimestamp(); + } + /** + * Add an event to the event buffer. + * + * Returns true if event was successfully added. + */ + addEvent(event) { + return this._used.addEvent(event); + } + /** @inheritDoc */ + async finish() { + await this.ensureWorkerIsLoaded(); + return this._used.finish(); + } + /** Ensure the worker has loaded. */ + ensureWorkerIsLoaded() { + return this._ensureWorkerIsLoadedPromise; + } + /** Actually check if the worker has been loaded. */ + async _ensureWorkerIsLoaded() { + try { + await this._compression.ensureReady(); + } catch (error2) { + DEBUG_BUILD$2 && logger$1.exception(error2, "Failed to load the compression worker, falling back to simple buffer"); + return; + } + await this._switchToCompressionWorker(); + } + /** Switch the used buffer to the compression worker. */ + async _switchToCompressionWorker() { + const { events: events2, hasCheckout, waitForCheckout } = this._fallback; + const addEventPromises = []; + for (const event of events2) { + addEventPromises.push(this._compression.addEvent(event)); + } + this._compression.hasCheckout = hasCheckout; + this._compression.waitForCheckout = waitForCheckout; + this._used = this._compression; + try { + await Promise.all(addEventPromises); + this._fallback.clear(); + } catch (error2) { + DEBUG_BUILD$2 && logger$1.exception(error2, "Failed to add events when switching buffers."); + } + } +} +function createEventBuffer({ + useCompression, + workerUrl: customWorkerUrl +}) { + if (useCompression && // eslint-disable-next-line no-restricted-globals + window.Worker) { + const worker = _loadWorker(customWorkerUrl); + if (worker) { + return worker; + } + } + DEBUG_BUILD$2 && logger$1.info("Using simple buffer"); + return new EventBufferArray(); +} +__name(createEventBuffer, "createEventBuffer"); +function _loadWorker(customWorkerUrl) { + try { + const workerUrl = customWorkerUrl || _getWorkerUrl(); + if (!workerUrl) { + return; + } + DEBUG_BUILD$2 && logger$1.info(`Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ""}`); + const worker = new Worker(workerUrl); + return new EventBufferProxy(worker); + } catch (error2) { + DEBUG_BUILD$2 && logger$1.exception(error2, "Failed to create compression worker"); + } +} +__name(_loadWorker, "_loadWorker"); +function _getWorkerUrl() { + if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === "undefined" || !__SENTRY_EXCLUDE_REPLAY_WORKER__) { + return e$1(); + } + return ""; +} +__name(_getWorkerUrl, "_getWorkerUrl"); +function hasSessionStorage() { + try { + return "sessionStorage" in WINDOW$1 && !!WINDOW$1.sessionStorage; + } catch (e2) { + return false; + } +} +__name(hasSessionStorage, "hasSessionStorage"); +function clearSession(replay) { + deleteSession(); + replay.session = void 0; +} +__name(clearSession, "clearSession"); +function deleteSession() { + if (!hasSessionStorage()) { + return; + } + try { + WINDOW$1.sessionStorage.removeItem(REPLAY_SESSION_KEY); + } catch (e2) { + } +} +__name(deleteSession, "deleteSession"); +function isSampled(sampleRate) { + if (sampleRate === void 0) { + return false; + } + return Math.random() < sampleRate; +} +__name(isSampled, "isSampled"); +function makeSession(session) { + const now2 = Date.now(); + const id3 = session.id || uuid4(); + const started = session.started || now2; + const lastActivity = session.lastActivity || now2; + const segmentId = session.segmentId || 0; + const sampled = session.sampled; + const previousSessionId = session.previousSessionId; + return { + id: id3, + started, + lastActivity, + segmentId, + sampled, + previousSessionId + }; +} +__name(makeSession, "makeSession"); +function saveSession(session) { + if (!hasSessionStorage()) { + return; + } + try { + WINDOW$1.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session)); + } catch (e2) { + } +} +__name(saveSession, "saveSession"); +function getSessionSampleType(sessionSampleRate, allowBuffering) { + return isSampled(sessionSampleRate) ? "session" : allowBuffering ? "buffer" : false; +} +__name(getSessionSampleType, "getSessionSampleType"); +function createSession({ sessionSampleRate, allowBuffering, stickySession = false }, { previousSessionId } = {}) { + const sampled = getSessionSampleType(sessionSampleRate, allowBuffering); + const session = makeSession({ + sampled, + previousSessionId + }); + if (stickySession) { + saveSession(session); + } + return session; +} +__name(createSession, "createSession"); +function fetchSession() { + if (!hasSessionStorage()) { + return null; + } + try { + const sessionStringFromStorage = WINDOW$1.sessionStorage.getItem(REPLAY_SESSION_KEY); + if (!sessionStringFromStorage) { + return null; + } + const sessionObj = JSON.parse(sessionStringFromStorage); + DEBUG_BUILD$2 && logger$1.infoTick("Loading existing session"); + return makeSession(sessionObj); + } catch (e2) { + return null; + } +} +__name(fetchSession, "fetchSession"); +function isExpired(initialTime, expiry, targetTime = +/* @__PURE__ */ new Date()) { + if (initialTime === null || expiry === void 0 || expiry < 0) { + return true; + } + if (expiry === 0) { + return false; + } + return initialTime + expiry <= targetTime; +} +__name(isExpired, "isExpired"); +function isSessionExpired(session, { + maxReplayDuration, + sessionIdleExpire, + targetTime = Date.now() +}) { + return ( + // First, check that maximum session length has not been exceeded + isExpired(session.started, maxReplayDuration, targetTime) || // check that the idle timeout has not been exceeded (i.e. user has + // performed an action within the last `sessionIdleExpire` ms) + isExpired(session.lastActivity, sessionIdleExpire, targetTime) + ); +} +__name(isSessionExpired, "isSessionExpired"); +function shouldRefreshSession(session, { sessionIdleExpire, maxReplayDuration }) { + if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) { + return false; + } + if (session.sampled === "buffer" && session.segmentId === 0) { + return false; + } + return true; +} +__name(shouldRefreshSession, "shouldRefreshSession"); +function loadOrCreateSession({ + sessionIdleExpire, + maxReplayDuration, + previousSessionId +}, sessionOptions) { + const existingSession = sessionOptions.stickySession && fetchSession(); + if (!existingSession) { + DEBUG_BUILD$2 && logger$1.infoTick("Creating new session"); + return createSession(sessionOptions, { previousSessionId }); + } + if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) { + return existingSession; + } + DEBUG_BUILD$2 && logger$1.infoTick("Session in sessionStorage is expired, creating new one..."); + return createSession(sessionOptions, { previousSessionId: existingSession.id }); +} +__name(loadOrCreateSession, "loadOrCreateSession"); +function isCustomEvent(event) { + return event.type === EventType.Custom; +} +__name(isCustomEvent, "isCustomEvent"); +function addEventSync(replay, event, isCheckout) { + if (!shouldAddEvent(replay, event)) { + return false; + } + _addEvent(replay, event, isCheckout); + return true; +} +__name(addEventSync, "addEventSync"); +function addEvent(replay, event, isCheckout) { + if (!shouldAddEvent(replay, event)) { + return Promise.resolve(null); + } + return _addEvent(replay, event, isCheckout); +} +__name(addEvent, "addEvent"); +async function _addEvent(replay, event, isCheckout) { + const { eventBuffer } = replay; + if (!eventBuffer || eventBuffer.waitForCheckout && !isCheckout) { + return null; + } + const isBufferMode = replay.recordingMode === "buffer"; + try { + if (isCheckout && isBufferMode) { + eventBuffer.clear(); + } + if (isCheckout) { + eventBuffer.hasCheckout = true; + eventBuffer.waitForCheckout = false; + } + const replayOptions = replay.getOptions(); + const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent); + if (!eventAfterPossibleCallback) { + return; + } + return await eventBuffer.addEvent(eventAfterPossibleCallback); + } catch (error2) { + const isExceeded = error2 && error2 instanceof EventBufferSizeExceededError; + const reason = isExceeded ? "addEventSizeExceeded" : "addEvent"; + if (isExceeded && isBufferMode) { + eventBuffer.clear(); + eventBuffer.waitForCheckout = true; + return null; + } + replay.handleException(error2); + await replay.stop({ reason }); + const client = getClient(); + if (client) { + client.recordDroppedEvent("internal_sdk_error", "replay"); + } + } +} +__name(_addEvent, "_addEvent"); +function shouldAddEvent(replay, event) { + if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) { + return false; + } + const timestampInMs = timestampToMs(event.timestamp); + if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) { + return false; + } + if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) { + DEBUG_BUILD$2 && logger$1.infoTick(`Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`); + return false; + } + return true; +} +__name(shouldAddEvent, "shouldAddEvent"); +function maybeApplyCallback(event, callback) { + try { + if (typeof callback === "function" && isCustomEvent(event)) { + return callback(event); + } + } catch (error2) { + DEBUG_BUILD$2 && logger$1.exception(error2, "An error occurred in the `beforeAddRecordingEvent` callback, skipping the event..."); + return null; + } + return event; +} +__name(maybeApplyCallback, "maybeApplyCallback"); +function isErrorEvent(event) { + return !event.type; +} +__name(isErrorEvent, "isErrorEvent"); +function isTransactionEvent(event) { + return event.type === "transaction"; +} +__name(isTransactionEvent, "isTransactionEvent"); +function isReplayEvent(event) { + return event.type === "replay_event"; +} +__name(isReplayEvent, "isReplayEvent"); +function isFeedbackEvent(event) { + return event.type === "feedback"; +} +__name(isFeedbackEvent, "isFeedbackEvent"); +function handleAfterSendEvent(replay) { + return (event, sendResponse) => { + if (!replay.isEnabled() || !isErrorEvent(event) && !isTransactionEvent(event)) { + return; + } + const statusCode = sendResponse && sendResponse.statusCode; + if (!statusCode || statusCode < 200 || statusCode >= 300) { + return; + } + if (isTransactionEvent(event)) { + handleTransactionEvent(replay, event); + return; + } + handleErrorEvent(replay, event); + }; +} +__name(handleAfterSendEvent, "handleAfterSendEvent"); +function handleTransactionEvent(replay, event) { + const replayContext = replay.getContext(); + if (event.contexts && event.contexts.trace && event.contexts.trace.trace_id && replayContext.traceIds.size < 100) { + replayContext.traceIds.add(event.contexts.trace.trace_id); + } +} +__name(handleTransactionEvent, "handleTransactionEvent"); +function handleErrorEvent(replay, event) { + const replayContext = replay.getContext(); + if (event.event_id && replayContext.errorIds.size < 100) { + replayContext.errorIds.add(event.event_id); + } + if (replay.recordingMode !== "buffer" || !event.tags || !event.tags.replayId) { + return; + } + const { beforeErrorSampling } = replay.getOptions(); + if (typeof beforeErrorSampling === "function" && !beforeErrorSampling(event)) { + return; + } + setTimeout$3(async () => { + try { + await replay.sendBufferedReplayOrFlush(); + } catch (err) { + replay.handleException(err); + } + }); +} +__name(handleErrorEvent, "handleErrorEvent"); +function handleBeforeSendEvent(replay) { + return (event) => { + if (!replay.isEnabled() || !isErrorEvent(event)) { + return; + } + handleHydrationError(replay, event); + }; +} +__name(handleBeforeSendEvent, "handleBeforeSendEvent"); +function handleHydrationError(replay, event) { + const exceptionValue = event.exception && event.exception.values && event.exception.values[0] && event.exception.values[0].value; + if (typeof exceptionValue !== "string") { + return; + } + if ( + // Only matches errors in production builds of react-dom + // Example https://reactjs.org/docs/error-decoder.html?invariant=423 + // With newer React versions, the messages changed to a different website https://react.dev/errors/418 + exceptionValue.match( + /(reactjs\.org\/docs\/error-decoder\.html\?invariant=|react\.dev\/errors\/)(418|419|422|423|425)/ + ) || // Development builds of react-dom + // Error 1: Hydration failed because the initial UI does not match what was rendered on the server. + // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match. + exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i) + ) { + const breadcrumb = createBreadcrumb({ + category: "replay.hydrate-error", + data: { + url: getLocationHref() + } + }); + addBreadcrumbEvent(replay, breadcrumb); + } +} +__name(handleHydrationError, "handleHydrationError"); +function handleBreadcrumbs(replay) { + const client = getClient(); + if (!client) { + return; + } + client.on("beforeAddBreadcrumb", (breadcrumb) => beforeAddBreadcrumb(replay, breadcrumb)); +} +__name(handleBreadcrumbs, "handleBreadcrumbs"); +function beforeAddBreadcrumb(replay, breadcrumb) { + if (!replay.isEnabled() || !isBreadcrumbWithCategory(breadcrumb)) { + return; + } + const result = normalizeBreadcrumb(breadcrumb); + if (result) { + addBreadcrumbEvent(replay, result); + } +} +__name(beforeAddBreadcrumb, "beforeAddBreadcrumb"); +function normalizeBreadcrumb(breadcrumb) { + if (!isBreadcrumbWithCategory(breadcrumb) || [ + // fetch & xhr are handled separately,in handleNetworkBreadcrumbs + "fetch", + "xhr", + // These two are breadcrumbs for emitted sentry events, we don't care about them + "sentry.event", + "sentry.transaction" + ].includes(breadcrumb.category) || // We capture UI breadcrumbs separately + breadcrumb.category.startsWith("ui.")) { + return null; + } + if (breadcrumb.category === "console") { + return normalizeConsoleBreadcrumb(breadcrumb); + } + return createBreadcrumb(breadcrumb); +} +__name(normalizeBreadcrumb, "normalizeBreadcrumb"); +function normalizeConsoleBreadcrumb(breadcrumb) { + const args = breadcrumb.data && breadcrumb.data.arguments; + if (!Array.isArray(args) || args.length === 0) { + return createBreadcrumb(breadcrumb); + } + let isTruncated = false; + const normalizedArgs = args.map((arg) => { + if (!arg) { + return arg; + } + if (typeof arg === "string") { + if (arg.length > CONSOLE_ARG_MAX_SIZE) { + isTruncated = true; + return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`; + } + return arg; + } + if (typeof arg === "object") { + try { + const normalizedArg = normalize$2(arg, 7); + const stringified = JSON.stringify(normalizedArg); + if (stringified.length > CONSOLE_ARG_MAX_SIZE) { + isTruncated = true; + return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}…`; + } + return normalizedArg; + } catch (e2) { + } + } + return arg; + }); + return createBreadcrumb({ + ...breadcrumb, + data: { + ...breadcrumb.data, + arguments: normalizedArgs, + ...isTruncated ? { _meta: { warnings: ["CONSOLE_ARG_TRUNCATED"] } } : {} + } + }); +} +__name(normalizeConsoleBreadcrumb, "normalizeConsoleBreadcrumb"); +function isBreadcrumbWithCategory(breadcrumb) { + return !!breadcrumb.category; +} +__name(isBreadcrumbWithCategory, "isBreadcrumbWithCategory"); +function isRrwebError(event, hint) { + if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) { + return false; + } + if (hint.originalException && hint.originalException.__rrweb__) { + return true; + } + return false; +} +__name(isRrwebError, "isRrwebError"); +function resetReplayIdOnDynamicSamplingContext() { + const dsc = getCurrentScope$1().getPropagationContext().dsc; + if (dsc) { + delete dsc.replay_id; + } + const activeSpan = getActiveSpan(); + if (activeSpan) { + const dsc2 = getDynamicSamplingContextFromSpan(activeSpan); + delete dsc2.replay_id; + } +} +__name(resetReplayIdOnDynamicSamplingContext, "resetReplayIdOnDynamicSamplingContext"); +function addFeedbackBreadcrumb(replay, event) { + replay.triggerUserActivity(); + replay.addUpdate(() => { + if (!event.timestamp) { + return true; + } + replay.throttledAddEvent({ + type: EventType.Custom, + timestamp: event.timestamp * 1e3, + data: { + tag: "breadcrumb", + payload: { + timestamp: event.timestamp, + type: "default", + category: "sentry.feedback", + data: { + feedbackId: event.event_id + } + } + } + }); + return false; + }); +} +__name(addFeedbackBreadcrumb, "addFeedbackBreadcrumb"); +function shouldSampleForBufferEvent(replay, event) { + if (replay.recordingMode !== "buffer") { + return false; + } + if (event.message === UNABLE_TO_SEND_REPLAY) { + return false; + } + if (!event.exception || event.type) { + return false; + } + return isSampled(replay.getOptions().errorSampleRate); +} +__name(shouldSampleForBufferEvent, "shouldSampleForBufferEvent"); +function handleGlobalEventListener(replay) { + return Object.assign( + (event, hint) => { + if (!replay.isEnabled() || replay.isPaused()) { + return event; + } + if (isReplayEvent(event)) { + delete event.breadcrumbs; + return event; + } + if (!isErrorEvent(event) && !isTransactionEvent(event) && !isFeedbackEvent(event)) { + return event; + } + const isSessionActive = replay.checkAndHandleExpiredSession(); + if (!isSessionActive) { + resetReplayIdOnDynamicSamplingContext(); + return event; + } + if (isFeedbackEvent(event)) { + replay.flush(); + event.contexts.feedback.replay_id = replay.getSessionId(); + addFeedbackBreadcrumb(replay, event); + return event; + } + if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) { + DEBUG_BUILD$2 && logger$1.log("Ignoring error from rrweb internals", event); + return null; + } + const isErrorEventSampled = shouldSampleForBufferEvent(replay, event); + const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === "session"; + if (shouldTagReplayId) { + event.tags = { ...event.tags, replayId: replay.getSessionId() }; + } + return event; + }, + { id: "Replay" } + ); +} +__name(handleGlobalEventListener, "handleGlobalEventListener"); +function createPerformanceSpans(replay, entries) { + return entries.map(({ type, start: start2, end, name: name2, data: data26 }) => { + const response = replay.throttledAddEvent({ + type: EventType.Custom, + timestamp: start2, + data: { + tag: "performanceSpan", + payload: { + op: type, + description: name2, + startTimestamp: start2, + endTimestamp: end, + data: data26 + } + } + }); + return typeof response === "string" ? Promise.resolve(null) : response; + }); +} +__name(createPerformanceSpans, "createPerformanceSpans"); +function handleHistory(handlerData) { + const { from: from2, to } = handlerData; + const now2 = Date.now() / 1e3; + return { + type: "navigation.push", + start: now2, + end: now2, + name: to, + data: { + previous: from2 + } + }; +} +__name(handleHistory, "handleHistory"); +function handleHistorySpanListener(replay) { + return (handlerData) => { + if (!replay.isEnabled()) { + return; + } + const result = handleHistory(handlerData); + if (result === null) { + return; + } + replay.getContext().urls.push(result.name); + replay.triggerUserActivity(); + replay.addUpdate(() => { + createPerformanceSpans(replay, [result]); + return false; + }); + }; +} +__name(handleHistorySpanListener, "handleHistorySpanListener"); +function shouldFilterRequest(replay, url) { + if (DEBUG_BUILD$2 && replay.getOptions()._experiments.traceInternals) { + return false; + } + return isSentryRequestUrl(url, getClient()); +} +__name(shouldFilterRequest, "shouldFilterRequest"); +function addNetworkBreadcrumb(replay, result) { + if (!replay.isEnabled()) { + return; + } + if (result === null) { + return; + } + if (shouldFilterRequest(replay, result.name)) { + return; + } + replay.addUpdate(() => { + createPerformanceSpans(replay, [result]); + return true; + }); +} +__name(addNetworkBreadcrumb, "addNetworkBreadcrumb"); +function getBodySize(body) { + if (!body) { + return void 0; + } + const textEncoder = new TextEncoder(); + try { + if (typeof body === "string") { + return textEncoder.encode(body).length; + } + if (body instanceof URLSearchParams) { + return textEncoder.encode(body.toString()).length; + } + if (body instanceof FormData) { + const formDataStr = _serializeFormData(body); + return textEncoder.encode(formDataStr).length; + } + if (body instanceof Blob) { + return body.size; + } + if (body instanceof ArrayBuffer) { + return body.byteLength; + } + } catch (e2) { + } + return void 0; +} +__name(getBodySize, "getBodySize"); +function parseContentLengthHeader(header3) { + if (!header3) { + return void 0; + } + const size = parseInt(header3, 10); + return isNaN(size) ? void 0 : size; +} +__name(parseContentLengthHeader, "parseContentLengthHeader"); +function getBodyString(body) { + try { + if (typeof body === "string") { + return [body]; + } + if (body instanceof URLSearchParams) { + return [body.toString()]; + } + if (body instanceof FormData) { + return [_serializeFormData(body)]; + } + if (!body) { + return [void 0]; + } + } catch (error2) { + DEBUG_BUILD$2 && logger$1.exception(error2, "Failed to serialize body", body); + return [void 0, "BODY_PARSE_ERROR"]; + } + DEBUG_BUILD$2 && logger$1.info("Skipping network body because of body type", body); + return [void 0, "UNPARSEABLE_BODY_TYPE"]; +} +__name(getBodyString, "getBodyString"); +function mergeWarning(info, warning) { + if (!info) { + return { + headers: {}, + size: void 0, + _meta: { + warnings: [warning] + } + }; + } + const newMeta = { ...info._meta }; + const existingWarnings = newMeta.warnings || []; + newMeta.warnings = [...existingWarnings, warning]; + info._meta = newMeta; + return info; +} +__name(mergeWarning, "mergeWarning"); +function makeNetworkReplayBreadcrumb(type, data26) { + if (!data26) { + return null; + } + const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data26; + const result = { + type, + start: startTimestamp / 1e3, + end: endTimestamp / 1e3, + name: url, + data: dropUndefinedKeys({ + method, + statusCode, + request, + response + }) + }; + return result; +} +__name(makeNetworkReplayBreadcrumb, "makeNetworkReplayBreadcrumb"); +function buildSkippedNetworkRequestOrResponse(bodySize) { + return { + headers: {}, + size: bodySize, + _meta: { + warnings: ["URL_SKIPPED"] + } + }; +} +__name(buildSkippedNetworkRequestOrResponse, "buildSkippedNetworkRequestOrResponse"); +function buildNetworkRequestOrResponse(headers, bodySize, body) { + if (!bodySize && Object.keys(headers).length === 0) { + return void 0; + } + if (!bodySize) { + return { + headers + }; + } + if (!body) { + return { + headers, + size: bodySize + }; + } + const info = { + headers, + size: bodySize + }; + const { body: normalizedBody, warnings } = normalizeNetworkBody(body); + info.body = normalizedBody; + if (warnings && warnings.length > 0) { + info._meta = { + warnings + }; + } + return info; +} +__name(buildNetworkRequestOrResponse, "buildNetworkRequestOrResponse"); +function getAllowedHeaders(headers, allowedHeaders) { + return Object.entries(headers).reduce((filteredHeaders, [key, value4]) => { + const normalizedKey = key.toLowerCase(); + if (allowedHeaders.includes(normalizedKey) && headers[key]) { + filteredHeaders[normalizedKey] = value4; + } + return filteredHeaders; + }, {}); +} +__name(getAllowedHeaders, "getAllowedHeaders"); +function _serializeFormData(formData) { + return new URLSearchParams(formData).toString(); +} +__name(_serializeFormData, "_serializeFormData"); +function normalizeNetworkBody(body) { + if (!body || typeof body !== "string") { + return { + body + }; + } + const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE; + const isProbablyJson = _strIsProbablyJson(body); + if (exceedsSizeLimit) { + const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE); + if (isProbablyJson) { + return { + body: truncatedBody, + warnings: ["MAYBE_JSON_TRUNCATED"] + }; + } + return { + body: `${truncatedBody}…`, + warnings: ["TEXT_TRUNCATED"] + }; + } + if (isProbablyJson) { + try { + const jsonBody = JSON.parse(body); + return { + body: jsonBody + }; + } catch (e2) { + } + } + return { + body + }; +} +__name(normalizeNetworkBody, "normalizeNetworkBody"); +function _strIsProbablyJson(str) { + const first2 = str[0]; + const last = str[str.length - 1]; + return first2 === "[" && last === "]" || first2 === "{" && last === "}"; +} +__name(_strIsProbablyJson, "_strIsProbablyJson"); +function urlMatches(url, urls) { + const fullUrl = getFullUrl(url); + return stringMatchesSomePattern(fullUrl, urls); +} +__name(urlMatches, "urlMatches"); +function getFullUrl(url, baseURI = WINDOW$1.document.baseURI) { + if (url.startsWith("http://") || url.startsWith("https://") || url.startsWith(WINDOW$1.location.origin)) { + return url; + } + const fixedUrl = new URL(url, baseURI); + if (fixedUrl.origin !== new URL(baseURI).origin) { + return url; + } + const fullUrl = fixedUrl.href; + if (!url.endsWith("/") && fullUrl.endsWith("/")) { + return fullUrl.slice(0, -1); + } + return fullUrl; +} +__name(getFullUrl, "getFullUrl"); +async function captureFetchBreadcrumbToReplay(breadcrumb, hint, options4) { + try { + const data26 = await _prepareFetchData(breadcrumb, hint, options4); + const result = makeNetworkReplayBreadcrumb("resource.fetch", data26); + addNetworkBreadcrumb(options4.replay, result); + } catch (error2) { + DEBUG_BUILD$2 && logger$1.exception(error2, "Failed to capture fetch breadcrumb"); + } +} +__name(captureFetchBreadcrumbToReplay, "captureFetchBreadcrumbToReplay"); +function enrichFetchBreadcrumb(breadcrumb, hint) { + const { input, response } = hint; + const body = input ? _getFetchRequestArgBody(input) : void 0; + const reqSize = getBodySize(body); + const resSize = response ? parseContentLengthHeader(response.headers.get("content-length")) : void 0; + if (reqSize !== void 0) { + breadcrumb.data.request_body_size = reqSize; + } + if (resSize !== void 0) { + breadcrumb.data.response_body_size = resSize; + } +} +__name(enrichFetchBreadcrumb, "enrichFetchBreadcrumb"); +async function _prepareFetchData(breadcrumb, hint, options4) { + const now2 = Date.now(); + const { startTimestamp = now2, endTimestamp = now2 } = hint; + const { + url, + method, + status_code: statusCode = 0, + request_body_size: requestBodySize, + response_body_size: responseBodySize + } = breadcrumb.data; + const captureDetails = urlMatches(url, options4.networkDetailAllowUrls) && !urlMatches(url, options4.networkDetailDenyUrls); + const request = captureDetails ? _getRequestInfo(options4, hint.input, requestBodySize) : buildSkippedNetworkRequestOrResponse(requestBodySize); + const response = await _getResponseInfo(captureDetails, options4, hint.response, responseBodySize); + return { + startTimestamp, + endTimestamp, + url, + method, + statusCode, + request, + response + }; +} +__name(_prepareFetchData, "_prepareFetchData"); +function _getRequestInfo({ networkCaptureBodies, networkRequestHeaders }, input, requestBodySize) { + const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {}; + if (!networkCaptureBodies) { + return buildNetworkRequestOrResponse(headers, requestBodySize, void 0); + } + const requestBody = _getFetchRequestArgBody(input); + const [bodyStr, warning] = getBodyString(requestBody); + const data26 = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr); + if (warning) { + return mergeWarning(data26, warning); + } + return data26; +} +__name(_getRequestInfo, "_getRequestInfo"); +async function _getResponseInfo(captureDetails, { + networkCaptureBodies, + networkResponseHeaders +}, response, responseBodySize) { + if (!captureDetails && responseBodySize !== void 0) { + return buildSkippedNetworkRequestOrResponse(responseBodySize); + } + const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {}; + if (!response || !networkCaptureBodies && responseBodySize !== void 0) { + return buildNetworkRequestOrResponse(headers, responseBodySize, void 0); + } + const [bodyText, warning] = await _parseFetchResponseBody(response); + const result = getResponseData(bodyText, { + networkCaptureBodies, + responseBodySize, + captureDetails, + headers + }); + if (warning) { + return mergeWarning(result, warning); + } + return result; +} +__name(_getResponseInfo, "_getResponseInfo"); +function getResponseData(bodyText, { + networkCaptureBodies, + responseBodySize, + captureDetails, + headers +}) { + try { + const size = bodyText && bodyText.length && responseBodySize === void 0 ? getBodySize(bodyText) : responseBodySize; + if (!captureDetails) { + return buildSkippedNetworkRequestOrResponse(size); + } + if (networkCaptureBodies) { + return buildNetworkRequestOrResponse(headers, size, bodyText); + } + return buildNetworkRequestOrResponse(headers, size, void 0); + } catch (error2) { + DEBUG_BUILD$2 && logger$1.exception(error2, "Failed to serialize response body"); + return buildNetworkRequestOrResponse(headers, responseBodySize, void 0); + } +} +__name(getResponseData, "getResponseData"); +async function _parseFetchResponseBody(response) { + const res = _tryCloneResponse(response); + if (!res) { + return [void 0, "BODY_PARSE_ERROR"]; + } + try { + const text2 = await _tryGetResponseText(res); + return [text2]; + } catch (error2) { + if (error2 instanceof Error && error2.message.indexOf("Timeout") > -1) { + DEBUG_BUILD$2 && logger$1.warn("Parsing text body from response timed out"); + return [void 0, "BODY_PARSE_TIMEOUT"]; + } + DEBUG_BUILD$2 && logger$1.exception(error2, "Failed to get text body from response"); + return [void 0, "BODY_PARSE_ERROR"]; + } +} +__name(_parseFetchResponseBody, "_parseFetchResponseBody"); +function _getFetchRequestArgBody(fetchArgs = []) { + if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== "object") { + return void 0; + } + return fetchArgs[1].body; +} +__name(_getFetchRequestArgBody, "_getFetchRequestArgBody"); +function getAllHeaders(headers, allowedHeaders) { + const allHeaders = {}; + allowedHeaders.forEach((header3) => { + if (headers.get(header3)) { + allHeaders[header3] = headers.get(header3); + } + }); + return allHeaders; +} +__name(getAllHeaders, "getAllHeaders"); +function getRequestHeaders(fetchArgs, allowedHeaders) { + if (fetchArgs.length === 1 && typeof fetchArgs[0] !== "string") { + return getHeadersFromOptions(fetchArgs[0], allowedHeaders); + } + if (fetchArgs.length === 2) { + return getHeadersFromOptions(fetchArgs[1], allowedHeaders); + } + return {}; +} +__name(getRequestHeaders, "getRequestHeaders"); +function getHeadersFromOptions(input, allowedHeaders) { + if (!input) { + return {}; + } + const headers = input.headers; + if (!headers) { + return {}; + } + if (headers instanceof Headers) { + return getAllHeaders(headers, allowedHeaders); + } + if (Array.isArray(headers)) { + return {}; + } + return getAllowedHeaders(headers, allowedHeaders); +} +__name(getHeadersFromOptions, "getHeadersFromOptions"); +function _tryCloneResponse(response) { + try { + return response.clone(); + } catch (error2) { + DEBUG_BUILD$2 && logger$1.exception(error2, "Failed to clone response body"); + } +} +__name(_tryCloneResponse, "_tryCloneResponse"); +function _tryGetResponseText(response) { + return new Promise((resolve2, reject3) => { + const timeout = setTimeout$3(() => reject3(new Error("Timeout while trying to read response body")), 500); + _getResponseText(response).then( + (txt) => resolve2(txt), + (reason) => reject3(reason) + ).finally(() => clearTimeout(timeout)); + }); +} +__name(_tryGetResponseText, "_tryGetResponseText"); +async function _getResponseText(response) { + return await response.text(); +} +__name(_getResponseText, "_getResponseText"); +async function captureXhrBreadcrumbToReplay(breadcrumb, hint, options4) { + try { + const data26 = _prepareXhrData(breadcrumb, hint, options4); + const result = makeNetworkReplayBreadcrumb("resource.xhr", data26); + addNetworkBreadcrumb(options4.replay, result); + } catch (error2) { + DEBUG_BUILD$2 && logger$1.exception(error2, "Failed to capture xhr breadcrumb"); + } +} +__name(captureXhrBreadcrumbToReplay, "captureXhrBreadcrumbToReplay"); +function enrichXhrBreadcrumb(breadcrumb, hint) { + const { xhr, input } = hint; + if (!xhr) { + return; + } + const reqSize = getBodySize(input); + const resSize = xhr.getResponseHeader("content-length") ? parseContentLengthHeader(xhr.getResponseHeader("content-length")) : _getBodySize(xhr.response, xhr.responseType); + if (reqSize !== void 0) { + breadcrumb.data.request_body_size = reqSize; + } + if (resSize !== void 0) { + breadcrumb.data.response_body_size = resSize; + } +} +__name(enrichXhrBreadcrumb, "enrichXhrBreadcrumb"); +function _prepareXhrData(breadcrumb, hint, options4) { + const now2 = Date.now(); + const { startTimestamp = now2, endTimestamp = now2, input, xhr } = hint; + const { + url, + method, + status_code: statusCode = 0, + request_body_size: requestBodySize, + response_body_size: responseBodySize + } = breadcrumb.data; + if (!url) { + return null; + } + if (!xhr || !urlMatches(url, options4.networkDetailAllowUrls) || urlMatches(url, options4.networkDetailDenyUrls)) { + const request2 = buildSkippedNetworkRequestOrResponse(requestBodySize); + const response2 = buildSkippedNetworkRequestOrResponse(responseBodySize); + return { + startTimestamp, + endTimestamp, + url, + method, + statusCode, + request: request2, + response: response2 + }; + } + const xhrInfo = xhr[SENTRY_XHR_DATA_KEY]; + const networkRequestHeaders = xhrInfo ? getAllowedHeaders(xhrInfo.request_headers, options4.networkRequestHeaders) : {}; + const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options4.networkResponseHeaders); + const [requestBody, requestWarning] = options4.networkCaptureBodies ? getBodyString(input) : [void 0]; + const [responseBody, responseWarning] = options4.networkCaptureBodies ? _getXhrResponseBody(xhr) : [void 0]; + const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody); + const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody); + return { + startTimestamp, + endTimestamp, + url, + method, + statusCode, + request: requestWarning ? mergeWarning(request, requestWarning) : request, + response: responseWarning ? mergeWarning(response, responseWarning) : response + }; +} +__name(_prepareXhrData, "_prepareXhrData"); +function getResponseHeaders(xhr) { + const headers = xhr.getAllResponseHeaders(); + if (!headers) { + return {}; + } + return headers.split("\r\n").reduce((acc, line) => { + const [key, value4] = line.split(": "); + if (value4) { + acc[key.toLowerCase()] = value4; + } + return acc; + }, {}); +} +__name(getResponseHeaders, "getResponseHeaders"); +function _getXhrResponseBody(xhr) { + const errors2 = []; + try { + return [xhr.responseText]; + } catch (e2) { + errors2.push(e2); + } + try { + return _parseXhrResponse(xhr.response, xhr.responseType); + } catch (e2) { + errors2.push(e2); + } + DEBUG_BUILD$2 && logger$1.warn("Failed to get xhr response body", ...errors2); + return [void 0]; +} +__name(_getXhrResponseBody, "_getXhrResponseBody"); +function _parseXhrResponse(body, responseType) { + try { + if (typeof body === "string") { + return [body]; + } + if (body instanceof Document) { + return [body.body.outerHTML]; + } + if (responseType === "json" && body && typeof body === "object") { + return [JSON.stringify(body)]; + } + if (!body) { + return [void 0]; + } + } catch (error2) { + DEBUG_BUILD$2 && logger$1.exception(error2, "Failed to serialize body", body); + return [void 0, "BODY_PARSE_ERROR"]; + } + DEBUG_BUILD$2 && logger$1.info("Skipping network body because of body type", body); + return [void 0, "UNPARSEABLE_BODY_TYPE"]; +} +__name(_parseXhrResponse, "_parseXhrResponse"); +function _getBodySize(body, responseType) { + try { + const bodyStr = responseType === "json" && body && typeof body === "object" ? JSON.stringify(body) : body; + return getBodySize(bodyStr); + } catch (e2) { + return void 0; + } +} +__name(_getBodySize, "_getBodySize"); +function handleNetworkBreadcrumbs(replay) { + const client = getClient(); + try { + const { + networkDetailAllowUrls, + networkDetailDenyUrls, + networkCaptureBodies, + networkRequestHeaders, + networkResponseHeaders + } = replay.getOptions(); + const options4 = { + replay, + networkDetailAllowUrls, + networkDetailDenyUrls, + networkCaptureBodies, + networkRequestHeaders, + networkResponseHeaders + }; + if (client) { + client.on("beforeAddBreadcrumb", (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options4, breadcrumb, hint)); + } + } catch (e2) { + } +} +__name(handleNetworkBreadcrumbs, "handleNetworkBreadcrumbs"); +function beforeAddNetworkBreadcrumb(options4, breadcrumb, hint) { + if (!breadcrumb.data) { + return; + } + try { + if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) { + enrichXhrBreadcrumb(breadcrumb, hint); + captureXhrBreadcrumbToReplay(breadcrumb, hint, options4); + } + if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) { + enrichFetchBreadcrumb(breadcrumb, hint); + captureFetchBreadcrumbToReplay(breadcrumb, hint, options4); + } + } catch (e2) { + DEBUG_BUILD$2 && logger$1.exception(e2, "Error when enriching network breadcrumb"); + } +} +__name(beforeAddNetworkBreadcrumb, "beforeAddNetworkBreadcrumb"); +function _isXhrBreadcrumb(breadcrumb) { + return breadcrumb.category === "xhr"; +} +__name(_isXhrBreadcrumb, "_isXhrBreadcrumb"); +function _isFetchBreadcrumb(breadcrumb) { + return breadcrumb.category === "fetch"; +} +__name(_isFetchBreadcrumb, "_isFetchBreadcrumb"); +function _isXhrHint(hint) { + return hint && hint.xhr; +} +__name(_isXhrHint, "_isXhrHint"); +function _isFetchHint(hint) { + return hint && hint.response; +} +__name(_isFetchHint, "_isFetchHint"); +function addGlobalListeners(replay) { + const client = getClient(); + addClickKeypressInstrumentationHandler(handleDomListener(replay)); + addHistoryInstrumentationHandler(handleHistorySpanListener(replay)); + handleBreadcrumbs(replay); + handleNetworkBreadcrumbs(replay); + const eventProcessor = handleGlobalEventListener(replay); + addEventProcessor(eventProcessor); + if (client) { + client.on("beforeSendEvent", handleBeforeSendEvent(replay)); + client.on("afterSendEvent", handleAfterSendEvent(replay)); + client.on("createDsc", (dsc) => { + const replayId = replay.getSessionId(); + if (replayId && replay.isEnabled() && replay.recordingMode === "session") { + const isSessionActive = replay.checkAndHandleExpiredSession(); + if (isSessionActive) { + dsc.replay_id = replayId; + } + } + }); + client.on("spanStart", (span) => { + replay.lastActiveSpan = span; + }); + client.on("spanEnd", (span) => { + replay.lastActiveSpan = span; + }); + client.on("beforeSendFeedback", (feedbackEvent, options4) => { + const replayId = replay.getSessionId(); + if (options4 && options4.includeReplay && replay.isEnabled() && replayId) { + if (feedbackEvent.contexts && feedbackEvent.contexts.feedback) { + feedbackEvent.contexts.feedback.replay_id = replayId; + } + } + }); + } +} +__name(addGlobalListeners, "addGlobalListeners"); +async function addMemoryEntry(replay) { + try { + return Promise.all( + createPerformanceSpans(replay, [ + // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above) + createMemoryEntry(WINDOW$1.performance.memory) + ]) + ); + } catch (error2) { + return []; + } +} +__name(addMemoryEntry, "addMemoryEntry"); +function createMemoryEntry(memoryEntry) { + const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry; + const time = Date.now() / 1e3; + return { + type: "memory", + name: "memory", + start: time, + end: time, + data: { + memory: { + jsHeapSizeLimit, + totalJSHeapSize, + usedJSHeapSize + } + } + }; +} +__name(createMemoryEntry, "createMemoryEntry"); +function debounce(func, wait, options4) { + let callbackReturnValue; + let timerId; + let maxTimerId; + const maxWait = options4 && options4.maxWait ? Math.max(options4.maxWait, wait) : 0; + function invokeFunc() { + cancelTimers(); + callbackReturnValue = func(); + return callbackReturnValue; + } + __name(invokeFunc, "invokeFunc"); + function cancelTimers() { + timerId !== void 0 && clearTimeout(timerId); + maxTimerId !== void 0 && clearTimeout(maxTimerId); + timerId = maxTimerId = void 0; + } + __name(cancelTimers, "cancelTimers"); + function flush2() { + if (timerId !== void 0 || maxTimerId !== void 0) { + return invokeFunc(); + } + return callbackReturnValue; + } + __name(flush2, "flush"); + function debounced() { + if (timerId) { + clearTimeout(timerId); + } + timerId = setTimeout$3(invokeFunc, wait); + if (maxWait && maxTimerId === void 0) { + maxTimerId = setTimeout$3(invokeFunc, maxWait); + } + return callbackReturnValue; + } + __name(debounced, "debounced"); + debounced.cancel = cancelTimers; + debounced.flush = flush2; + return debounced; +} +__name(debounce, "debounce"); +function getHandleRecordingEmit(replay) { + let hadFirstEvent = false; + return (event, _isCheckout) => { + if (!replay.checkAndHandleExpiredSession()) { + DEBUG_BUILD$2 && logger$1.warn("Received replay event after session expired."); + return; + } + const isCheckout = _isCheckout || !hadFirstEvent; + hadFirstEvent = true; + if (replay.clickDetector) { + updateClickDetectorForRecordingEvent(replay.clickDetector, event); + } + replay.addUpdate(() => { + if (replay.recordingMode === "buffer" && isCheckout) { + replay.setInitialState(); + } + if (!addEventSync(replay, event, isCheckout)) { + return true; + } + if (!isCheckout) { + return false; + } + const session = replay.session; + addSettingsEvent(replay, isCheckout); + if (replay.recordingMode === "buffer" && session && replay.eventBuffer) { + const earliestEvent = replay.eventBuffer.getEarliestTimestamp(); + if (earliestEvent) { + DEBUG_BUILD$2 && logger$1.info(`Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`); + session.started = earliestEvent; + if (replay.getOptions().stickySession) { + saveSession(session); + } + } + } + if (session && session.previousSessionId) { + return true; + } + if (replay.recordingMode === "session") { + void replay.flush(); + } + return true; + }); + }; +} +__name(getHandleRecordingEmit, "getHandleRecordingEmit"); +function createOptionsEvent(replay) { + const options4 = replay.getOptions(); + return { + type: EventType.Custom, + timestamp: Date.now(), + data: { + tag: "options", + payload: { + shouldRecordCanvas: replay.isRecordingCanvas(), + sessionSampleRate: options4.sessionSampleRate, + errorSampleRate: options4.errorSampleRate, + useCompressionOption: options4.useCompression, + blockAllMedia: options4.blockAllMedia, + maskAllText: options4.maskAllText, + maskAllInputs: options4.maskAllInputs, + useCompression: replay.eventBuffer ? replay.eventBuffer.type === "worker" : false, + networkDetailHasUrls: options4.networkDetailAllowUrls.length > 0, + networkCaptureBodies: options4.networkCaptureBodies, + networkRequestHasHeaders: options4.networkRequestHeaders.length > 0, + networkResponseHasHeaders: options4.networkResponseHeaders.length > 0 + } + } + }; +} +__name(createOptionsEvent, "createOptionsEvent"); +function addSettingsEvent(replay, isCheckout) { + if (!isCheckout || !replay.session || replay.session.segmentId !== 0) { + return; + } + addEventSync(replay, createOptionsEvent(replay), false); +} +__name(addSettingsEvent, "addSettingsEvent"); +function createReplayEnvelope(replayEvent, recordingData, dsn, tunnel) { + return createEnvelope( + createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn), + [ + [{ type: "replay_event" }, replayEvent], + [ + { + type: "replay_recording", + // If string then we need to encode to UTF8, otherwise will have + // wrong size. TextEncoder has similar browser support to + // MutationObserver, although it does not accept IE11. + length: typeof recordingData === "string" ? new TextEncoder().encode(recordingData).length : recordingData.length + }, + recordingData + ] + ] + ); +} +__name(createReplayEnvelope, "createReplayEnvelope"); +function prepareRecordingData({ + recordingData, + headers +}) { + let payloadWithSequence; + const replayHeaders = `${JSON.stringify(headers)} +`; + if (typeof recordingData === "string") { + payloadWithSequence = `${replayHeaders}${recordingData}`; + } else { + const enc = new TextEncoder(); + const sequence = enc.encode(replayHeaders); + payloadWithSequence = new Uint8Array(sequence.length + recordingData.length); + payloadWithSequence.set(sequence); + payloadWithSequence.set(recordingData, sequence.length); + } + return payloadWithSequence; +} +__name(prepareRecordingData, "prepareRecordingData"); +async function prepareReplayEvent({ + client, + scope, + replayId: event_id, + event +}) { + const integrations = typeof client._integrations === "object" && client._integrations !== null && !Array.isArray(client._integrations) ? Object.keys(client._integrations) : void 0; + const eventHint = { event_id, integrations }; + client.emit("preprocessEvent", event, eventHint); + const preparedEvent = await prepareEvent( + client.getOptions(), + event, + eventHint, + scope, + client, + getIsolationScope() + ); + if (!preparedEvent) { + return null; + } + preparedEvent.platform = preparedEvent.platform || "javascript"; + const metadata = client.getSdkMetadata(); + const { name: name2, version: version2 } = metadata && metadata.sdk || {}; + preparedEvent.sdk = { + ...preparedEvent.sdk, + name: name2 || "sentry.javascript.unknown", + version: version2 || "0.0.0" + }; + return preparedEvent; +} +__name(prepareReplayEvent, "prepareReplayEvent"); +async function sendReplayRequest({ + recordingData, + replayId, + segmentId: segment_id, + eventContext, + timestamp: timestamp2, + session +}) { + const preparedRecordingData = prepareRecordingData({ + recordingData, + headers: { + segment_id + } + }); + const { urls, errorIds, traceIds, initialTimestamp } = eventContext; + const client = getClient(); + const scope = getCurrentScope$1(); + const transport = client && client.getTransport(); + const dsn = client && client.getDsn(); + if (!client || !transport || !dsn || !session.sampled) { + return resolvedSyncPromise({}); + } + const baseEvent = { + type: REPLAY_EVENT_NAME, + replay_start_timestamp: initialTimestamp / 1e3, + timestamp: timestamp2 / 1e3, + error_ids: errorIds, + trace_ids: traceIds, + urls, + replay_id: replayId, + segment_id, + replay_type: session.sampled + }; + const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent }); + if (!replayEvent) { + client.recordDroppedEvent("event_processor", "replay", baseEvent); + DEBUG_BUILD$2 && logger$1.info("An event processor returned `null`, will not send event."); + return resolvedSyncPromise({}); + } + delete replayEvent.sdkProcessingMetadata; + const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel); + let response; + try { + response = await transport.send(envelope); + } catch (err) { + const error2 = new Error(UNABLE_TO_SEND_REPLAY); + try { + error2.cause = err; + } catch (e2) { + } + throw error2; + } + if (typeof response.statusCode === "number" && (response.statusCode < 200 || response.statusCode >= 300)) { + throw new TransportStatusCodeError(response.statusCode); + } + const rateLimits = updateRateLimits({}, response); + if (isRateLimited(rateLimits, "replay")) { + throw new RateLimitError(rateLimits); + } + return response; +} +__name(sendReplayRequest, "sendReplayRequest"); +class TransportStatusCodeError extends Error { + static { + __name(this, "TransportStatusCodeError"); + } + constructor(statusCode) { + super(`Transport returned status code ${statusCode}`); + } +} +class RateLimitError extends Error { + static { + __name(this, "RateLimitError"); + } + constructor(rateLimits) { + super("Rate limit hit"); + this.rateLimits = rateLimits; + } +} +async function sendReplay(replayData, retryConfig = { + count: 0, + interval: RETRY_BASE_INTERVAL +}) { + const { recordingData, onError } = replayData; + if (!recordingData.length) { + return; + } + try { + await sendReplayRequest(replayData); + return true; + } catch (err) { + if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) { + throw err; + } + setContext("Replays", { + _retryCount: retryConfig.count + }); + if (onError) { + onError(err); + } + if (retryConfig.count >= RETRY_MAX_COUNT) { + const error2 = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`); + try { + error2.cause = err; + } catch (e2) { + } + throw error2; + } + retryConfig.interval *= ++retryConfig.count; + return new Promise((resolve2, reject3) => { + setTimeout$3(async () => { + try { + await sendReplay(replayData, retryConfig); + resolve2(true); + } catch (err2) { + reject3(err2); + } + }, retryConfig.interval); + }); + } +} +__name(sendReplay, "sendReplay"); +const THROTTLED = "__THROTTLED"; +const SKIPPED = "__SKIPPED"; +function throttle$2(fn, maxCount, durationSeconds) { + const counter = /* @__PURE__ */ new Map(); + const _cleanup = /* @__PURE__ */ __name((now2) => { + const threshold = now2 - durationSeconds; + counter.forEach((_value, key) => { + if (key < threshold) { + counter.delete(key); + } + }); + }, "_cleanup"); + const _getTotalCount = /* @__PURE__ */ __name(() => { + return [...counter.values()].reduce((a2, b2) => a2 + b2, 0); + }, "_getTotalCount"); + let isThrottled = false; + return (...rest) => { + const now2 = Math.floor(Date.now() / 1e3); + _cleanup(now2); + if (_getTotalCount() >= maxCount) { + const wasThrottled = isThrottled; + isThrottled = true; + return wasThrottled ? SKIPPED : THROTTLED; + } + isThrottled = false; + const count = counter.get(now2) || 0; + counter.set(now2, count + 1); + return fn(...rest); + }; +} +__name(throttle$2, "throttle$2"); +class ReplayContainer { + static { + __name(this, "ReplayContainer"); + } + /** + * Recording can happen in one of two modes: + * - session: Record the whole session, sending it continuously + * - buffer: Always keep the last 60s of recording, requires: + * - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs + * - or calling `flush()` to send the replay + */ + /** + * The current or last active span. + * This is only available when performance is enabled. + */ + /** + * These are here so we can overwrite them in tests etc. + * @hidden + */ + /** The replay has to be manually started, because no sample rate (neither session or error) was provided. */ + /** + * Options to pass to `rrweb.record()` + */ + /** + * Timestamp of the last user activity. This lives across sessions. + */ + /** + * Is the integration currently active? + */ + /** + * Paused is a state where: + * - DOM Recording is not listening at all + * - Nothing will be added to event buffer (e.g. core SDK events) + */ + /** + * Have we attached listeners to the core SDK? + * Note we have to track this as there is no way to remove instrumentation handlers. + */ + /** + * Function to stop recording + */ + /** + * Internal use for canvas recording options + */ + constructor({ + options: options4, + recordingOptions + }) { + ReplayContainer.prototype.__init.call(this); + ReplayContainer.prototype.__init2.call(this); + ReplayContainer.prototype.__init3.call(this); + ReplayContainer.prototype.__init4.call(this); + ReplayContainer.prototype.__init5.call(this); + ReplayContainer.prototype.__init6.call(this); + this.eventBuffer = null; + this.performanceEntries = []; + this.replayPerformanceEntries = []; + this.recordingMode = "session"; + this.timeouts = { + sessionIdlePause: SESSION_IDLE_PAUSE_DURATION, + sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION + }; + this._lastActivity = Date.now(); + this._isEnabled = false; + this._isPaused = false; + this._requiresManualStart = false; + this._hasInitializedCoreListeners = false; + this._context = { + errorIds: /* @__PURE__ */ new Set(), + traceIds: /* @__PURE__ */ new Set(), + urls: [], + initialTimestamp: Date.now(), + initialUrl: "" + }; + this._recordingOptions = recordingOptions; + this._options = options4; + this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, { + maxWait: this._options.flushMaxDelay + }); + this._throttledAddEvent = throttle$2( + (event, isCheckout) => addEvent(this, event, isCheckout), + // Max 300 events... + 300, + // ... per 5s + 5 + ); + const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions(); + const slowClickConfig = slowClickTimeout ? { + threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout), + timeout: slowClickTimeout, + scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT, + ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(",") : "" + } : void 0; + if (slowClickConfig) { + this.clickDetector = new ClickDetector(this, slowClickConfig); + } + if (DEBUG_BUILD$2) { + const experiments = options4._experiments; + logger$1.setConfig({ + captureExceptions: !!experiments.captureExceptions, + traceInternals: !!experiments.traceInternals + }); + } + } + /** Get the event context. */ + getContext() { + return this._context; + } + /** If recording is currently enabled. */ + isEnabled() { + return this._isEnabled; + } + /** If recording is currently paused. */ + isPaused() { + return this._isPaused; + } + /** + * Determine if canvas recording is enabled + */ + isRecordingCanvas() { + return Boolean(this._canvas); + } + /** Get the replay integration options. */ + getOptions() { + return this._options; + } + /** A wrapper to conditionally capture exceptions. */ + handleException(error2) { + DEBUG_BUILD$2 && logger$1.exception(error2); + if (this._options.onError) { + this._options.onError(error2); + } + } + /** + * Initializes the plugin based on sampling configuration. Should not be + * called outside of constructor. + */ + initializeSampling(previousSessionId) { + const { errorSampleRate, sessionSampleRate } = this._options; + const requiresManualStart = errorSampleRate <= 0 && sessionSampleRate <= 0; + this._requiresManualStart = requiresManualStart; + if (requiresManualStart) { + return; + } + this._initializeSessionForSampling(previousSessionId); + if (!this.session) { + DEBUG_BUILD$2 && logger$1.exception(new Error("Unable to initialize and create session")); + return; + } + if (this.session.sampled === false) { + return; + } + this.recordingMode = this.session.sampled === "buffer" && this.session.segmentId === 0 ? "buffer" : "session"; + DEBUG_BUILD$2 && logger$1.infoTick(`Starting replay in ${this.recordingMode} mode`); + this._initializeRecording(); + } + /** + * Start a replay regardless of sampling rate. Calling this will always + * create a new session. Will log a message if replay is already in progress. + * + * Creates or loads a session, attaches listeners to varying events (DOM, + * _performanceObserver, Recording, Sentry SDK, etc) + */ + start() { + if (this._isEnabled && this.recordingMode === "session") { + DEBUG_BUILD$2 && logger$1.info("Recording is already in progress"); + return; + } + if (this._isEnabled && this.recordingMode === "buffer") { + DEBUG_BUILD$2 && logger$1.info("Buffering is in progress, call `flush()` to save the replay"); + return; + } + DEBUG_BUILD$2 && logger$1.infoTick("Starting replay in session mode"); + this._updateUserActivity(); + const session = loadOrCreateSession( + { + maxReplayDuration: this._options.maxReplayDuration, + sessionIdleExpire: this.timeouts.sessionIdleExpire + }, + { + stickySession: this._options.stickySession, + // This is intentional: create a new session-based replay when calling `start()` + sessionSampleRate: 1, + allowBuffering: false + } + ); + this.session = session; + this._initializeRecording(); + } + /** + * Start replay buffering. Buffers until `flush()` is called or, if + * `replaysOnErrorSampleRate` > 0, an error occurs. + */ + startBuffering() { + if (this._isEnabled) { + DEBUG_BUILD$2 && logger$1.info("Buffering is in progress, call `flush()` to save the replay"); + return; + } + DEBUG_BUILD$2 && logger$1.infoTick("Starting replay in buffer mode"); + const session = loadOrCreateSession( + { + sessionIdleExpire: this.timeouts.sessionIdleExpire, + maxReplayDuration: this._options.maxReplayDuration + }, + { + stickySession: this._options.stickySession, + sessionSampleRate: 0, + allowBuffering: true + } + ); + this.session = session; + this.recordingMode = "buffer"; + this._initializeRecording(); + } + /** + * Start recording. + * + * Note that this will cause a new DOM checkout + */ + startRecording() { + try { + const canvasOptions = this._canvas; + this._stopRecording = record({ + ...this._recordingOptions, + // When running in error sampling mode, we need to overwrite `checkoutEveryNms` + // Without this, it would record forever, until an error happens, which we don't want + // instead, we'll always keep the last 60 seconds of replay before an error happened + ...this.recordingMode === "buffer" ? { checkoutEveryNms: BUFFER_CHECKOUT_TIME } : ( + // Otherwise, use experimental option w/ min checkout time of 6 minutes + // This is to improve playback seeking as there could potentially be + // less mutations to process in the worse cases. + // + // checkout by "N" events is probably ideal, but means we have less + // control about the number of checkouts we make (which generally + // increases replay size) + this._options._experiments.continuousCheckout && { + // Minimum checkout time is 6 minutes + checkoutEveryNms: Math.max(36e4, this._options._experiments.continuousCheckout) + } + ), + emit: getHandleRecordingEmit(this), + onMutation: this._onMutationHandler, + ...canvasOptions ? { + recordCanvas: canvasOptions.recordCanvas, + getCanvasManager: canvasOptions.getCanvasManager, + sampling: canvasOptions.sampling, + dataURLOptions: canvasOptions.dataURLOptions + } : {} + }); + } catch (err) { + this.handleException(err); + } + } + /** + * Stops the recording, if it was running. + * + * Returns true if it was previously stopped, or is now stopped, + * otherwise false. + */ + stopRecording() { + try { + if (this._stopRecording) { + this._stopRecording(); + this._stopRecording = void 0; + } + return true; + } catch (err) { + this.handleException(err); + return false; + } + } + /** + * Currently, this needs to be manually called (e.g. for tests). Sentry SDK + * does not support a teardown + */ + async stop({ forceFlush = false, reason } = {}) { + if (!this._isEnabled) { + return; + } + this._isEnabled = false; + try { + DEBUG_BUILD$2 && logger$1.info(`Stopping Replay${reason ? ` triggered by ${reason}` : ""}`); + resetReplayIdOnDynamicSamplingContext(); + this._removeListeners(); + this.stopRecording(); + this._debouncedFlush.cancel(); + if (forceFlush) { + await this._flush({ force: true }); + } + this.eventBuffer && this.eventBuffer.destroy(); + this.eventBuffer = null; + clearSession(this); + } catch (err) { + this.handleException(err); + } + } + /** + * Pause some replay functionality. See comments for `_isPaused`. + * This differs from stop as this only stops DOM recording, it is + * not as thorough of a shutdown as `stop()`. + */ + pause() { + if (this._isPaused) { + return; + } + this._isPaused = true; + this.stopRecording(); + DEBUG_BUILD$2 && logger$1.info("Pausing replay"); + } + /** + * Resumes recording, see notes for `pause(). + * + * Note that calling `startRecording()` here will cause a + * new DOM checkout.` + */ + resume() { + if (!this._isPaused || !this._checkSession()) { + return; + } + this._isPaused = false; + this.startRecording(); + DEBUG_BUILD$2 && logger$1.info("Resuming replay"); + } + /** + * If not in "session" recording mode, flush event buffer which will create a new replay. + * Unless `continueRecording` is false, the replay will continue to record and + * behave as a "session"-based replay. + * + * Otherwise, queue up a flush. + */ + async sendBufferedReplayOrFlush({ continueRecording = true } = {}) { + if (this.recordingMode === "session") { + return this.flushImmediate(); + } + const activityTime = Date.now(); + DEBUG_BUILD$2 && logger$1.info("Converting buffer to session"); + await this.flushImmediate(); + const hasStoppedRecording = this.stopRecording(); + if (!continueRecording || !hasStoppedRecording) { + return; + } + if (this.recordingMode === "session") { + return; + } + this.recordingMode = "session"; + if (this.session) { + this._updateUserActivity(activityTime); + this._updateSessionActivity(activityTime); + this._maybeSaveSession(); + } + this.startRecording(); + } + /** + * We want to batch uploads of replay events. Save events only if + * `` milliseconds have elapsed since the last event + * *OR* if `` milliseconds have elapsed. + * + * Accepts a callback to perform side-effects and returns true to stop batch + * processing and hand back control to caller. + */ + addUpdate(cb) { + const cbResult = cb(); + if (this.recordingMode === "buffer") { + return; + } + if (cbResult === true) { + return; + } + this._debouncedFlush(); + } + /** + * Updates the user activity timestamp and resumes recording. This should be + * called in an event handler for a user action that we consider as the user + * being "active" (e.g. a mouse click). + */ + triggerUserActivity() { + this._updateUserActivity(); + if (!this._stopRecording) { + if (!this._checkSession()) { + return; + } + this.resume(); + return; + } + this.checkAndHandleExpiredSession(); + this._updateSessionActivity(); + } + /** + * Updates the user activity timestamp *without* resuming + * recording. Some user events (e.g. keydown) can be create + * low-value replays that only contain the keypress as a + * breadcrumb. Instead this would require other events to + * create a new replay after a session has expired. + */ + updateUserActivity() { + this._updateUserActivity(); + this._updateSessionActivity(); + } + /** + * Only flush if `this.recordingMode === 'session'` + */ + conditionalFlush() { + if (this.recordingMode === "buffer") { + return Promise.resolve(); + } + return this.flushImmediate(); + } + /** + * Flush using debounce flush + */ + flush() { + return this._debouncedFlush(); + } + /** + * Always flush via `_debouncedFlush` so that we do not have flushes triggered + * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be + * cases of multiple flushes happening closely together. + */ + flushImmediate() { + this._debouncedFlush(); + return this._debouncedFlush.flush(); + } + /** + * Cancels queued up flushes. + */ + cancelFlush() { + this._debouncedFlush.cancel(); + } + /** Get the current session (=replay) ID */ + getSessionId() { + return this.session && this.session.id; + } + /** + * Checks if recording should be stopped due to user inactivity. Otherwise + * check if session is expired and create a new session if so. Triggers a new + * full snapshot on new session. + * + * Returns true if session is not expired, false otherwise. + * @hidden + */ + checkAndHandleExpiredSession() { + if (this._lastActivity && isExpired(this._lastActivity, this.timeouts.sessionIdlePause) && this.session && this.session.sampled === "session") { + this.pause(); + return; + } + if (!this._checkSession()) { + return false; + } + return true; + } + /** + * Capture some initial state that can change throughout the lifespan of the + * replay. This is required because otherwise they would be captured at the + * first flush. + */ + setInitialState() { + const urlPath = `${WINDOW$1.location.pathname}${WINDOW$1.location.hash}${WINDOW$1.location.search}`; + const url = `${WINDOW$1.location.origin}${urlPath}`; + this.performanceEntries = []; + this.replayPerformanceEntries = []; + this._clearContext(); + this._context.initialUrl = url; + this._context.initialTimestamp = Date.now(); + this._context.urls.push(url); + } + /** + * Add a breadcrumb event, that may be throttled. + * If it was throttled, we add a custom breadcrumb to indicate that. + */ + throttledAddEvent(event, isCheckout) { + const res = this._throttledAddEvent(event, isCheckout); + if (res === THROTTLED) { + const breadcrumb = createBreadcrumb({ + category: "replay.throttled" + }); + this.addUpdate(() => { + return !addEventSync(this, { + type: ReplayEventTypeCustom, + timestamp: breadcrumb.timestamp || 0, + data: { + tag: "breadcrumb", + payload: breadcrumb, + metric: true + } + }); + }); + } + return res; + } + /** + * This will get the parametrized route name of the current page. + * This is only available if performance is enabled, and if an instrumented router is used. + */ + getCurrentRoute() { + const lastActiveSpan = this.lastActiveSpan || getActiveSpan(); + const lastRootSpan = lastActiveSpan && getRootSpan(lastActiveSpan); + const attributes = lastRootSpan && spanToJSON(lastRootSpan).data || {}; + const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]; + if (!lastRootSpan || !source || !["route", "custom"].includes(source)) { + return void 0; + } + return spanToJSON(lastRootSpan).description; + } + /** + * Initialize and start all listeners to varying events (DOM, + * Performance Observer, Recording, Sentry SDK, etc) + */ + _initializeRecording() { + this.setInitialState(); + this._updateSessionActivity(); + this.eventBuffer = createEventBuffer({ + useCompression: this._options.useCompression, + workerUrl: this._options.workerUrl + }); + this._removeListeners(); + this._addListeners(); + this._isEnabled = true; + this._isPaused = false; + this.startRecording(); + } + /** + * Loads (or refreshes) the current session. + */ + _initializeSessionForSampling(previousSessionId) { + const allowBuffering = this._options.errorSampleRate > 0; + const session = loadOrCreateSession( + { + sessionIdleExpire: this.timeouts.sessionIdleExpire, + maxReplayDuration: this._options.maxReplayDuration, + previousSessionId + }, + { + stickySession: this._options.stickySession, + sessionSampleRate: this._options.sessionSampleRate, + allowBuffering + } + ); + this.session = session; + } + /** + * Checks and potentially refreshes the current session. + * Returns false if session is not recorded. + */ + _checkSession() { + if (!this.session) { + return false; + } + const currentSession = this.session; + if (shouldRefreshSession(currentSession, { + sessionIdleExpire: this.timeouts.sessionIdleExpire, + maxReplayDuration: this._options.maxReplayDuration + })) { + this._refreshSession(currentSession); + return false; + } + return true; + } + /** + * Refresh a session with a new one. + * This stops the current session (without forcing a flush, as that would never work since we are expired), + * and then does a new sampling based on the refreshed session. + */ + async _refreshSession(session) { + if (!this._isEnabled) { + return; + } + await this.stop({ reason: "refresh session" }); + this.initializeSampling(session.id); + } + /** + * Adds listeners to record events for the replay + */ + _addListeners() { + try { + WINDOW$1.document.addEventListener("visibilitychange", this._handleVisibilityChange); + WINDOW$1.addEventListener("blur", this._handleWindowBlur); + WINDOW$1.addEventListener("focus", this._handleWindowFocus); + WINDOW$1.addEventListener("keydown", this._handleKeyboardEvent); + if (this.clickDetector) { + this.clickDetector.addListeners(); + } + if (!this._hasInitializedCoreListeners) { + addGlobalListeners(this); + this._hasInitializedCoreListeners = true; + } + } catch (err) { + this.handleException(err); + } + this._performanceCleanupCallback = setupPerformanceObserver(this); + } + /** + * Cleans up listeners that were created in `_addListeners` + */ + _removeListeners() { + try { + WINDOW$1.document.removeEventListener("visibilitychange", this._handleVisibilityChange); + WINDOW$1.removeEventListener("blur", this._handleWindowBlur); + WINDOW$1.removeEventListener("focus", this._handleWindowFocus); + WINDOW$1.removeEventListener("keydown", this._handleKeyboardEvent); + if (this.clickDetector) { + this.clickDetector.removeListeners(); + } + if (this._performanceCleanupCallback) { + this._performanceCleanupCallback(); + } + } catch (err) { + this.handleException(err); + } + } + /** + * Handle when visibility of the page content changes. Opening a new tab will + * cause the state to change to hidden because of content of current page will + * be hidden. Likewise, moving a different window to cover the contents of the + * page will also trigger a change to a hidden state. + */ + __init() { + this._handleVisibilityChange = () => { + if (WINDOW$1.document.visibilityState === "visible") { + this._doChangeToForegroundTasks(); + } else { + this._doChangeToBackgroundTasks(); + } + }; + } + /** + * Handle when page is blurred + */ + __init2() { + this._handleWindowBlur = () => { + const breadcrumb = createBreadcrumb({ + category: "ui.blur" + }); + this._doChangeToBackgroundTasks(breadcrumb); + }; + } + /** + * Handle when page is focused + */ + __init3() { + this._handleWindowFocus = () => { + const breadcrumb = createBreadcrumb({ + category: "ui.focus" + }); + this._doChangeToForegroundTasks(breadcrumb); + }; + } + /** Ensure page remains active when a key is pressed. */ + __init4() { + this._handleKeyboardEvent = (event) => { + handleKeyboardEvent(this, event); + }; + } + /** + * Tasks to run when we consider a page to be hidden (via blurring and/or visibility) + */ + _doChangeToBackgroundTasks(breadcrumb) { + if (!this.session) { + return; + } + const expired = isSessionExpired(this.session, { + maxReplayDuration: this._options.maxReplayDuration, + sessionIdleExpire: this.timeouts.sessionIdleExpire + }); + if (expired) { + return; + } + if (breadcrumb) { + this._createCustomBreadcrumb(breadcrumb); + } + void this.conditionalFlush(); + } + /** + * Tasks to run when we consider a page to be visible (via focus and/or visibility) + */ + _doChangeToForegroundTasks(breadcrumb) { + if (!this.session) { + return; + } + const isSessionActive = this.checkAndHandleExpiredSession(); + if (!isSessionActive) { + DEBUG_BUILD$2 && logger$1.info("Document has become active, but session has expired"); + return; + } + if (breadcrumb) { + this._createCustomBreadcrumb(breadcrumb); + } + } + /** + * Update user activity (across session lifespans) + */ + _updateUserActivity(_lastActivity = Date.now()) { + this._lastActivity = _lastActivity; + } + /** + * Updates the session's last activity timestamp + */ + _updateSessionActivity(_lastActivity = Date.now()) { + if (this.session) { + this.session.lastActivity = _lastActivity; + this._maybeSaveSession(); + } + } + /** + * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb + */ + _createCustomBreadcrumb(breadcrumb) { + this.addUpdate(() => { + this.throttledAddEvent({ + type: EventType.Custom, + timestamp: breadcrumb.timestamp || 0, + data: { + tag: "breadcrumb", + payload: breadcrumb + } + }); + }); + } + /** + * Observed performance events are added to `this.performanceEntries`. These + * are included in the replay event before it is finished and sent to Sentry. + */ + _addPerformanceEntries() { + let performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries); + this.performanceEntries = []; + this.replayPerformanceEntries = []; + if (this._requiresManualStart) { + const initialTimestampInSeconds = this._context.initialTimestamp / 1e3; + performanceEntries = performanceEntries.filter((entry) => entry.start >= initialTimestampInSeconds); + } + return Promise.all(createPerformanceSpans(this, performanceEntries)); + } + /** + * Clear _context + */ + _clearContext() { + this._context.errorIds.clear(); + this._context.traceIds.clear(); + this._context.urls = []; + } + /** Update the initial timestamp based on the buffer content. */ + _updateInitialTimestampFromEventBuffer() { + const { session, eventBuffer } = this; + if (!session || !eventBuffer || this._requiresManualStart) { + return; + } + if (session.segmentId) { + return; + } + const earliestEvent = eventBuffer.getEarliestTimestamp(); + if (earliestEvent && earliestEvent < this._context.initialTimestamp) { + this._context.initialTimestamp = earliestEvent; + } + } + /** + * Return and clear _context + */ + _popEventContext() { + const _context = { + initialTimestamp: this._context.initialTimestamp, + initialUrl: this._context.initialUrl, + errorIds: Array.from(this._context.errorIds), + traceIds: Array.from(this._context.traceIds), + urls: this._context.urls + }; + this._clearContext(); + return _context; + } + /** + * Flushes replay event buffer to Sentry. + * + * Performance events are only added right before flushing - this is + * due to the buffered performance observer events. + * + * Should never be called directly, only by `flush` + */ + async _runFlush() { + const replayId = this.getSessionId(); + if (!this.session || !this.eventBuffer || !replayId) { + DEBUG_BUILD$2 && logger$1.error("No session or eventBuffer found to flush."); + return; + } + await this._addPerformanceEntries(); + if (!this.eventBuffer || !this.eventBuffer.hasEvents) { + return; + } + await addMemoryEntry(this); + if (!this.eventBuffer) { + return; + } + if (replayId !== this.getSessionId()) { + return; + } + try { + this._updateInitialTimestampFromEventBuffer(); + const timestamp2 = Date.now(); + if (timestamp2 - this._context.initialTimestamp > this._options.maxReplayDuration + 3e4) { + throw new Error("Session is too long, not sending replay"); + } + const eventContext = this._popEventContext(); + const segmentId = this.session.segmentId++; + this._maybeSaveSession(); + const recordingData = await this.eventBuffer.finish(); + await sendReplay({ + replayId, + recordingData, + segmentId, + eventContext, + session: this.session, + timestamp: timestamp2, + onError: /* @__PURE__ */ __name((err) => this.handleException(err), "onError") + }); + } catch (err) { + this.handleException(err); + this.stop({ reason: "sendReplay" }); + const client = getClient(); + if (client) { + const dropReason = err instanceof RateLimitError ? "ratelimit_backoff" : "send_error"; + client.recordDroppedEvent(dropReason, "replay"); + } + } + } + /** + * Flush recording data to Sentry. Creates a lock so that only a single flush + * can be active at a time. Do not call this directly. + */ + __init5() { + this._flush = async ({ + force = false + } = {}) => { + if (!this._isEnabled && !force) { + return; + } + if (!this.checkAndHandleExpiredSession()) { + DEBUG_BUILD$2 && logger$1.error("Attempting to finish replay event after session expired."); + return; + } + if (!this.session) { + return; + } + const start2 = this.session.started; + const now2 = Date.now(); + const duration = now2 - start2; + this._debouncedFlush.cancel(); + const tooShort = duration < this._options.minReplayDuration; + const tooLong = duration > this._options.maxReplayDuration + 5e3; + if (tooShort || tooLong) { + DEBUG_BUILD$2 && logger$1.info( + `Session duration (${Math.floor(duration / 1e3)}s) is too ${tooShort ? "short" : "long"}, not sending replay.` + ); + if (tooShort) { + this._debouncedFlush(); + } + return; + } + const eventBuffer = this.eventBuffer; + if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) { + DEBUG_BUILD$2 && logger$1.info("Flushing initial segment without checkout."); + } + const _flushInProgress = !!this._flushLock; + if (!this._flushLock) { + this._flushLock = this._runFlush(); + } + try { + await this._flushLock; + } catch (err) { + this.handleException(err); + } finally { + this._flushLock = void 0; + if (_flushInProgress) { + this._debouncedFlush(); + } + } + }; + } + /** Save the session, if it is sticky */ + _maybeSaveSession() { + if (this.session && this._options.stickySession) { + saveSession(this.session); + } + } + /** Handler for rrweb.record.onMutation */ + __init6() { + this._onMutationHandler = (mutations) => { + const count = mutations.length; + const mutationLimit = this._options.mutationLimit; + const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit; + const overMutationLimit = mutationLimit && count > mutationLimit; + if (count > mutationBreadcrumbLimit || overMutationLimit) { + const breadcrumb = createBreadcrumb({ + category: "replay.mutations", + data: { + count, + limit: overMutationLimit + } + }); + this._createCustomBreadcrumb(breadcrumb); + } + if (overMutationLimit) { + this.stop({ reason: "mutationLimit", forceFlush: this.recordingMode === "session" }); + return false; + } + return true; + }; + } +} +function getOption(selectors, defaultSelectors) { + return [ + ...selectors, + // sentry defaults + ...defaultSelectors + ].join(","); +} +__name(getOption, "getOption"); +function getPrivacyOptions({ mask: mask3, unmask, block: block3, unblock: unblock2, ignore }) { + const defaultBlockedElements = ["base", "iframe[srcdoc]:not([src])"]; + const maskSelector = getOption(mask3, [".sentry-mask", "[data-sentry-mask]"]); + const unmaskSelector = getOption(unmask, []); + const options4 = { + // We are making the decision to make text and input selectors the same + maskTextSelector: maskSelector, + unmaskTextSelector: unmaskSelector, + blockSelector: getOption(block3, [".sentry-block", "[data-sentry-block]", ...defaultBlockedElements]), + unblockSelector: getOption(unblock2, []), + ignoreSelector: getOption(ignore, [".sentry-ignore", "[data-sentry-ignore]", 'input[type="file"]']) + }; + return options4; +} +__name(getPrivacyOptions, "getPrivacyOptions"); +function maskAttribute({ + el, + key, + maskAttributes, + maskAllText, + privacyOptions, + value: value4 +}) { + if (!maskAllText) { + return value4; + } + if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) { + return value4; + } + if (maskAttributes.includes(key) || // Need to mask `value` attribute for `` if it's a button-like + // type + key === "value" && el.tagName === "INPUT" && ["submit", "button"].includes(el.getAttribute("type") || "")) { + return value4.replace(/[\S]/g, "*"); + } + return value4; +} +__name(maskAttribute, "maskAttribute"); +const MEDIA_SELECTORS = 'img,image,svg,video,object,picture,embed,map,audio,link[rel="icon"],link[rel="apple-touch-icon"]'; +const DEFAULT_NETWORK_HEADERS = ["content-length", "content-type", "accept"]; +let _initialized = false; +const replayIntegration = /* @__PURE__ */ __name((options4) => { + return new Replay(options4); +}, "replayIntegration"); +class Replay { + static { + __name(this, "Replay"); + } + /** + * @inheritDoc + */ + static __initStatic() { + this.id = "Replay"; + } + /** + * @inheritDoc + */ + /** + * Options to pass to `rrweb.record()` + */ + /** + * Initial options passed to the replay integration, merged with default values. + * Note: `sessionSampleRate` and `errorSampleRate` are not required here, as they + * can only be finally set when setupOnce() is called. + * + * @private + */ + constructor({ + flushMinDelay = DEFAULT_FLUSH_MIN_DELAY, + flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY, + minReplayDuration = MIN_REPLAY_DURATION, + maxReplayDuration = MAX_REPLAY_DURATION, + stickySession = true, + useCompression = true, + workerUrl, + _experiments = {}, + maskAllText = true, + maskAllInputs = true, + blockAllMedia = true, + mutationBreadcrumbLimit = 750, + mutationLimit = 1e4, + slowClickTimeout = 7e3, + slowClickIgnoreSelectors = [], + networkDetailAllowUrls = [], + networkDetailDenyUrls = [], + networkCaptureBodies = true, + networkRequestHeaders = [], + networkResponseHeaders = [], + mask: mask3 = [], + maskAttributes = ["title", "placeholder"], + unmask = [], + block: block3 = [], + unblock: unblock2 = [], + ignore = [], + maskFn, + beforeAddRecordingEvent, + beforeErrorSampling, + onError + } = {}) { + this.name = Replay.id; + const privacyOptions = getPrivacyOptions({ + mask: mask3, + unmask, + block: block3, + unblock: unblock2, + ignore + }); + this._recordingOptions = { + maskAllInputs, + maskAllText, + maskInputOptions: { password: true }, + maskTextFn: maskFn, + maskInputFn: maskFn, + maskAttributeFn: /* @__PURE__ */ __name((key, value4, el) => maskAttribute({ + maskAttributes, + maskAllText, + privacyOptions, + key, + value: value4, + el + }), "maskAttributeFn"), + ...privacyOptions, + // Our defaults + slimDOMOptions: "all", + inlineStylesheet: true, + // Disable inline images as it will increase segment/replay size + inlineImages: false, + // collect fonts, but be aware that `sentry.io` needs to be an allowed + // origin for playback + collectFonts: true, + errorHandler: /* @__PURE__ */ __name((err) => { + try { + err.__rrweb__ = true; + } catch (error2) { + } + }, "errorHandler") + }; + this._initialOptions = { + flushMinDelay, + flushMaxDelay, + minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT), + maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION), + stickySession, + useCompression, + workerUrl, + blockAllMedia, + maskAllInputs, + maskAllText, + mutationBreadcrumbLimit, + mutationLimit, + slowClickTimeout, + slowClickIgnoreSelectors, + networkDetailAllowUrls, + networkDetailDenyUrls, + networkCaptureBodies, + networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders), + networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders), + beforeAddRecordingEvent, + beforeErrorSampling, + onError, + _experiments + }; + if (this._initialOptions.blockAllMedia) { + this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector ? MEDIA_SELECTORS : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`; + } + if (this._isInitialized && isBrowser$1()) { + throw new Error("Multiple Sentry Session Replay instances are not supported"); + } + this._isInitialized = true; + } + /** If replay has already been initialized */ + get _isInitialized() { + return _initialized; + } + /** Update _isInitialized */ + set _isInitialized(value4) { + _initialized = value4; + } + /** + * Setup and initialize replay container + */ + afterAllSetup(client) { + if (!isBrowser$1() || this._replay) { + return; + } + this._setup(client); + this._initialize(client); + } + /** + * Start a replay regardless of sampling rate. Calling this will always + * create a new session. Will log a message if replay is already in progress. + * + * Creates or loads a session, attaches listeners to varying events (DOM, + * PerformanceObserver, Recording, Sentry SDK, etc) + */ + start() { + if (!this._replay) { + return; + } + this._replay.start(); + } + /** + * Start replay buffering. Buffers until `flush()` is called or, if + * `replaysOnErrorSampleRate` > 0, until an error occurs. + */ + startBuffering() { + if (!this._replay) { + return; + } + this._replay.startBuffering(); + } + /** + * Currently, this needs to be manually called (e.g. for tests). Sentry SDK + * does not support a teardown + */ + stop() { + if (!this._replay) { + return Promise.resolve(); + } + return this._replay.stop({ forceFlush: this._replay.recordingMode === "session" }); + } + /** + * If not in "session" recording mode, flush event buffer which will create a new replay. + * If replay is not enabled, a new session replay is started. + * Unless `continueRecording` is false, the replay will continue to record and + * behave as a "session"-based replay. + * + * Otherwise, queue up a flush. + */ + flush(options4) { + if (!this._replay) { + return Promise.resolve(); + } + if (!this._replay.isEnabled()) { + this._replay.start(); + return Promise.resolve(); + } + return this._replay.sendBufferedReplayOrFlush(options4); + } + /** + * Get the current session ID. + */ + getReplayId() { + if (!this._replay || !this._replay.isEnabled()) { + return; + } + return this._replay.getSessionId(); + } + /** + * Get the current recording mode. This can be either `session` or `buffer`. + * + * `session`: Recording the whole session, sending it continuously + * `buffer`: Always keeping the last 60s of recording, requires: + * - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs + * - or calling `flush()` to send the replay + */ + getRecordingMode() { + if (!this._replay || !this._replay.isEnabled()) { + return; + } + return this._replay.recordingMode; + } + /** + * Initializes replay. + */ + _initialize(client) { + if (!this._replay) { + return; + } + this._maybeLoadFromReplayCanvasIntegration(client); + this._replay.initializeSampling(); + } + /** Setup the integration. */ + _setup(client) { + const finalOptions = loadReplayOptionsFromClient(this._initialOptions, client); + this._replay = new ReplayContainer({ + options: finalOptions, + recordingOptions: this._recordingOptions + }); + } + /** Get canvas options from ReplayCanvas integration, if it is also added. */ + _maybeLoadFromReplayCanvasIntegration(client) { + try { + const canvasIntegration = client.getIntegrationByName("ReplayCanvas"); + if (!canvasIntegration) { + return; + } + this._replay["_canvas"] = canvasIntegration.getOptions(); + } catch (e2) { + } + } +} +Replay.__initStatic(); +function loadReplayOptionsFromClient(initialOptions, client) { + const opt = client.getOptions(); + const finalOptions = { + sessionSampleRate: 0, + errorSampleRate: 0, + ...dropUndefinedKeys(initialOptions) + }; + const replaysSessionSampleRate = parseSampleRate(opt.replaysSessionSampleRate); + const replaysOnErrorSampleRate = parseSampleRate(opt.replaysOnErrorSampleRate); + if (replaysSessionSampleRate == null && replaysOnErrorSampleRate == null) { + consoleSandbox(() => { + console.warn( + "Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set." + ); + }); + } + if (replaysSessionSampleRate != null) { + finalOptions.sessionSampleRate = replaysSessionSampleRate; + } + if (replaysOnErrorSampleRate != null) { + finalOptions.errorSampleRate = replaysOnErrorSampleRate; + } + return finalOptions; +} +__name(loadReplayOptionsFromClient, "loadReplayOptionsFromClient"); +function _getMergedNetworkHeaders(headers) { + return [...DEFAULT_NETWORK_HEADERS, ...headers.map((header3) => header3.toLowerCase())]; +} +__name(_getMergedNetworkHeaders, "_getMergedNetworkHeaders"); +function getReplay() { + const client = getClient(); + return client && client.getIntegrationByName("Replay"); +} +__name(getReplay, "getReplay"); +var NodeType$2; +(function(NodeType3) { + NodeType3[NodeType3["Document"] = 0] = "Document"; + NodeType3[NodeType3["DocumentType"] = 1] = "DocumentType"; + NodeType3[NodeType3["Element"] = 2] = "Element"; + NodeType3[NodeType3["Text"] = 3] = "Text"; + NodeType3[NodeType3["CDATA"] = 4] = "CDATA"; + NodeType3[NodeType3["Comment"] = 5] = "Comment"; +})(NodeType$2 || (NodeType$2 = {})); +function elementClassMatchesRegex(el, regex2) { + for (let eIndex = el.classList.length; eIndex--; ) { + const className = el.classList[eIndex]; + if (regex2.test(className)) { + return true; + } + } + return false; +} +__name(elementClassMatchesRegex, "elementClassMatchesRegex"); +function distanceToMatch(node3, matchPredicate, limit = Infinity, distance2 = 0) { + if (!node3) + return -1; + if (node3.nodeType !== node3.ELEMENT_NODE) + return -1; + if (distance2 > limit) + return -1; + if (matchPredicate(node3)) + return distance2; + return distanceToMatch(node3.parentNode, matchPredicate, limit, distance2 + 1); +} +__name(distanceToMatch, "distanceToMatch"); +function createMatchPredicate(className, selector) { + return (node3) => { + const el = node3; + if (el === null) + return false; + try { + if (className) { + if (typeof className === "string") { + if (el.matches(`.${className}`)) + return true; + } else if (elementClassMatchesRegex(el, className)) { + return true; + } + } + if (selector && el.matches(selector)) + return true; + return false; + } catch (e2) { + return false; + } + }; +} +__name(createMatchPredicate, "createMatchPredicate"); +const DEPARTED_MIRROR_ACCESS_WARNING = "Please stop import mirror directly. Instead of that,\r\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\r\nor you can use record.mirror to access the mirror instance during recording."; +let _mirror = { + map: {}, + getId() { + console.error(DEPARTED_MIRROR_ACCESS_WARNING); + return -1; + }, + getNode() { + console.error(DEPARTED_MIRROR_ACCESS_WARNING); + return null; + }, + removeNodeFromMap() { + console.error(DEPARTED_MIRROR_ACCESS_WARNING); + }, + has() { + console.error(DEPARTED_MIRROR_ACCESS_WARNING); + return false; + }, + reset() { + console.error(DEPARTED_MIRROR_ACCESS_WARNING); + } +}; +if (typeof window !== "undefined" && window.Proxy && window.Reflect) { + _mirror = new Proxy(_mirror, { + get(target2, prop2, receiver) { + if (prop2 === "map") { + console.error(DEPARTED_MIRROR_ACCESS_WARNING); + } + return Reflect.get(target2, prop2, receiver); + } + }); +} +function hookSetter(target2, key, d2, isRevoked, win = window) { + const original = win.Object.getOwnPropertyDescriptor(target2, key); + win.Object.defineProperty(target2, key, isRevoked ? d2 : { + set(value4) { + setTimeout$1(() => { + d2.set.call(this, value4); + }, 0); + if (original && original.set) { + original.set.call(this, value4); + } + } + }); + return () => hookSetter(target2, key, original || {}, true); +} +__name(hookSetter, "hookSetter"); +function patch$1(source, name2, replacement) { + try { + if (!(name2 in source)) { + return () => { + }; + } + const original = source[name2]; + const wrapped = replacement(original); + if (typeof wrapped === "function") { + wrapped.prototype = wrapped.prototype || {}; + Object.defineProperties(wrapped, { + __rrweb_original__: { + enumerable: false, + value: original + } + }); + } + source[name2] = wrapped; + return () => { + source[name2] = original; + }; + } catch (e2) { + return () => { + }; + } +} +__name(patch$1, "patch$1"); +if (!/[1-9][0-9]{12}/.test(Date.now().toString())) ; +function closestElementOfNode(node3) { + if (!node3) { + return null; + } + const el = node3.nodeType === node3.ELEMENT_NODE ? node3 : node3.parentElement; + return el; +} +__name(closestElementOfNode, "closestElementOfNode"); +function isBlocked(node3, blockClass, blockSelector, unblockSelector, checkAncestors) { + if (!node3) { + return false; + } + const el = closestElementOfNode(node3); + if (!el) { + return false; + } + const blockedPredicate = createMatchPredicate(blockClass, blockSelector); + const blockDistance = distanceToMatch(el, blockedPredicate); + let unblockDistance = -1; + if (blockDistance < 0) { + return false; + } + if (unblockSelector) { + unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector)); + } + if (blockDistance > -1 && unblockDistance < 0) { + return true; + } + return blockDistance < unblockDistance; +} +__name(isBlocked, "isBlocked"); +const cachedImplementations = {}; +function getImplementation(name2) { + const cached = cachedImplementations[name2]; + if (cached) { + return cached; + } + const document2 = window.document; + let impl = window[name2]; + if (document2 && typeof document2.createElement === "function") { + try { + const sandbox = document2.createElement("iframe"); + sandbox.hidden = true; + document2.head.appendChild(sandbox); + const contentWindow = sandbox.contentWindow; + if (contentWindow && contentWindow[name2]) { + impl = contentWindow[name2]; + } + document2.head.removeChild(sandbox); + } catch (e2) { + } + } + return cachedImplementations[name2] = impl.bind(window); +} +__name(getImplementation, "getImplementation"); +function onRequestAnimationFrame(...rest) { + return getImplementation("requestAnimationFrame")(...rest); +} +__name(onRequestAnimationFrame, "onRequestAnimationFrame"); +function setTimeout$1(...rest) { + return getImplementation("setTimeout")(...rest); +} +__name(setTimeout$1, "setTimeout$1"); +var CanvasContext = /* @__PURE__ */ ((CanvasContext2) => { + CanvasContext2[CanvasContext2["2D"] = 0] = "2D"; + CanvasContext2[CanvasContext2["WebGL"] = 1] = "WebGL"; + CanvasContext2[CanvasContext2["WebGL2"] = 2] = "WebGL2"; + return CanvasContext2; +})(CanvasContext || {}); +let errorHandler; +function registerErrorHandler(handler12) { + errorHandler = handler12; +} +__name(registerErrorHandler, "registerErrorHandler"); +const callbackWrapper = /* @__PURE__ */ __name((cb) => { + if (!errorHandler) { + return cb; + } + const rrwebWrapped = /* @__PURE__ */ __name((...rest) => { + try { + return cb(...rest); + } catch (error2) { + if (errorHandler && errorHandler(error2) === true) { + return () => { + }; + } + throw error2; + } + }, "rrwebWrapped"); + return rrwebWrapped; +}, "callbackWrapper"); +var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +var lookup = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256); +for (var i$3 = 0; i$3 < chars.length; i$3++) { + lookup[chars.charCodeAt(i$3)] = i$3; +} +var encode$5 = /* @__PURE__ */ __name(function(arraybuffer) { + var bytes = new Uint8Array(arraybuffer), i2, len = bytes.length, base64 = ""; + for (i2 = 0; i2 < len; i2 += 3) { + base64 += chars[bytes[i2] >> 2]; + base64 += chars[(bytes[i2] & 3) << 4 | bytes[i2 + 1] >> 4]; + base64 += chars[(bytes[i2 + 1] & 15) << 2 | bytes[i2 + 2] >> 6]; + base64 += chars[bytes[i2 + 2] & 63]; + } + if (len % 3 === 2) { + base64 = base64.substring(0, base64.length - 1) + "="; + } else if (len % 3 === 1) { + base64 = base64.substring(0, base64.length - 2) + "=="; + } + return base64; +}, "encode$5"); +const canvasVarMap = /* @__PURE__ */ new Map(); +function variableListFor(ctx, ctor) { + let contextMap = canvasVarMap.get(ctx); + if (!contextMap) { + contextMap = /* @__PURE__ */ new Map(); + canvasVarMap.set(ctx, contextMap); + } + if (!contextMap.has(ctor)) { + contextMap.set(ctor, []); + } + return contextMap.get(ctor); +} +__name(variableListFor, "variableListFor"); +const saveWebGLVar = /* @__PURE__ */ __name((value4, win, ctx) => { + if (!value4 || !(isInstanceOfWebGLObject(value4, win) || typeof value4 === "object")) + return; + const name2 = value4.constructor.name; + const list2 = variableListFor(ctx, name2); + let index2 = list2.indexOf(value4); + if (index2 === -1) { + index2 = list2.length; + list2.push(value4); + } + return index2; +}, "saveWebGLVar"); +function serializeArg(value4, win, ctx) { + if (value4 instanceof Array) { + return value4.map((arg) => serializeArg(arg, win, ctx)); + } else if (value4 === null) { + return value4; + } else if (value4 instanceof Float32Array || value4 instanceof Float64Array || value4 instanceof Int32Array || value4 instanceof Uint32Array || value4 instanceof Uint8Array || value4 instanceof Uint16Array || value4 instanceof Int16Array || value4 instanceof Int8Array || value4 instanceof Uint8ClampedArray) { + const name2 = value4.constructor.name; + return { + rr_type: name2, + args: [Object.values(value4)] + }; + } else if (value4 instanceof ArrayBuffer) { + const name2 = value4.constructor.name; + const base64 = encode$5(value4); + return { + rr_type: name2, + base64 + }; + } else if (value4 instanceof DataView) { + const name2 = value4.constructor.name; + return { + rr_type: name2, + args: [ + serializeArg(value4.buffer, win, ctx), + value4.byteOffset, + value4.byteLength + ] + }; + } else if (value4 instanceof HTMLImageElement) { + const name2 = value4.constructor.name; + const { src } = value4; + return { + rr_type: name2, + src + }; + } else if (value4 instanceof HTMLCanvasElement) { + const name2 = "HTMLImageElement"; + const src = value4.toDataURL(); + return { + rr_type: name2, + src + }; + } else if (value4 instanceof ImageData) { + const name2 = value4.constructor.name; + return { + rr_type: name2, + args: [serializeArg(value4.data, win, ctx), value4.width, value4.height] + }; + } else if (isInstanceOfWebGLObject(value4, win) || typeof value4 === "object") { + const name2 = value4.constructor.name; + const index2 = saveWebGLVar(value4, win, ctx); + return { + rr_type: name2, + index: index2 + }; + } + return value4; +} +__name(serializeArg, "serializeArg"); +const serializeArgs = /* @__PURE__ */ __name((args, win, ctx) => { + return args.map((arg) => serializeArg(arg, win, ctx)); +}, "serializeArgs"); +const isInstanceOfWebGLObject = /* @__PURE__ */ __name((value4, win) => { + const webGLConstructorNames = [ + "WebGLActiveInfo", + "WebGLBuffer", + "WebGLFramebuffer", + "WebGLProgram", + "WebGLRenderbuffer", + "WebGLShader", + "WebGLShaderPrecisionFormat", + "WebGLTexture", + "WebGLUniformLocation", + "WebGLVertexArrayObject", + "WebGLVertexArrayObjectOES" + ]; + const supportedWebGLConstructorNames = webGLConstructorNames.filter((name2) => typeof win[name2] === "function"); + return Boolean(supportedWebGLConstructorNames.find((name2) => value4 instanceof win[name2])); +}, "isInstanceOfWebGLObject"); +function initCanvas2DMutationObserver(cb, win, blockClass, blockSelector, unblockSelector) { + const handlers2 = []; + const props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype); + for (const prop2 of props2D) { + try { + if (typeof win.CanvasRenderingContext2D.prototype[prop2] !== "function") { + continue; + } + const restoreHandler = patch$1(win.CanvasRenderingContext2D.prototype, prop2, function(original) { + return function(...args) { + if (!isBlocked(this.canvas, blockClass, blockSelector, unblockSelector, true)) { + setTimeout$1(() => { + const recordArgs = serializeArgs(args, win, this); + cb(this.canvas, { + type: CanvasContext["2D"], + property: prop2, + args: recordArgs + }); + }, 0); + } + return original.apply(this, args); + }; + }); + handlers2.push(restoreHandler); + } catch (e2) { + const hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop2, { + set(v2) { + cb(this.canvas, { + type: CanvasContext["2D"], + property: prop2, + args: [v2], + setter: true + }); + } + }); + handlers2.push(hookHandler); + } + } + return () => { + handlers2.forEach((h2) => h2()); + }; +} +__name(initCanvas2DMutationObserver, "initCanvas2DMutationObserver"); +function getNormalizedContextName(contextType) { + return contextType === "experimental-webgl" ? "webgl" : contextType; +} +__name(getNormalizedContextName, "getNormalizedContextName"); +function initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, setPreserveDrawingBufferToTrue) { + const handlers2 = []; + try { + const restoreHandler = patch$1(win.HTMLCanvasElement.prototype, "getContext", function(original) { + return function(contextType, ...args) { + if (!isBlocked(this, blockClass, blockSelector, unblockSelector, true)) { + const ctxName = getNormalizedContextName(contextType); + if (!("__context" in this)) + this.__context = ctxName; + if (setPreserveDrawingBufferToTrue && ["webgl", "webgl2"].includes(ctxName)) { + if (args[0] && typeof args[0] === "object") { + const contextAttributes = args[0]; + if (!contextAttributes.preserveDrawingBuffer) { + contextAttributes.preserveDrawingBuffer = true; + } + } else { + args.splice(0, 1, { + preserveDrawingBuffer: true + }); + } + } + } + return original.apply(this, [contextType, ...args]); + }; + }); + handlers2.push(restoreHandler); + } catch (e2) { + console.error("failed to patch HTMLCanvasElement.prototype.getContext"); + } + return () => { + handlers2.forEach((h2) => h2()); + }; +} +__name(initCanvasContextObserver, "initCanvasContextObserver"); +function patchGLPrototype(prototype2, type, cb, blockClass, blockSelector, unblockSelector, mirror2, win) { + const handlers2 = []; + const props = Object.getOwnPropertyNames(prototype2); + for (const prop2 of props) { + if ([ + "isContextLost", + "canvas", + "drawingBufferWidth", + "drawingBufferHeight" + ].includes(prop2)) { + continue; + } + try { + if (typeof prototype2[prop2] !== "function") { + continue; + } + const restoreHandler = patch$1(prototype2, prop2, function(original) { + return function(...args) { + const result = original.apply(this, args); + saveWebGLVar(result, win, this); + if ("tagName" in this.canvas && !isBlocked(this.canvas, blockClass, blockSelector, unblockSelector, true)) { + const recordArgs = serializeArgs(args, win, this); + const mutation = { + type, + property: prop2, + args: recordArgs + }; + cb(this.canvas, mutation); + } + return result; + }; + }); + handlers2.push(restoreHandler); + } catch (e2) { + const hookHandler = hookSetter(prototype2, prop2, { + set(v2) { + cb(this.canvas, { + type, + property: prop2, + args: [v2], + setter: true + }); + } + }); + handlers2.push(hookHandler); + } + } + return handlers2; +} +__name(patchGLPrototype, "patchGLPrototype"); +function initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector, unblockSelector, mirror2) { + const handlers2 = []; + handlers2.push(...patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, unblockSelector, mirror2, win)); + if (typeof win.WebGL2RenderingContext !== "undefined") { + handlers2.push(...patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, unblockSelector, mirror2, win)); + } + return () => { + handlers2.forEach((h2) => h2()); + }; +} +__name(initCanvasWebGLMutationObserver, "initCanvasWebGLMutationObserver"); +var r$2 = `for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t="undefined"==typeof Uint8Array?[]:new Uint8Array(256),a=0;a<64;a++)t[e.charCodeAt(a)]=a;var n=function(t){var a,n=new Uint8Array(t),r=n.length,s="";for(a=0;a>2],s+=e[(3&n[a])<<4|n[a+1]>>4],s+=e[(15&n[a+1])<<2|n[a+2]>>6],s+=e[63&n[a+2]];return r%3==2?s=s.substring(0,s.length-1)+"=":r%3==1&&(s=s.substring(0,s.length-2)+"=="),s};const r=new Map,s=new Map;const i=self;i.onmessage=async function(e){if(!("OffscreenCanvas"in globalThis))return i.postMessage({id:e.data.id});{const{id:t,bitmap:a,width:o,height:f,maxCanvasSize:c,dataURLOptions:g}=e.data,u=async function(e,t,a){const r=e+"-"+t;if("OffscreenCanvas"in globalThis){if(s.has(r))return s.get(r);const i=new OffscreenCanvas(e,t);i.getContext("2d");const o=await i.convertToBlob(a),f=await o.arrayBuffer(),c=n(f);return s.set(r,c),c}return""}(o,f,g),[h,d]=function(e,t,a){if(!a)return[e,t];const[n,r]=a;if(e<=n&&t<=r)return[e,t];let s=e,i=t;return s>n&&(i=Math.floor(n*t/e),s=n),i>r&&(s=Math.floor(r*e/t),i=r),[s,i]}(o,f,c),l=new OffscreenCanvas(h,d),w=l.getContext("bitmaprenderer"),p=h===o&&d===f?a:await createImageBitmap(a,{resizeWidth:h,resizeHeight:d,resizeQuality:"low"});w.transferFromImageBitmap(p),a.close();const y=await l.convertToBlob(g),v=y.type,b=await y.arrayBuffer(),m=n(b);if(p.close(),!r.has(t)&&await u===m)return r.set(t,m),i.postMessage({id:t});if(r.get(t)===m)return i.postMessage({id:t});i.postMessage({id:t,type:v,base64:m,width:o,height:f}),r.set(t,m)}};`; +function t$2() { + const t2 = new Blob([r$2]); + return URL.createObjectURL(t2); +} +__name(t$2, "t$2"); +class CanvasManager { + static { + __name(this, "CanvasManager"); + } + reset() { + this.pendingCanvasMutations.clear(); + this.restoreHandlers.forEach((handler12) => { + try { + handler12(); + } catch (e2) { + } + }); + this.restoreHandlers = []; + this.windowsSet = /* @__PURE__ */ new WeakSet(); + this.windows = []; + this.shadowDoms = /* @__PURE__ */ new Set(); + _optionalChain([this, "access", (_2) => _2.worker, "optionalAccess", (_2) => _2.terminate, "call", (_3) => _3()]); + this.worker = null; + this.snapshotInProgressMap = /* @__PURE__ */ new Map(); + } + freeze() { + this.frozen = true; + } + unfreeze() { + this.frozen = false; + } + lock() { + this.locked = true; + } + unlock() { + this.locked = false; + } + constructor(options4) { + this.pendingCanvasMutations = /* @__PURE__ */ new Map(); + this.rafStamps = { latestId: 0, invokeId: null }; + this.shadowDoms = /* @__PURE__ */ new Set(); + this.windowsSet = /* @__PURE__ */ new WeakSet(); + this.windows = []; + this.restoreHandlers = []; + this.frozen = false; + this.locked = false; + this.snapshotInProgressMap = /* @__PURE__ */ new Map(); + this.worker = null; + this.processMutation = (target2, mutation) => { + const newFrame = this.rafStamps.invokeId && this.rafStamps.latestId !== this.rafStamps.invokeId; + if (newFrame || !this.rafStamps.invokeId) + this.rafStamps.invokeId = this.rafStamps.latestId; + if (!this.pendingCanvasMutations.has(target2)) { + this.pendingCanvasMutations.set(target2, []); + } + this.pendingCanvasMutations.get(target2).push(mutation); + }; + const { sampling = "all", win, blockClass, blockSelector, unblockSelector, maxCanvasSize, recordCanvas, dataURLOptions, errorHandler: errorHandler2 } = options4; + this.mutationCb = options4.mutationCb; + this.mirror = options4.mirror; + this.options = options4; + if (errorHandler2) { + registerErrorHandler(errorHandler2); + } + if (recordCanvas && typeof sampling === "number" || options4.enableManualSnapshot) { + this.worker = this.initFPSWorker(); + } + this.addWindow(win); + if (options4.enableManualSnapshot) { + return; + } + callbackWrapper(() => { + if (recordCanvas && sampling === "all") { + this.startRAFTimestamping(); + this.startPendingCanvasMutationFlusher(); + } + if (recordCanvas && typeof sampling === "number") { + this.initCanvasFPSObserver(sampling, blockClass, blockSelector, unblockSelector, maxCanvasSize, { + dataURLOptions + }); + } + })(); + } + addWindow(win) { + const { sampling = "all", blockClass, blockSelector, unblockSelector, recordCanvas, enableManualSnapshot } = this.options; + if (this.windowsSet.has(win)) + return; + if (enableManualSnapshot) { + this.windowsSet.add(win); + this.windows.push(new WeakRef(win)); + return; + } + callbackWrapper(() => { + if (recordCanvas && sampling === "all") { + this.initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector); + } + if (recordCanvas && typeof sampling === "number") { + const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, true); + this.restoreHandlers.push(() => { + canvasContextReset(); + }); + } + })(); + this.windowsSet.add(win); + this.windows.push(new WeakRef(win)); + } + addShadowRoot(shadowRoot) { + this.shadowDoms.add(new WeakRef(shadowRoot)); + } + resetShadowRoots() { + this.shadowDoms = /* @__PURE__ */ new Set(); + } + initFPSWorker() { + const worker = new Worker(t$2()); + worker.onmessage = (e2) => { + const data26 = e2.data; + const { id: id3 } = data26; + this.snapshotInProgressMap.set(id3, false); + if (!("base64" in data26)) + return; + const { base64, type, width: width2, height } = data26; + this.mutationCb({ + id: id3, + type: CanvasContext["2D"], + commands: [ + { + property: "clearRect", + args: [0, 0, width2, height] + }, + { + property: "drawImage", + args: [ + { + rr_type: "ImageBitmap", + args: [ + { + rr_type: "Blob", + data: [{ rr_type: "ArrayBuffer", base64 }], + type + } + ] + }, + 0, + 0, + width2, + height + ] + } + ] + }); + }; + return worker; + } + initCanvasFPSObserver(fps, blockClass, blockSelector, unblockSelector, maxCanvasSize, options4) { + const rafId = this.takeSnapshot(false, fps, blockClass, blockSelector, unblockSelector, maxCanvasSize, options4.dataURLOptions); + this.restoreHandlers.push(() => { + cancelAnimationFrame(rafId); + }); + } + initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector) { + const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, false); + const canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, unblockSelector); + const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, unblockSelector, this.mirror); + this.restoreHandlers.push(() => { + canvasContextReset(); + canvas2DReset(); + canvasWebGL1and2Reset(); + }); + } + snapshot(canvasElement) { + const { options: options4 } = this; + const rafId = this.takeSnapshot(true, options4.sampling === "all" ? 2 : options4.sampling || 2, options4.blockClass, options4.blockSelector, options4.unblockSelector, options4.maxCanvasSize, options4.dataURLOptions, canvasElement); + this.restoreHandlers.push(() => { + cancelAnimationFrame(rafId); + }); + } + takeSnapshot(isManualSnapshot, fps, blockClass, blockSelector, unblockSelector, maxCanvasSize, dataURLOptions, canvasElement) { + const timeBetweenSnapshots = 1e3 / fps; + let lastSnapshotTime = 0; + let rafId; + const getCanvas = /* @__PURE__ */ __name((canvasElement2) => { + if (canvasElement2) { + return [canvasElement2]; + } + const matchedCanvas = []; + const searchCanvas = /* @__PURE__ */ __name((root29) => { + root29.querySelectorAll("canvas").forEach((canvas) => { + if (!isBlocked(canvas, blockClass, blockSelector, unblockSelector)) { + matchedCanvas.push(canvas); + } + }); + }, "searchCanvas"); + for (const item3 of this.windows) { + const window2 = item3.deref(); + if (window2) { + searchCanvas(window2.document); + } + } + for (const item3 of this.shadowDoms) { + const shadowRoot = item3.deref(); + if (shadowRoot) { + searchCanvas(shadowRoot); + } + } + return matchedCanvas; + }, "getCanvas"); + const takeCanvasSnapshots = /* @__PURE__ */ __name((timestamp2) => { + if (!this.windows.length) { + return; + } + if (lastSnapshotTime && timestamp2 - lastSnapshotTime < timeBetweenSnapshots) { + rafId = onRequestAnimationFrame(takeCanvasSnapshots); + return; + } + lastSnapshotTime = timestamp2; + getCanvas(canvasElement).forEach((canvas) => { + if (!this.mirror.hasNode(canvas)) { + return; + } + const id3 = this.mirror.getId(canvas); + if (this.snapshotInProgressMap.get(id3)) + return; + if (!canvas.width || !canvas.height) + return; + this.snapshotInProgressMap.set(id3, true); + if (!isManualSnapshot && ["webgl", "webgl2"].includes(canvas.__context)) { + const context = canvas.getContext(canvas.__context); + if (_optionalChain([context, "optionalAccess", (_4) => _4.getContextAttributes, "call", (_5) => _5(), "optionalAccess", (_6) => _6.preserveDrawingBuffer]) === false) { + context.clear(context.COLOR_BUFFER_BIT); + } + } + createImageBitmap(canvas).then((bitmap) => { + _optionalChain([this, "access", (_7) => _7.worker, "optionalAccess", (_8) => _8.postMessage, "call", (_9) => _9({ + id: id3, + bitmap, + width: canvas.width, + height: canvas.height, + dataURLOptions, + maxCanvasSize + }, [bitmap])]); + }).catch((error2) => { + callbackWrapper(() => { + throw error2; + })(); + }); + }); + if (!isManualSnapshot) { + rafId = onRequestAnimationFrame(takeCanvasSnapshots); + } + }, "takeCanvasSnapshots"); + rafId = onRequestAnimationFrame(takeCanvasSnapshots); + return rafId; + } + startPendingCanvasMutationFlusher() { + onRequestAnimationFrame(() => this.flushPendingCanvasMutations()); + } + startRAFTimestamping() { + const setLatestRAFTimestamp = /* @__PURE__ */ __name((timestamp2) => { + this.rafStamps.latestId = timestamp2; + onRequestAnimationFrame(setLatestRAFTimestamp); + }, "setLatestRAFTimestamp"); + onRequestAnimationFrame(setLatestRAFTimestamp); + } + flushPendingCanvasMutations() { + this.pendingCanvasMutations.forEach((values, canvas) => { + const id3 = this.mirror.getId(canvas); + this.flushPendingCanvasMutationFor(canvas, id3); + }); + onRequestAnimationFrame(() => this.flushPendingCanvasMutations()); + } + flushPendingCanvasMutationFor(canvas, id3) { + if (this.frozen || this.locked) { + return; + } + const valuesWithType = this.pendingCanvasMutations.get(canvas); + if (!valuesWithType || id3 === -1) + return; + const values = valuesWithType.map((value4) => { + const { type: type2, ...rest } = value4; + return rest; + }); + const { type } = valuesWithType[0]; + this.mutationCb({ id: id3, type, commands: values }); + this.pendingCanvasMutations.delete(canvas); + } +} +const CANVAS_QUALITY = { + low: { + sampling: { + canvas: 1 + }, + dataURLOptions: { + type: "image/webp", + quality: 0.25 + } + }, + medium: { + sampling: { + canvas: 2 + }, + dataURLOptions: { + type: "image/webp", + quality: 0.4 + } + }, + high: { + sampling: { + canvas: 4 + }, + dataURLOptions: { + type: "image/webp", + quality: 0.5 + } + } +}; +const INTEGRATION_NAME$3 = "ReplayCanvas"; +const DEFAULT_MAX_CANVAS_SIZE = 1280; +const _replayCanvasIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const [maxCanvasWidth, maxCanvasHeight] = options4.maxCanvasSize || []; + const _canvasOptions = { + quality: options4.quality || "medium", + enableManualSnapshot: options4.enableManualSnapshot, + maxCanvasSize: [ + maxCanvasWidth ? Math.min(maxCanvasWidth, DEFAULT_MAX_CANVAS_SIZE) : DEFAULT_MAX_CANVAS_SIZE, + maxCanvasHeight ? Math.min(maxCanvasHeight, DEFAULT_MAX_CANVAS_SIZE) : DEFAULT_MAX_CANVAS_SIZE + ] + }; + let canvasManagerResolve; + const _canvasManager = new Promise((resolve2) => canvasManagerResolve = resolve2); + return { + name: INTEGRATION_NAME$3, + getOptions() { + const { quality, enableManualSnapshot, maxCanvasSize } = _canvasOptions; + return { + enableManualSnapshot, + recordCanvas: true, + getCanvasManager: /* @__PURE__ */ __name((getCanvasManagerOptions) => { + const manager = new CanvasManager({ + ...getCanvasManagerOptions, + enableManualSnapshot, + maxCanvasSize, + errorHandler: /* @__PURE__ */ __name((err) => { + try { + if (typeof err === "object") { + err.__rrweb__ = true; + } + } catch (error2) { + } + }, "errorHandler") + }); + canvasManagerResolve(manager); + return manager; + }, "getCanvasManager"), + ...CANVAS_QUALITY[quality || "medium"] || CANVAS_QUALITY.medium + }; + }, + async snapshot(canvasElement) { + const canvasManager = await _canvasManager; + canvasManager.snapshot(canvasElement); + } + }; +}, "_replayCanvasIntegration"); +const replayCanvasIntegration = defineIntegration( + _replayCanvasIntegration +); +const WINDOW = GLOBAL_OBJ; +const DOCUMENT = WINDOW.document; +const NAVIGATOR = WINDOW.navigator; +const TRIGGER_LABEL = "Report a Bug"; +const CANCEL_BUTTON_LABEL = "Cancel"; +const SUBMIT_BUTTON_LABEL = "Send Bug Report"; +const CONFIRM_BUTTON_LABEL = "Confirm"; +const FORM_TITLE = "Report a Bug"; +const EMAIL_PLACEHOLDER = "your.email@example.org"; +const EMAIL_LABEL = "Email"; +const MESSAGE_PLACEHOLDER = "What's the bug? What did you expect?"; +const MESSAGE_LABEL = "Description"; +const NAME_PLACEHOLDER = "Your Name"; +const NAME_LABEL = "Name"; +const SUCCESS_MESSAGE_TEXT = "Thank you for your report!"; +const IS_REQUIRED_LABEL = "(required)"; +const ADD_SCREENSHOT_LABEL = "Add a screenshot"; +const REMOVE_SCREENSHOT_LABEL = "Remove screenshot"; +const FEEDBACK_WIDGET_SOURCE = "widget"; +const FEEDBACK_API_SOURCE = "api"; +const SUCCESS_MESSAGE_TIMEOUT = 5e3; +const sendFeedback = /* @__PURE__ */ __name((params, hint = { includeReplay: true }) => { + if (!params.message) { + throw new Error("Unable to submit feedback with empty message"); + } + const client = getClient(); + if (!client) { + throw new Error("No client setup, cannot send feedback."); + } + if (params.tags && Object.keys(params.tags).length) { + getCurrentScope$1().setTags(params.tags); + } + const eventId = captureFeedback( + { + source: FEEDBACK_API_SOURCE, + url: getLocationHref(), + ...params + }, + hint + ); + return new Promise((resolve2, reject3) => { + const timeout = setTimeout(() => reject3("Unable to determine if Feedback was correctly sent."), 5e3); + const cleanup = client.on("afterSendEvent", (event, response) => { + if (event.event_id !== eventId) { + return; + } + clearTimeout(timeout); + cleanup(); + if (response && typeof response.statusCode === "number" && response.statusCode >= 200 && response.statusCode < 300) { + return resolve2(eventId); + } + if (response && typeof response.statusCode === "number" && response.statusCode === 0) { + return reject3( + "Unable to send Feedback. This is because of network issues, or because you are using an ad-blocker." + ); + } + if (response && typeof response.statusCode === "number" && response.statusCode === 403) { + return reject3( + "Unable to send Feedback. This could be because this domain is not in your list of allowed domains." + ); + } + return reject3( + "Unable to send Feedback. This could be because of network issues, or because you are using an ad-blocker" + ); + }); + }); +}, "sendFeedback"); +const DEBUG_BUILD$1 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; +function isScreenshotSupported() { + if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(NAVIGATOR.userAgent)) { + return false; + } + if (/Macintosh/i.test(NAVIGATOR.userAgent) && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 1) { + return false; + } + if (!isSecureContext) { + return false; + } + return true; +} +__name(isScreenshotSupported, "isScreenshotSupported"); +function mergeOptions$2(defaultOptions2, optionOverrides) { + return { + ...defaultOptions2, + ...optionOverrides, + tags: { + ...defaultOptions2.tags, + ...optionOverrides.tags + }, + onFormOpen: /* @__PURE__ */ __name(() => { + optionOverrides.onFormOpen && optionOverrides.onFormOpen(); + defaultOptions2.onFormOpen && defaultOptions2.onFormOpen(); + }, "onFormOpen"), + onFormClose: /* @__PURE__ */ __name(() => { + optionOverrides.onFormClose && optionOverrides.onFormClose(); + defaultOptions2.onFormClose && defaultOptions2.onFormClose(); + }, "onFormClose"), + onSubmitSuccess: /* @__PURE__ */ __name((data26) => { + optionOverrides.onSubmitSuccess && optionOverrides.onSubmitSuccess(data26); + defaultOptions2.onSubmitSuccess && defaultOptions2.onSubmitSuccess(data26); + }, "onSubmitSuccess"), + onSubmitError: /* @__PURE__ */ __name((error2) => { + optionOverrides.onSubmitError && optionOverrides.onSubmitError(error2); + defaultOptions2.onSubmitError && defaultOptions2.onSubmitError(error2); + }, "onSubmitError"), + onFormSubmitted: /* @__PURE__ */ __name(() => { + optionOverrides.onFormSubmitted && optionOverrides.onFormSubmitted(); + defaultOptions2.onFormSubmitted && defaultOptions2.onFormSubmitted(); + }, "onFormSubmitted"), + themeDark: { + ...defaultOptions2.themeDark, + ...optionOverrides.themeDark + }, + themeLight: { + ...defaultOptions2.themeLight, + ...optionOverrides.themeLight + } + }; +} +__name(mergeOptions$2, "mergeOptions$2"); +function createActorStyles(styleNonce) { + const style2 = DOCUMENT.createElement("style"); + style2.textContent = ` +.widget__actor { + position: fixed; + z-index: var(--z-index); + margin: var(--page-margin); + inset: var(--actor-inset); + + display: flex; + align-items: center; + gap: 8px; + padding: 16px; + + font-family: inherit; + font-size: var(--font-size); + font-weight: 600; + line-height: 1.14em; + text-decoration: none; + + background: var(--actor-background, var(--background)); + border-radius: var(--actor-border-radius, 1.7em/50%); + border: var(--actor-border, var(--border)); + box-shadow: var(--actor-box-shadow, var(--box-shadow)); + color: var(--actor-color, var(--foreground)); + fill: var(--actor-color, var(--foreground)); + cursor: pointer; + opacity: 1; + transition: transform 0.2s ease-in-out; + transform: translate(0, 0) scale(1); +} +.widget__actor[aria-hidden="true"] { + opacity: 0; + pointer-events: none; + visibility: hidden; + transform: translate(0, 16px) scale(0.98); +} + +.widget__actor:hover { + background: var(--actor-hover-background, var(--background)); + filter: var(--interactive-filter); +} + +.widget__actor svg { + width: 1.14em; + height: 1.14em; +} + +@media (max-width: 600px) { + .widget__actor span { + display: none; + } +} +`; + if (styleNonce) { + style2.setAttribute("nonce", styleNonce); + } + return style2; +} +__name(createActorStyles, "createActorStyles"); +function setAttributesNS(el, attributes) { + Object.entries(attributes).forEach(([key, val]) => { + el.setAttributeNS(null, key, val); + }); + return el; +} +__name(setAttributesNS, "setAttributesNS"); +const SIZE$1 = 20; +const XMLNS$2 = "http://www.w3.org/2000/svg"; +function FeedbackIcon() { + const createElementNS = /* @__PURE__ */ __name((tagName) => WINDOW.document.createElementNS(XMLNS$2, tagName), "createElementNS"); + const svg = setAttributesNS(createElementNS("svg"), { + width: `${SIZE$1}`, + height: `${SIZE$1}`, + viewBox: `0 0 ${SIZE$1} ${SIZE$1}`, + fill: "var(--actor-color, var(--foreground))" + }); + const g2 = setAttributesNS(createElementNS("g"), { + clipPath: "url(#clip0_57_80)" + }); + const path = setAttributesNS(createElementNS("path"), { + ["fill-rule"]: "evenodd", + ["clip-rule"]: "evenodd", + d: "M15.6622 15H12.3997C12.2129 14.9959 12.031 14.9396 11.8747 14.8375L8.04965 12.2H7.49956V19.1C7.4875 19.3348 7.3888 19.5568 7.22256 19.723C7.05632 19.8892 6.83435 19.9879 6.59956 20H2.04956C1.80193 19.9968 1.56535 19.8969 1.39023 19.7218C1.21511 19.5467 1.1153 19.3101 1.11206 19.0625V12.2H0.949652C0.824431 12.2017 0.700142 12.1783 0.584123 12.1311C0.468104 12.084 0.362708 12.014 0.274155 11.9255C0.185602 11.8369 0.115689 11.7315 0.0685419 11.6155C0.0213952 11.4995 -0.00202913 11.3752 -0.00034808 11.25V3.75C-0.00900498 3.62067 0.0092504 3.49095 0.0532651 3.36904C0.0972798 3.24712 0.166097 3.13566 0.255372 3.04168C0.344646 2.94771 0.452437 2.87327 0.571937 2.82307C0.691437 2.77286 0.82005 2.74798 0.949652 2.75H8.04965L11.8747 0.1625C12.031 0.0603649 12.2129 0.00407221 12.3997 0H15.6622C15.9098 0.00323746 16.1464 0.103049 16.3215 0.278167C16.4966 0.453286 16.5964 0.689866 16.5997 0.9375V3.25269C17.3969 3.42959 18.1345 3.83026 18.7211 4.41679C19.5322 5.22788 19.9878 6.32796 19.9878 7.47502C19.9878 8.62209 19.5322 9.72217 18.7211 10.5333C18.1345 11.1198 17.3969 11.5205 16.5997 11.6974V14.0125C16.6047 14.1393 16.5842 14.2659 16.5395 14.3847C16.4948 14.5035 16.4268 14.6121 16.3394 14.7042C16.252 14.7962 16.147 14.8698 16.0307 14.9206C15.9144 14.9714 15.7891 14.9984 15.6622 15ZM1.89695 10.325H1.88715V4.625H8.33715C8.52423 4.62301 8.70666 4.56654 8.86215 4.4625L12.6872 1.875H14.7247V13.125H12.6872L8.86215 10.4875C8.70666 10.3835 8.52423 10.327 8.33715 10.325H2.20217C2.15205 10.3167 2.10102 10.3125 2.04956 10.3125C1.9981 10.3125 1.94708 10.3167 1.89695 10.325ZM2.98706 12.2V18.1625H5.66206V12.2H2.98706ZM16.5997 9.93612V5.01393C16.6536 5.02355 16.7072 5.03495 16.7605 5.04814C17.1202 5.13709 17.4556 5.30487 17.7425 5.53934C18.0293 5.77381 18.2605 6.06912 18.4192 6.40389C18.578 6.73866 18.6603 7.10452 18.6603 7.47502C18.6603 7.84552 18.578 8.21139 18.4192 8.54616C18.2605 8.88093 18.0293 9.17624 17.7425 9.41071C17.4556 9.64518 17.1202 9.81296 16.7605 9.90191C16.7072 9.91509 16.6536 9.9265 16.5997 9.93612Z" + }); + svg.appendChild(g2).appendChild(path); + const speakerDefs = createElementNS("defs"); + const speakerClipPathDef = setAttributesNS(createElementNS("clipPath"), { + id: "clip0_57_80" + }); + const speakerRect = setAttributesNS(createElementNS("rect"), { + width: `${SIZE$1}`, + height: `${SIZE$1}`, + fill: "white" + }); + speakerClipPathDef.appendChild(speakerRect); + speakerDefs.appendChild(speakerClipPathDef); + svg.appendChild(speakerDefs).appendChild(speakerClipPathDef).appendChild(speakerRect); + return svg; +} +__name(FeedbackIcon, "FeedbackIcon"); +function Actor({ triggerLabel, triggerAriaLabel, shadow, styleNonce }) { + const el = DOCUMENT.createElement("button"); + el.type = "button"; + el.className = "widget__actor"; + el.ariaHidden = "false"; + el.ariaLabel = triggerAriaLabel || triggerLabel || TRIGGER_LABEL; + el.appendChild(FeedbackIcon()); + if (triggerLabel) { + const label5 = DOCUMENT.createElement("span"); + label5.appendChild(DOCUMENT.createTextNode(triggerLabel)); + el.appendChild(label5); + } + const style2 = createActorStyles(styleNonce); + return { + el, + appendToDom() { + shadow.appendChild(style2); + shadow.appendChild(el); + }, + removeFromDom() { + shadow.removeChild(el); + shadow.removeChild(style2); + }, + show() { + el.ariaHidden = "false"; + }, + hide() { + el.ariaHidden = "true"; + } + }; +} +__name(Actor, "Actor"); +const PURPLE = "rgba(88, 74, 192, 1)"; +const DEFAULT_LIGHT = { + foreground: "#2b2233", + background: "#ffffff", + accentForeground: "white", + accentBackground: PURPLE, + successColor: "#268d75", + errorColor: "#df3338", + border: "1.5px solid rgba(41, 35, 47, 0.13)", + boxShadow: "0px 4px 24px 0px rgba(43, 34, 51, 0.12)", + outline: "1px auto var(--accent-background)", + interactiveFilter: "brightness(95%)" +}; +const DEFAULT_DARK = { + foreground: "#ebe6ef", + background: "#29232f", + accentForeground: "white", + accentBackground: PURPLE, + successColor: "#2da98c", + errorColor: "#f55459", + border: "1.5px solid rgba(235, 230, 239, 0.15)", + boxShadow: "0px 4px 24px 0px rgba(43, 34, 51, 0.12)", + outline: "1px auto var(--accent-background)", + interactiveFilter: "brightness(150%)" +}; +function getThemedCssVariables(theme43) { + return ` + --foreground: ${theme43.foreground}; + --background: ${theme43.background}; + --accent-foreground: ${theme43.accentForeground}; + --accent-background: ${theme43.accentBackground}; + --success-color: ${theme43.successColor}; + --error-color: ${theme43.errorColor}; + --border: ${theme43.border}; + --box-shadow: ${theme43.boxShadow}; + --outline: ${theme43.outline}; + --interactive-filter: ${theme43.interactiveFilter}; + `; +} +__name(getThemedCssVariables, "getThemedCssVariables"); +function createMainStyles({ + colorScheme, + themeDark, + themeLight, + styleNonce +}) { + const style2 = DOCUMENT.createElement("style"); + style2.textContent = ` +:host { + --font-family: system-ui, 'Helvetica Neue', Arial, sans-serif; + --font-size: 14px; + --z-index: 100000; + + --page-margin: 16px; + --inset: auto 0 0 auto; + --actor-inset: var(--inset); + + font-family: var(--font-family); + font-size: var(--font-size); + + ${colorScheme !== "system" ? "color-scheme: only light;" : ""} + + ${getThemedCssVariables( + colorScheme === "dark" ? { ...DEFAULT_DARK, ...themeDark } : { ...DEFAULT_LIGHT, ...themeLight } + )} +} + +${colorScheme === "system" ? ` +@media (prefers-color-scheme: dark) { + :host { + ${getThemedCssVariables({ ...DEFAULT_DARK, ...themeDark })} + } +}` : ""} +} +`; + if (styleNonce) { + style2.setAttribute("nonce", styleNonce); + } + return style2; +} +__name(createMainStyles, "createMainStyles"); +const buildFeedbackIntegration = /* @__PURE__ */ __name(({ + lazyLoadIntegration: lazyLoadIntegration2, + getModalIntegration, + getScreenshotIntegration +}) => { + const feedbackIntegration = /* @__PURE__ */ __name(({ + // FeedbackGeneralConfiguration + id: id3 = "sentry-feedback", + autoInject = true, + showBranding = true, + isEmailRequired = false, + isNameRequired = false, + showEmail = true, + showName = true, + enableScreenshot = true, + useSentryUser = { + email: "email", + name: "username" + }, + tags, + styleNonce, + scriptNonce, + // FeedbackThemeConfiguration + colorScheme = "system", + themeLight = {}, + themeDark = {}, + // FeedbackTextConfiguration + addScreenshotButtonLabel = ADD_SCREENSHOT_LABEL, + cancelButtonLabel = CANCEL_BUTTON_LABEL, + confirmButtonLabel = CONFIRM_BUTTON_LABEL, + emailLabel = EMAIL_LABEL, + emailPlaceholder = EMAIL_PLACEHOLDER, + formTitle = FORM_TITLE, + isRequiredLabel = IS_REQUIRED_LABEL, + messageLabel = MESSAGE_LABEL, + messagePlaceholder = MESSAGE_PLACEHOLDER, + nameLabel = NAME_LABEL, + namePlaceholder = NAME_PLACEHOLDER, + removeScreenshotButtonLabel = REMOVE_SCREENSHOT_LABEL, + submitButtonLabel = SUBMIT_BUTTON_LABEL, + successMessageText = SUCCESS_MESSAGE_TEXT, + triggerLabel = TRIGGER_LABEL, + triggerAriaLabel = "", + // FeedbackCallbacks + onFormOpen, + onFormClose, + onSubmitSuccess, + onSubmitError, + onFormSubmitted + } = {}) => { + const _options = { + id: id3, + autoInject, + showBranding, + isEmailRequired, + isNameRequired, + showEmail, + showName, + enableScreenshot, + useSentryUser, + tags, + styleNonce, + scriptNonce, + colorScheme, + themeDark, + themeLight, + triggerLabel, + triggerAriaLabel, + cancelButtonLabel, + submitButtonLabel, + confirmButtonLabel, + formTitle, + emailLabel, + emailPlaceholder, + messageLabel, + messagePlaceholder, + nameLabel, + namePlaceholder, + successMessageText, + isRequiredLabel, + addScreenshotButtonLabel, + removeScreenshotButtonLabel, + onFormClose, + onFormOpen, + onSubmitError, + onSubmitSuccess, + onFormSubmitted + }; + let _shadow = null; + let _subscriptions = []; + const _createShadow = /* @__PURE__ */ __name((options4) => { + if (!_shadow) { + const host = DOCUMENT.createElement("div"); + host.id = String(options4.id); + DOCUMENT.body.appendChild(host); + _shadow = host.attachShadow({ mode: "open" }); + _shadow.appendChild(createMainStyles(options4)); + } + return _shadow; + }, "_createShadow"); + const _loadAndRenderDialog = /* @__PURE__ */ __name(async (options4) => { + const screenshotRequired = options4.enableScreenshot && isScreenshotSupported(); + let modalIntegration; + let screenshotIntegration; + try { + const modalIntegrationFn = getModalIntegration ? getModalIntegration() : await lazyLoadIntegration2("feedbackModalIntegration", scriptNonce); + modalIntegration = modalIntegrationFn(); + addIntegration(modalIntegration); + } catch (e2) { + DEBUG_BUILD$1 && logger$2.error( + "[Feedback] Error when trying to load feedback integrations. Try using `feedbackSyncIntegration` in your `Sentry.init`." + ); + throw new Error("[Feedback] Missing feedback modal integration!"); + } + try { + const screenshotIntegrationFn = screenshotRequired ? getScreenshotIntegration ? getScreenshotIntegration() : await lazyLoadIntegration2("feedbackScreenshotIntegration", scriptNonce) : void 0; + if (screenshotIntegrationFn) { + screenshotIntegration = screenshotIntegrationFn(); + addIntegration(screenshotIntegration); + } + } catch (e2) { + DEBUG_BUILD$1 && logger$2.error("[Feedback] Missing feedback screenshot integration. Proceeding without screenshots."); + } + const dialog = modalIntegration.createDialog({ + options: { + ...options4, + onFormClose: /* @__PURE__ */ __name(() => { + dialog && dialog.close(); + options4.onFormClose && options4.onFormClose(); + }, "onFormClose"), + onFormSubmitted: /* @__PURE__ */ __name(() => { + dialog && dialog.close(); + options4.onFormSubmitted && options4.onFormSubmitted(); + }, "onFormSubmitted") + }, + screenshotIntegration, + sendFeedback, + shadow: _createShadow(options4) + }); + return dialog; + }, "_loadAndRenderDialog"); + const _attachTo = /* @__PURE__ */ __name((el, optionOverrides = {}) => { + const mergedOptions = mergeOptions$2(_options, optionOverrides); + const targetEl = typeof el === "string" ? DOCUMENT.querySelector(el) : typeof el.addEventListener === "function" ? el : null; + if (!targetEl) { + DEBUG_BUILD$1 && logger$2.error("[Feedback] Unable to attach to target element"); + throw new Error("Unable to attach to target element"); + } + let dialog = null; + const handleClick2 = /* @__PURE__ */ __name(async () => { + if (!dialog) { + dialog = await _loadAndRenderDialog({ + ...mergedOptions, + onFormSubmitted: /* @__PURE__ */ __name(() => { + dialog && dialog.removeFromDom(); + mergedOptions.onFormSubmitted && mergedOptions.onFormSubmitted(); + }, "onFormSubmitted") + }); + } + dialog.appendToDom(); + dialog.open(); + }, "handleClick"); + targetEl.addEventListener("click", handleClick2); + const unsubscribe = /* @__PURE__ */ __name(() => { + _subscriptions = _subscriptions.filter((sub) => sub !== unsubscribe); + dialog && dialog.removeFromDom(); + dialog = null; + targetEl.removeEventListener("click", handleClick2); + }, "unsubscribe"); + _subscriptions.push(unsubscribe); + return unsubscribe; + }, "_attachTo"); + const _createActor = /* @__PURE__ */ __name((optionOverrides = {}) => { + const mergedOptions = mergeOptions$2(_options, optionOverrides); + const shadow = _createShadow(mergedOptions); + const actor = Actor({ + triggerLabel: mergedOptions.triggerLabel, + triggerAriaLabel: mergedOptions.triggerAriaLabel, + shadow, + styleNonce + }); + _attachTo(actor.el, { + ...mergedOptions, + onFormOpen() { + actor.hide(); + }, + onFormClose() { + actor.show(); + }, + onFormSubmitted() { + actor.show(); + } + }); + return actor; + }, "_createActor"); + return { + name: "Feedback", + setupOnce() { + if (!isBrowser$1() || !_options.autoInject) { + return; + } + if (DOCUMENT.readyState === "loading") { + DOCUMENT.addEventListener("DOMContentLoaded", () => _createActor().appendToDom()); + } else { + _createActor().appendToDom(); + } + }, + /** + * Adds click listener to the element to open a feedback dialog + * + * The returned function can be used to remove the click listener + */ + attachTo: _attachTo, + /** + * Creates a new widget which is composed of a Button which triggers a Dialog. + * Accepts partial options to override any options passed to constructor. + */ + createWidget(optionOverrides = {}) { + const actor = _createActor(mergeOptions$2(_options, optionOverrides)); + actor.appendToDom(); + return actor; + }, + /** + * Creates a new Form which you can + * Accepts partial options to override any options passed to constructor. + */ + async createForm(optionOverrides = {}) { + return _loadAndRenderDialog(mergeOptions$2(_options, optionOverrides)); + }, + /** + * Removes the Feedback integration (including host, shadow DOM, and all widgets) + */ + remove() { + if (_shadow) { + _shadow.parentElement && _shadow.parentElement.remove(); + _shadow = null; + } + _subscriptions.forEach((sub) => sub()); + _subscriptions = []; + } + }; + }, "feedbackIntegration"); + return feedbackIntegration; +}, "buildFeedbackIntegration"); +function getFeedback() { + const client = getClient(); + return client && client.getIntegrationByName("Feedback"); +} +__name(getFeedback, "getFeedback"); +var n, l$1, u$1, i$1, o$1, r$1, f$1, c$1 = {}, s$1 = [], a$1 = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i, h$1 = Array.isArray; +function v$1(n2, l2) { + for (var u2 in l2) n2[u2] = l2[u2]; + return n2; +} +__name(v$1, "v$1"); +function p$1(n2) { + var l2 = n2.parentNode; + l2 && l2.removeChild(n2); +} +__name(p$1, "p$1"); +function y$1(l2, u2, t2) { + var i2, o2, r2, f2 = {}; + for (r2 in u2) "key" == r2 ? i2 = u2[r2] : "ref" == r2 ? o2 = u2[r2] : f2[r2] = u2[r2]; + if (arguments.length > 2 && (f2.children = arguments.length > 3 ? n.call(arguments, 2) : t2), "function" == typeof l2 && null != l2.defaultProps) for (r2 in l2.defaultProps) void 0 === f2[r2] && (f2[r2] = l2.defaultProps[r2]); + return d$1(l2, f2, i2, o2, null); +} +__name(y$1, "y$1"); +function d$1(n2, t2, i2, o2, r2) { + var f2 = { type: n2, props: t2, key: i2, ref: o2, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, constructor: void 0, __v: null == r2 ? ++u$1 : r2, __i: -1, __u: 0 }; + return null == r2 && null != l$1.vnode && l$1.vnode(f2), f2; +} +__name(d$1, "d$1"); +function g$1$1(n2) { + return n2.children; +} +__name(g$1$1, "g$1$1"); +function b$1(n2, l2) { + this.props = n2, this.context = l2; +} +__name(b$1, "b$1"); +function m$1(n2, l2) { + if (null == l2) return n2.__ ? m$1(n2.__, n2.__i + 1) : null; + for (var u2; l2 < n2.__k.length; l2++) if (null != (u2 = n2.__k[l2]) && null != u2.__e) return u2.__e; + return "function" == typeof n2.type ? m$1(n2) : null; +} +__name(m$1, "m$1"); +function w$1(n2, u2, t2) { + var i2, o2 = n2.__v, r2 = o2.__e, f2 = n2.__P; + if (f2) return (i2 = v$1({}, o2)).__v = o2.__v + 1, l$1.vnode && l$1.vnode(i2), M(f2, i2, o2, n2.__n, void 0 !== f2.ownerSVGElement, 32 & o2.__u ? [r2] : null, u2, null == r2 ? m$1(o2) : r2, !!(32 & o2.__u), t2), i2.__.__k[i2.__i] = i2, i2.__d = void 0, i2.__e != r2 && k$1(i2), i2; +} +__name(w$1, "w$1"); +function k$1(n2) { + var l2, u2; + if (null != (n2 = n2.__) && null != n2.__c) { + for (n2.__e = n2.__c.base = null, l2 = 0; l2 < n2.__k.length; l2++) if (null != (u2 = n2.__k[l2]) && null != u2.__e) { + n2.__e = n2.__c.base = u2.__e; + break; + } + return k$1(n2); + } +} +__name(k$1, "k$1"); +function x$1(n2) { + (!n2.__d && (n2.__d = true) && i$1.push(n2) && !C$1.__r++ || o$1 !== l$1.debounceRendering) && ((o$1 = l$1.debounceRendering) || r$1)(C$1); +} +__name(x$1, "x$1"); +function C$1() { + var n2, u2, t2, o2 = [], r2 = []; + for (i$1.sort(f$1); n2 = i$1.shift(); ) n2.__d && (t2 = i$1.length, u2 = w$1(n2, o2, r2) || u2, 0 === t2 || i$1.length > t2 ? (j$1(o2, u2, r2), r2.length = o2.length = 0, u2 = void 0, i$1.sort(f$1)) : u2 && l$1.__c && l$1.__c(u2, s$1)); + u2 && j$1(o2, u2, r2), C$1.__r = 0; +} +__name(C$1, "C$1"); +function P$1(n2, l2, u2, t2, i2, o2, r2, f2, e2, a2, h2) { + var v2, p2, y2, d2, _2, g2 = t2 && t2.__k || s$1, b2 = l2.length; + for (u2.__d = e2, S(u2, l2, g2), e2 = u2.__d, v2 = 0; v2 < b2; v2++) null != (y2 = u2.__k[v2]) && "boolean" != typeof y2 && "function" != typeof y2 && (p2 = -1 === y2.__i ? c$1 : g2[y2.__i] || c$1, y2.__i = v2, M(n2, y2, p2, i2, o2, r2, f2, e2, a2, h2), d2 = y2.__e, y2.ref && p2.ref != y2.ref && (p2.ref && N(p2.ref, null, y2), h2.push(y2.ref, y2.__c || d2, y2)), null == _2 && null != d2 && (_2 = d2), 65536 & y2.__u || p2.__k === y2.__k ? e2 = $(y2, e2, n2) : "function" == typeof y2.type && void 0 !== y2.__d ? e2 = y2.__d : d2 && (e2 = d2.nextSibling), y2.__d = void 0, y2.__u &= -196609); + u2.__d = e2, u2.__e = _2; +} +__name(P$1, "P$1"); +function S(n2, l2, u2) { + var t2, i2, o2, r2, f2, e2 = l2.length, c2 = u2.length, s2 = c2, a2 = 0; + for (n2.__k = [], t2 = 0; t2 < e2; t2++) null != (i2 = n2.__k[t2] = null == (i2 = l2[t2]) || "boolean" == typeof i2 || "function" == typeof i2 ? null : "string" == typeof i2 || "number" == typeof i2 || "bigint" == typeof i2 || i2.constructor == String ? d$1(null, i2, null, null, i2) : h$1(i2) ? d$1(g$1$1, { children: i2 }, null, null, null) : void 0 === i2.constructor && i2.__b > 0 ? d$1(i2.type, i2.props, i2.key, i2.ref ? i2.ref : null, i2.__v) : i2) ? (i2.__ = n2, i2.__b = n2.__b + 1, f2 = I(i2, u2, r2 = t2 + a2, s2), i2.__i = f2, o2 = null, -1 !== f2 && (s2--, (o2 = u2[f2]) && (o2.__u |= 131072)), null == o2 || null === o2.__v ? (-1 == f2 && a2--, "function" != typeof i2.type && (i2.__u |= 65536)) : f2 !== r2 && (f2 === r2 + 1 ? a2++ : f2 > r2 ? s2 > e2 - r2 ? a2 += f2 - r2 : a2-- : a2 = f2 < r2 && f2 == r2 - 1 ? f2 - r2 : 0, f2 !== t2 + a2 && (i2.__u |= 65536))) : (o2 = u2[t2]) && null == o2.key && o2.__e && (o2.__e == n2.__d && (n2.__d = m$1(o2)), O(o2, o2, false), u2[t2] = null, s2--); + if (s2) for (t2 = 0; t2 < c2; t2++) null != (o2 = u2[t2]) && 0 == (131072 & o2.__u) && (o2.__e == n2.__d && (n2.__d = m$1(o2)), O(o2, o2)); +} +__name(S, "S"); +function $(n2, l2, u2) { + var t2, i2; + if ("function" == typeof n2.type) { + for (t2 = n2.__k, i2 = 0; t2 && i2 < t2.length; i2++) t2[i2] && (t2[i2].__ = n2, l2 = $(t2[i2], l2, u2)); + return l2; + } + n2.__e != l2 && (u2.insertBefore(n2.__e, l2 || null), l2 = n2.__e); + do { + l2 = l2 && l2.nextSibling; + } while (null != l2 && 8 === l2.nodeType); + return l2; +} +__name($, "$"); +function I(n2, l2, u2, t2) { + var i2 = n2.key, o2 = n2.type, r2 = u2 - 1, f2 = u2 + 1, e2 = l2[u2]; + if (null === e2 || e2 && i2 == e2.key && o2 === e2.type) return u2; + if (t2 > (null != e2 && 0 == (131072 & e2.__u) ? 1 : 0)) for (; r2 >= 0 || f2 < l2.length; ) { + if (r2 >= 0) { + if ((e2 = l2[r2]) && 0 == (131072 & e2.__u) && i2 == e2.key && o2 === e2.type) return r2; + r2--; + } + if (f2 < l2.length) { + if ((e2 = l2[f2]) && 0 == (131072 & e2.__u) && i2 == e2.key && o2 === e2.type) return f2; + f2++; + } + } + return -1; +} +__name(I, "I"); +function T$1(n2, l2, u2) { + "-" === l2[0] ? n2.setProperty(l2, null == u2 ? "" : u2) : n2[l2] = null == u2 ? "" : "number" != typeof u2 || a$1.test(l2) ? u2 : u2 + "px"; +} +__name(T$1, "T$1"); +function A$1(n2, l2, u2, t2, i2) { + var o2; + n: if ("style" === l2) if ("string" == typeof u2) n2.style.cssText = u2; + else { + if ("string" == typeof t2 && (n2.style.cssText = t2 = ""), t2) for (l2 in t2) u2 && l2 in u2 || T$1(n2.style, l2, ""); + if (u2) for (l2 in u2) t2 && u2[l2] === t2[l2] || T$1(n2.style, l2, u2[l2]); + } + else if ("o" === l2[0] && "n" === l2[1]) o2 = l2 !== (l2 = l2.replace(/(PointerCapture)$|Capture$/i, "$1")), l2 = l2.toLowerCase() in n2 ? l2.toLowerCase().slice(2) : l2.slice(2), n2.l || (n2.l = {}), n2.l[l2 + o2] = u2, u2 ? t2 ? u2.u = t2.u : (u2.u = Date.now(), n2.addEventListener(l2, o2 ? L : D$1, o2)) : n2.removeEventListener(l2, o2 ? L : D$1, o2); + else { + if (i2) l2 = l2.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s"); + else if ("width" !== l2 && "height" !== l2 && "href" !== l2 && "list" !== l2 && "form" !== l2 && "tabIndex" !== l2 && "download" !== l2 && "rowSpan" !== l2 && "colSpan" !== l2 && "role" !== l2 && l2 in n2) try { + n2[l2] = null == u2 ? "" : u2; + break n; + } catch (n3) { + } + "function" == typeof u2 || (null == u2 || false === u2 && "-" !== l2[4] ? n2.removeAttribute(l2) : n2.setAttribute(l2, u2)); + } +} +__name(A$1, "A$1"); +function D$1(n2) { + if (this.l) { + var u2 = this.l[n2.type + false]; + if (n2.t) { + if (n2.t <= u2.u) return; + } else n2.t = Date.now(); + return u2(l$1.event ? l$1.event(n2) : n2); + } +} +__name(D$1, "D$1"); +function L(n2) { + if (this.l) return this.l[n2.type + true](l$1.event ? l$1.event(n2) : n2); +} +__name(L, "L"); +function M(n2, u2, t2, i2, o2, r2, f2, e2, c2, s2) { + var a2, p2, y2, d2, _2, m2, w2, k2, x2, C2, S2, $2, H, I2, T2, A2 = u2.type; + if (void 0 !== u2.constructor) return null; + 128 & t2.__u && (c2 = !!(32 & t2.__u), r2 = [e2 = u2.__e = t2.__e]), (a2 = l$1.__b) && a2(u2); + n: if ("function" == typeof A2) try { + if (k2 = u2.props, x2 = (a2 = A2.contextType) && i2[a2.__c], C2 = a2 ? x2 ? x2.props.value : a2.__ : i2, t2.__c ? w2 = (p2 = u2.__c = t2.__c).__ = p2.__E : ("prototype" in A2 && A2.prototype.render ? u2.__c = p2 = new A2(k2, C2) : (u2.__c = p2 = new b$1(k2, C2), p2.constructor = A2, p2.render = q$1), x2 && x2.sub(p2), p2.props = k2, p2.state || (p2.state = {}), p2.context = C2, p2.__n = i2, y2 = p2.__d = true, p2.__h = [], p2._sb = []), null == p2.__s && (p2.__s = p2.state), null != A2.getDerivedStateFromProps && (p2.__s == p2.state && (p2.__s = v$1({}, p2.__s)), v$1(p2.__s, A2.getDerivedStateFromProps(k2, p2.__s))), d2 = p2.props, _2 = p2.state, p2.__v = u2, y2) null == A2.getDerivedStateFromProps && null != p2.componentWillMount && p2.componentWillMount(), null != p2.componentDidMount && p2.__h.push(p2.componentDidMount); + else { + if (null == A2.getDerivedStateFromProps && k2 !== d2 && null != p2.componentWillReceiveProps && p2.componentWillReceiveProps(k2, C2), !p2.__e && (null != p2.shouldComponentUpdate && false === p2.shouldComponentUpdate(k2, p2.__s, C2) || u2.__v === t2.__v)) { + for (u2.__v !== t2.__v && (p2.props = k2, p2.state = p2.__s, p2.__d = false), u2.__e = t2.__e, u2.__k = t2.__k, u2.__k.forEach(function(n3) { + n3 && (n3.__ = u2); + }), S2 = 0; S2 < p2._sb.length; S2++) p2.__h.push(p2._sb[S2]); + p2._sb = [], p2.__h.length && f2.push(p2); + break n; + } + null != p2.componentWillUpdate && p2.componentWillUpdate(k2, p2.__s, C2), null != p2.componentDidUpdate && p2.__h.push(function() { + p2.componentDidUpdate(d2, _2, m2); + }); + } + if (p2.context = C2, p2.props = k2, p2.__P = n2, p2.__e = false, $2 = l$1.__r, H = 0, "prototype" in A2 && A2.prototype.render) { + for (p2.state = p2.__s, p2.__d = false, $2 && $2(u2), a2 = p2.render(p2.props, p2.state, p2.context), I2 = 0; I2 < p2._sb.length; I2++) p2.__h.push(p2._sb[I2]); + p2._sb = []; + } else do { + p2.__d = false, $2 && $2(u2), a2 = p2.render(p2.props, p2.state, p2.context), p2.state = p2.__s; + } while (p2.__d && ++H < 25); + p2.state = p2.__s, null != p2.getChildContext && (i2 = v$1(v$1({}, i2), p2.getChildContext())), y2 || null == p2.getSnapshotBeforeUpdate || (m2 = p2.getSnapshotBeforeUpdate(d2, _2)), P$1(n2, h$1(T2 = null != a2 && a2.type === g$1$1 && null == a2.key ? a2.props.children : a2) ? T2 : [T2], u2, t2, i2, o2, r2, f2, e2, c2, s2), p2.base = u2.__e, u2.__u &= -161, p2.__h.length && f2.push(p2), w2 && (p2.__E = p2.__ = null); + } catch (n3) { + u2.__v = null, c2 || null != r2 ? (u2.__e = e2, u2.__u |= c2 ? 160 : 32, r2[r2.indexOf(e2)] = null) : (u2.__e = t2.__e, u2.__k = t2.__k), l$1.__e(n3, u2, t2); + } + else null == r2 && u2.__v === t2.__v ? (u2.__k = t2.__k, u2.__e = t2.__e) : u2.__e = z$1(t2.__e, u2, t2, i2, o2, r2, f2, c2, s2); + (a2 = l$1.diffed) && a2(u2); +} +__name(M, "M"); +function j$1(n2, u2, t2) { + for (var i2 = 0; i2 < t2.length; i2++) N(t2[i2], t2[++i2], t2[++i2]); + l$1.__c && l$1.__c(u2, n2), n2.some(function(u3) { + try { + n2 = u3.__h, u3.__h = [], n2.some(function(n3) { + n3.call(u3); + }); + } catch (n3) { + l$1.__e(n3, u3.__v); + } + }); +} +__name(j$1, "j$1"); +function z$1(l2, u2, t2, i2, o2, r2, f2, e2, s2) { + var a2, v2, y2, d2, _2, g2, b2, w2 = t2.props, k2 = u2.props, x2 = u2.type; + if ("svg" === x2 && (o2 = true), null != r2) { + for (a2 = 0; a2 < r2.length; a2++) if ((_2 = r2[a2]) && "setAttribute" in _2 == !!x2 && (x2 ? _2.localName === x2 : 3 === _2.nodeType)) { + l2 = _2, r2[a2] = null; + break; + } + } + if (null == l2) { + if (null === x2) return document.createTextNode(k2); + l2 = o2 ? document.createElementNS("http://www.w3.org/2000/svg", x2) : document.createElement(x2, k2.is && k2), r2 = null, e2 = false; + } + if (null === x2) w2 === k2 || e2 && l2.data === k2 || (l2.data = k2); + else { + if (r2 = r2 && n.call(l2.childNodes), w2 = t2.props || c$1, !e2 && null != r2) for (w2 = {}, a2 = 0; a2 < l2.attributes.length; a2++) w2[(_2 = l2.attributes[a2]).name] = _2.value; + for (a2 in w2) _2 = w2[a2], "children" == a2 || ("dangerouslySetInnerHTML" == a2 ? y2 = _2 : "key" === a2 || a2 in k2 || A$1(l2, a2, null, _2, o2)); + for (a2 in k2) _2 = k2[a2], "children" == a2 ? d2 = _2 : "dangerouslySetInnerHTML" == a2 ? v2 = _2 : "value" == a2 ? g2 = _2 : "checked" == a2 ? b2 = _2 : "key" === a2 || e2 && "function" != typeof _2 || w2[a2] === _2 || A$1(l2, a2, _2, w2[a2], o2); + if (v2) e2 || y2 && (v2.__html === y2.__html || v2.__html === l2.innerHTML) || (l2.innerHTML = v2.__html), u2.__k = []; + else if (y2 && (l2.innerHTML = ""), P$1(l2, h$1(d2) ? d2 : [d2], u2, t2, i2, o2 && "foreignObject" !== x2, r2, f2, r2 ? r2[0] : t2.__k && m$1(t2, 0), e2, s2), null != r2) for (a2 = r2.length; a2--; ) null != r2[a2] && p$1(r2[a2]); + e2 || (a2 = "value", void 0 !== g2 && (g2 !== l2[a2] || "progress" === x2 && !g2 || "option" === x2 && g2 !== w2[a2]) && A$1(l2, a2, g2, w2[a2], false), a2 = "checked", void 0 !== b2 && b2 !== l2[a2] && A$1(l2, a2, b2, w2[a2], false)); + } + return l2; +} +__name(z$1, "z$1"); +function N(n2, u2, t2) { + try { + "function" == typeof n2 ? n2(u2) : n2.current = u2; + } catch (n3) { + l$1.__e(n3, t2); + } +} +__name(N, "N"); +function O(n2, u2, t2) { + var i2, o2; + if (l$1.unmount && l$1.unmount(n2), (i2 = n2.ref) && (i2.current && i2.current !== n2.__e || N(i2, null, u2)), null != (i2 = n2.__c)) { + if (i2.componentWillUnmount) try { + i2.componentWillUnmount(); + } catch (n3) { + l$1.__e(n3, u2); + } + i2.base = i2.__P = null, n2.__c = void 0; + } + if (i2 = n2.__k) for (o2 = 0; o2 < i2.length; o2++) i2[o2] && O(i2[o2], u2, t2 || "function" != typeof n2.type); + t2 || null == n2.__e || p$1(n2.__e), n2.__ = n2.__e = n2.__d = void 0; +} +__name(O, "O"); +function q$1(n2, l2, u2) { + return this.constructor(n2, u2); +} +__name(q$1, "q$1"); +function B$1(u2, t2, i2) { + var o2, r2, f2, e2; + l$1.__ && l$1.__(u2, t2), r2 = (o2 = "function" == typeof i2) ? null : t2.__k, f2 = [], e2 = [], M(t2, u2 = (!o2 && i2 || t2).__k = y$1(g$1$1, null, [u2]), r2 || c$1, c$1, void 0 !== t2.ownerSVGElement, !o2 && i2 ? [i2] : r2 ? null : t2.firstChild ? n.call(t2.childNodes) : null, f2, !o2 && i2 ? i2 : r2 ? r2.__e : t2.firstChild, o2, e2), u2.__d = void 0, j$1(f2, u2, e2); +} +__name(B$1, "B$1"); +n = s$1.slice, l$1 = { __e: /* @__PURE__ */ __name(function(n2, l2, u2, t2) { + for (var i2, o2, r2; l2 = l2.__; ) if ((i2 = l2.__c) && !i2.__) try { + if ((o2 = i2.constructor) && null != o2.getDerivedStateFromError && (i2.setState(o2.getDerivedStateFromError(n2)), r2 = i2.__d), null != i2.componentDidCatch && (i2.componentDidCatch(n2, t2 || {}), r2 = i2.__d), r2) return i2.__E = i2; + } catch (l3) { + n2 = l3; + } + throw n2; +}, "__e") }, u$1 = 0, b$1.prototype.setState = function(n2, l2) { + var u2; + u2 = null != this.__s && this.__s !== this.state ? this.__s : this.__s = v$1({}, this.state), "function" == typeof n2 && (n2 = n2(v$1({}, u2), this.props)), n2 && v$1(u2, n2), null != n2 && this.__v && (l2 && this._sb.push(l2), x$1(this)); +}, b$1.prototype.forceUpdate = function(n2) { + this.__v && (this.__e = true, n2 && this.__h.push(n2), x$1(this)); +}, b$1.prototype.render = g$1$1, i$1 = [], r$1 = "function" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, f$1 = /* @__PURE__ */ __name(function(n2, l2) { + return n2.__v.__b - l2.__v.__b; +}, "f$1"), C$1.__r = 0; +var t$1, r, u, i$2, o = 0, f = [], c = [], e = l$1, a = e.__b, v = e.__r, l = e.diffed, m = e.__c, s = e.unmount, d = e.__; +function h$2(n2, t2) { + e.__h && e.__h(r, n2, o || t2), o = 0; + var u2 = r.__H || (r.__H = { __: [], __h: [] }); + return n2 >= u2.__.length && u2.__.push({ __V: c }), u2.__[n2]; +} +__name(h$2, "h$2"); +function p$2(n2) { + return o = 1, y(D, n2); +} +__name(p$2, "p$2"); +function y(n2, u2, i2) { + var o2 = h$2(t$1++, 2); + if (o2.t = n2, !o2.__c && (o2.__ = [i2 ? i2(u2) : D(void 0, u2), function(n3) { + var t2 = o2.__N ? o2.__N[0] : o2.__[0], r2 = o2.t(t2, n3); + t2 !== r2 && (o2.__N = [r2, o2.__[1]], o2.__c.setState({})); + }], o2.__c = r, !r.u)) { + var f2 = /* @__PURE__ */ __name(function(n3, t2, r2) { + if (!o2.__c.__H) return true; + var u3 = o2.__c.__H.__.filter(function(n4) { + return !!n4.__c; + }); + if (u3.every(function(n4) { + return !n4.__N; + })) return !c2 || c2.call(this, n3, t2, r2); + var i3 = false; + return u3.forEach(function(n4) { + if (n4.__N) { + var t3 = n4.__[0]; + n4.__ = n4.__N, n4.__N = void 0, t3 !== n4.__[0] && (i3 = true); + } + }), !(!i3 && o2.__c.props === n3) && (!c2 || c2.call(this, n3, t2, r2)); + }, "f"); + r.u = true; + var c2 = r.shouldComponentUpdate, e2 = r.componentWillUpdate; + r.componentWillUpdate = function(n3, t2, r2) { + if (this.__e) { + var u3 = c2; + c2 = void 0, f2(n3, t2, r2), c2 = u3; + } + e2 && e2.call(this, n3, t2, r2); + }, r.shouldComponentUpdate = f2; + } + return o2.__N || o2.__; +} +__name(y, "y"); +function _$1(n2, u2) { + var i2 = h$2(t$1++, 3); + !e.__s && C(i2.__H, u2) && (i2.__ = n2, i2.i = u2, r.__H.__h.push(i2)); +} +__name(_$1, "_$1"); +function A(n2, u2) { + var i2 = h$2(t$1++, 4); + !e.__s && C(i2.__H, u2) && (i2.__ = n2, i2.i = u2, r.__h.push(i2)); +} +__name(A, "A"); +function F(n2) { + return o = 5, q(function() { + return { current: n2 }; + }, []); +} +__name(F, "F"); +function T(n2, t2, r2) { + o = 6, A(function() { + return "function" == typeof n2 ? (n2(t2()), function() { + return n2(null); + }) : n2 ? (n2.current = t2(), function() { + return n2.current = null; + }) : void 0; + }, null == r2 ? r2 : r2.concat(n2)); +} +__name(T, "T"); +function q(n2, r2) { + var u2 = h$2(t$1++, 7); + return C(u2.__H, r2) ? (u2.__V = n2(), u2.i = r2, u2.__h = n2, u2.__V) : u2.__; +} +__name(q, "q"); +function x(n2, t2) { + return o = 8, q(function() { + return n2; + }, t2); +} +__name(x, "x"); +function P$2(n2) { + var u2 = r.context[n2.__c], i2 = h$2(t$1++, 9); + return i2.c = n2, u2 ? (null == i2.__ && (i2.__ = true, u2.sub(r)), u2.props.value) : n2.__; +} +__name(P$2, "P$2"); +function V(n2, t2) { + e.useDebugValue && e.useDebugValue(t2 ? t2(n2) : n2); +} +__name(V, "V"); +function b(n2) { + var u2 = h$2(t$1++, 10), i2 = p$2(); + return u2.__ = n2, r.componentDidCatch || (r.componentDidCatch = function(n3, t2) { + u2.__ && u2.__(n3, t2), i2[1](n3); + }), [i2[0], function() { + i2[1](void 0); + }]; +} +__name(b, "b"); +function g$6() { + var n2 = h$2(t$1++, 11); + if (!n2.__) { + for (var u2 = r.__v; null !== u2 && !u2.__m && null !== u2.__; ) u2 = u2.__; + var i2 = u2.__m || (u2.__m = [0, 0]); + n2.__ = "P" + i2[0] + "-" + i2[1]++; + } + return n2.__; +} +__name(g$6, "g$6"); +function j() { + for (var n2; n2 = f.shift(); ) if (n2.__P && n2.__H) try { + n2.__H.__h.forEach(z$2), n2.__H.__h.forEach(B), n2.__H.__h = []; + } catch (t2) { + n2.__H.__h = [], e.__e(t2, n2.__v); + } +} +__name(j, "j"); +e.__b = function(n2) { + r = null, a && a(n2); +}, e.__ = function(n2, t2) { + t2.__k && t2.__k.__m && (n2.__m = t2.__k.__m), d && d(n2, t2); +}, e.__r = function(n2) { + v && v(n2), t$1 = 0; + var i2 = (r = n2.__c).__H; + i2 && (u === r ? (i2.__h = [], r.__h = [], i2.__.forEach(function(n3) { + n3.__N && (n3.__ = n3.__N), n3.__V = c, n3.__N = n3.i = void 0; + })) : (i2.__h.forEach(z$2), i2.__h.forEach(B), i2.__h = [], t$1 = 0)), u = r; +}, e.diffed = function(n2) { + l && l(n2); + var t2 = n2.__c; + t2 && t2.__H && (t2.__H.__h.length && (1 !== f.push(t2) && i$2 === e.requestAnimationFrame || ((i$2 = e.requestAnimationFrame) || w)(j)), t2.__H.__.forEach(function(n3) { + n3.i && (n3.__H = n3.i), n3.__V !== c && (n3.__ = n3.__V), n3.i = void 0, n3.__V = c; + })), u = r = null; +}, e.__c = function(n2, t2) { + t2.some(function(n3) { + try { + n3.__h.forEach(z$2), n3.__h = n3.__h.filter(function(n4) { + return !n4.__ || B(n4); + }); + } catch (r2) { + t2.some(function(n4) { + n4.__h && (n4.__h = []); + }), t2 = [], e.__e(r2, n3.__v); + } + }), m && m(n2, t2); +}, e.unmount = function(n2) { + s && s(n2); + var t2, r2 = n2.__c; + r2 && r2.__H && (r2.__H.__.forEach(function(n3) { + try { + z$2(n3); + } catch (n4) { + t2 = n4; + } + }), r2.__H = void 0, t2 && e.__e(t2, r2.__v)); +}; +var k = "function" == typeof requestAnimationFrame; +function w(n2) { + var t2, r2 = /* @__PURE__ */ __name(function() { + clearTimeout(u2), k && cancelAnimationFrame(t2), setTimeout(n2); + }, "r"), u2 = setTimeout(r2, 100); + k && (t2 = requestAnimationFrame(r2)); +} +__name(w, "w"); +function z$2(n2) { + var t2 = r, u2 = n2.__c; + "function" == typeof u2 && (n2.__c = void 0, u2()), r = t2; +} +__name(z$2, "z$2"); +function B(n2) { + var t2 = r; + n2.__c = n2.__(), r = t2; +} +__name(B, "B"); +function C(n2, t2) { + return !n2 || n2.length !== t2.length || t2.some(function(t3, r2) { + return t3 !== n2[r2]; + }); +} +__name(C, "C"); +function D(n2, t2) { + return "function" == typeof t2 ? t2(n2) : t2; +} +__name(D, "D"); +const hooks = { + __proto__: null, + useCallback: x, + useContext: P$2, + useDebugValue: V, + useEffect: _$1, + useErrorBoundary: b, + useId: g$6, + useImperativeHandle: T, + useLayoutEffect: A, + useMemo: q, + useReducer: y, + useRef: F, + useState: p$2 +}; +const XMLNS$1 = "http://www.w3.org/2000/svg"; +function SentryLogo() { + const createElementNS = /* @__PURE__ */ __name((tagName) => DOCUMENT.createElementNS(XMLNS$1, tagName), "createElementNS"); + const svg = setAttributesNS(createElementNS("svg"), { + width: "32", + height: "30", + viewBox: "0 0 72 66", + fill: "inherit" + }); + const path = setAttributesNS(createElementNS("path"), { + transform: "translate(11, 11)", + d: "M29,2.26a4.67,4.67,0,0,0-8,0L14.42,13.53A32.21,32.21,0,0,1,32.17,40.19H27.55A27.68,27.68,0,0,0,12.09,17.47L6,28a15.92,15.92,0,0,1,9.23,12.17H4.62A.76.76,0,0,1,4,39.06l2.94-5a10.74,10.74,0,0,0-3.36-1.9l-2.91,5a4.54,4.54,0,0,0,1.69,6.24A4.66,4.66,0,0,0,4.62,44H19.15a19.4,19.4,0,0,0-8-17.31l2.31-4A23.87,23.87,0,0,1,23.76,44H36.07a35.88,35.88,0,0,0-16.41-31.8l4.67-8a.77.77,0,0,1,1.05-.27c.53.29,20.29,34.77,20.66,35.17a.76.76,0,0,1-.68,1.13H40.6q.09,1.91,0,3.81h4.78A4.59,4.59,0,0,0,50,39.43a4.49,4.49,0,0,0-.62-2.28Z" + }); + svg.appendChild(path); + return svg; +} +__name(SentryLogo, "SentryLogo"); +function DialogHeader({ options: options4 }) { + const logoHtml = q(() => ({ __html: SentryLogo().outerHTML }), []); + return y$1( + "h2", + { class: "dialog__header" }, + y$1("span", { class: "dialog__title" }, options4.formTitle), + options4.showBranding ? y$1( + "a", + { + class: "brand-link", + target: "_blank", + href: "https://sentry.io/welcome/", + title: "Powered by Sentry", + rel: "noopener noreferrer", + dangerouslySetInnerHTML: logoHtml + } + ) : null + ); +} +__name(DialogHeader, "DialogHeader"); +function getMissingFields(feedback, props) { + const emptyFields = []; + if (props.isNameRequired && !feedback.name) { + emptyFields.push(props.nameLabel); + } + if (props.isEmailRequired && !feedback.email) { + emptyFields.push(props.emailLabel); + } + if (!feedback.message) { + emptyFields.push(props.messageLabel); + } + return emptyFields; +} +__name(getMissingFields, "getMissingFields"); +function retrieveStringValue(formData, key) { + const value4 = formData.get(key); + if (typeof value4 === "string") { + return value4.trim(); + } + return ""; +} +__name(retrieveStringValue, "retrieveStringValue"); +function Form({ + options: options4, + defaultEmail, + defaultName, + onFormClose, + onSubmit, + onSubmitSuccess, + onSubmitError, + showEmail, + showName, + screenshotInput +}) { + const { + tags, + addScreenshotButtonLabel, + removeScreenshotButtonLabel, + cancelButtonLabel, + emailLabel, + emailPlaceholder, + isEmailRequired, + isNameRequired, + messageLabel, + messagePlaceholder, + nameLabel, + namePlaceholder, + submitButtonLabel, + isRequiredLabel + } = options4; + const [error2, setError] = p$2(null); + const [showScreenshotInput, setShowScreenshotInput] = p$2(false); + const ScreenshotInputComponent = screenshotInput && screenshotInput.input; + const [screenshotError, setScreenshotError] = p$2(null); + const onScreenshotError = x((error3) => { + setScreenshotError(error3); + setShowScreenshotInput(false); + }, []); + const hasAllRequiredFields = x( + (data26) => { + const missingFields = getMissingFields(data26, { + emailLabel, + isEmailRequired, + isNameRequired, + messageLabel, + nameLabel + }); + if (missingFields.length > 0) { + setError(`Please enter in the following required fields: ${missingFields.join(", ")}`); + } else { + setError(null); + } + return missingFields.length === 0; + }, + [emailLabel, isEmailRequired, isNameRequired, messageLabel, nameLabel] + ); + const handleSubmit = x( + async (e2) => { + try { + e2.preventDefault(); + if (!(e2.target instanceof HTMLFormElement)) { + return; + } + const formData = new FormData(e2.target); + const attachment = await (screenshotInput && showScreenshotInput ? screenshotInput.value() : void 0); + const data26 = { + name: retrieveStringValue(formData, "name"), + email: retrieveStringValue(formData, "email"), + message: retrieveStringValue(formData, "message"), + attachments: attachment ? [attachment] : void 0 + }; + if (!hasAllRequiredFields(data26)) { + return; + } + try { + await onSubmit( + { + name: data26.name, + email: data26.email, + message: data26.message, + source: FEEDBACK_WIDGET_SOURCE, + tags + }, + { attachments: data26.attachments } + ); + onSubmitSuccess(data26); + } catch (error3) { + DEBUG_BUILD$1 && logger$2.error(error3); + setError(error3); + onSubmitError(error3); + } + } catch (e22) { + } + }, + [screenshotInput && showScreenshotInput, onSubmitSuccess, onSubmitError] + ); + return y$1( + "form", + { class: "form", onSubmit: handleSubmit }, + ScreenshotInputComponent && showScreenshotInput ? y$1(ScreenshotInputComponent, { onError: onScreenshotError }) : null, + y$1( + "div", + { class: "form__right", "data-sentry-feedback": true }, + y$1( + "div", + { class: "form__top" }, + error2 ? y$1("div", { class: "form__error-container" }, error2) : null, + showName ? y$1( + "label", + { for: "name", class: "form__label" }, + y$1(LabelText, { label: nameLabel, isRequiredLabel, isRequired: isNameRequired }), + y$1( + "input", + { + class: "form__input", + defaultValue: defaultName, + id: "name", + name: "name", + placeholder: namePlaceholder, + required: isNameRequired, + type: "text" + } + ) + ) : y$1("input", { "aria-hidden": true, value: defaultName, name: "name", type: "hidden" }), + showEmail ? y$1( + "label", + { for: "email", class: "form__label" }, + y$1(LabelText, { label: emailLabel, isRequiredLabel, isRequired: isEmailRequired }), + y$1( + "input", + { + class: "form__input", + defaultValue: defaultEmail, + id: "email", + name: "email", + placeholder: emailPlaceholder, + required: isEmailRequired, + type: "email" + } + ) + ) : y$1("input", { "aria-hidden": true, value: defaultEmail, name: "email", type: "hidden" }), + y$1( + "label", + { for: "message", class: "form__label" }, + y$1(LabelText, { label: messageLabel, isRequiredLabel, isRequired: true }), + y$1( + "textarea", + { + autoFocus: true, + class: "form__input form__input--textarea", + id: "message", + name: "message", + placeholder: messagePlaceholder, + required: true, + rows: 5 + } + ) + ), + ScreenshotInputComponent ? y$1( + "label", + { for: "screenshot", class: "form__label" }, + y$1( + "button", + { + class: "btn btn--default", + type: "button", + onClick: /* @__PURE__ */ __name(() => { + setScreenshotError(null); + setShowScreenshotInput((prev2) => !prev2); + }, "onClick") + }, + showScreenshotInput ? removeScreenshotButtonLabel : addScreenshotButtonLabel + ), + screenshotError ? y$1("div", { class: "form__error-container" }, screenshotError.message) : null + ) : null + ), + y$1( + "div", + { class: "btn-group" }, + y$1( + "button", + { class: "btn btn--primary", type: "submit" }, + submitButtonLabel + ), + y$1( + "button", + { class: "btn btn--default", type: "button", onClick: onFormClose }, + cancelButtonLabel + ) + ) + ) + ); +} +__name(Form, "Form"); +function LabelText({ + label: label5, + isRequired, + isRequiredLabel +}) { + return y$1( + "span", + { class: "form__label__text" }, + label5, + isRequired && y$1("span", { class: "form__label__text--required" }, isRequiredLabel) + ); +} +__name(LabelText, "LabelText"); +const WIDTH = 16; +const HEIGHT = 17; +const XMLNS = "http://www.w3.org/2000/svg"; +function SuccessIcon() { + const createElementNS = /* @__PURE__ */ __name((tagName) => WINDOW.document.createElementNS(XMLNS, tagName), "createElementNS"); + const svg = setAttributesNS(createElementNS("svg"), { + width: `${WIDTH}`, + height: `${HEIGHT}`, + viewBox: `0 0 ${WIDTH} ${HEIGHT}`, + fill: "inherit" + }); + const g2 = setAttributesNS(createElementNS("g"), { + clipPath: "url(#clip0_57_156)" + }); + const path2 = setAttributesNS(createElementNS("path"), { + ["fill-rule"]: "evenodd", + ["clip-rule"]: "evenodd", + d: "M3.55544 15.1518C4.87103 16.0308 6.41775 16.5 8 16.5C10.1217 16.5 12.1566 15.6571 13.6569 14.1569C15.1571 12.6566 16 10.6217 16 8.5C16 6.91775 15.5308 5.37103 14.6518 4.05544C13.7727 2.73985 12.5233 1.71447 11.0615 1.10897C9.59966 0.503466 7.99113 0.34504 6.43928 0.653721C4.88743 0.962403 3.46197 1.72433 2.34315 2.84315C1.22433 3.96197 0.462403 5.38743 0.153721 6.93928C-0.15496 8.49113 0.00346625 10.0997 0.608967 11.5615C1.21447 13.0233 2.23985 14.2727 3.55544 15.1518ZM4.40546 3.1204C5.46945 2.40946 6.72036 2.03 8 2.03C9.71595 2.03 11.3616 2.71166 12.575 3.92502C13.7883 5.13838 14.47 6.78405 14.47 8.5C14.47 9.77965 14.0905 11.0306 13.3796 12.0945C12.6687 13.1585 11.6582 13.9878 10.476 14.4775C9.29373 14.9672 7.99283 15.0953 6.73777 14.8457C5.48271 14.596 4.32987 13.9798 3.42502 13.075C2.52018 12.1701 1.90397 11.0173 1.65432 9.76224C1.40468 8.50718 1.5328 7.20628 2.0225 6.02404C2.5122 4.8418 3.34148 3.83133 4.40546 3.1204Z" + }); + const path = setAttributesNS(createElementNS("path"), { + d: "M6.68775 12.4297C6.78586 12.4745 6.89218 12.4984 7 12.5C7.11275 12.4955 7.22315 12.4664 7.32337 12.4145C7.4236 12.3627 7.51121 12.2894 7.58 12.2L12 5.63999C12.0848 5.47724 12.1071 5.28902 12.0625 5.11098C12.0178 4.93294 11.9095 4.77744 11.7579 4.67392C11.6064 4.57041 11.4221 4.52608 11.24 4.54931C11.0579 4.57254 10.8907 4.66173 10.77 4.79999L6.88 10.57L5.13 8.56999C5.06508 8.49566 4.98613 8.43488 4.89768 8.39111C4.80922 8.34735 4.713 8.32148 4.61453 8.31498C4.51605 8.30847 4.41727 8.32147 4.32382 8.35322C4.23038 8.38497 4.14413 8.43484 4.07 8.49999C3.92511 8.63217 3.83692 8.81523 3.82387 9.01092C3.81083 9.2066 3.87393 9.39976 4 9.54999L6.43 12.24C6.50187 12.3204 6.58964 12.385 6.68775 12.4297Z" + }); + svg.appendChild(g2).append(path, path2); + const speakerDefs = createElementNS("defs"); + const speakerClipPathDef = setAttributesNS(createElementNS("clipPath"), { + id: "clip0_57_156" + }); + const speakerRect = setAttributesNS(createElementNS("rect"), { + width: `${WIDTH}`, + height: `${WIDTH}`, + fill: "white", + transform: "translate(0 0.5)" + }); + speakerClipPathDef.appendChild(speakerRect); + speakerDefs.appendChild(speakerClipPathDef); + svg.appendChild(speakerDefs).appendChild(speakerClipPathDef).appendChild(speakerRect); + return svg; +} +__name(SuccessIcon, "SuccessIcon"); +function Dialog({ open: open2, onFormSubmitted, ...props }) { + const options4 = props.options; + const successIconHtml = q(() => ({ __html: SuccessIcon().outerHTML }), []); + const [timeoutId, setTimeoutId] = p$2(null); + const handleOnSuccessClick = x(() => { + if (timeoutId) { + clearTimeout(timeoutId); + setTimeoutId(null); + } + onFormSubmitted(); + }, [timeoutId]); + const onSubmitSuccess = x( + (data26) => { + props.onSubmitSuccess(data26); + setTimeoutId( + setTimeout(() => { + onFormSubmitted(); + setTimeoutId(null); + }, SUCCESS_MESSAGE_TIMEOUT) + ); + }, + [onFormSubmitted] + ); + return y$1( + g$1$1, + null, + timeoutId ? y$1( + "div", + { class: "success__position", onClick: handleOnSuccessClick }, + y$1( + "div", + { class: "success__content" }, + options4.successMessageText, + y$1("span", { class: "success__icon", dangerouslySetInnerHTML: successIconHtml }) + ) + ) : y$1( + "dialog", + { class: "dialog", onClick: options4.onFormClose, open: open2 }, + y$1( + "div", + { class: "dialog__position" }, + y$1( + "div", + { + class: "dialog__content", + onClick: /* @__PURE__ */ __name((e2) => { + e2.stopPropagation(); + }, "onClick") + }, + y$1(DialogHeader, { options: options4 }), + y$1(Form, { ...props, onSubmitSuccess }) + ) + ) + ) + ); +} +__name(Dialog, "Dialog"); +const DIALOG = ` +.dialog { + position: fixed; + z-index: var(--z-index); + margin: 0; + inset: 0; + + display: flex; + align-items: center; + justify-content: center; + padding: 0; + height: 100vh; + width: 100vw; + + color: var(--dialog-color, var(--foreground)); + fill: var(--dialog-color, var(--foreground)); + line-height: 1.75em; + + background-color: rgba(0, 0, 0, 0.05); + border: none; + inset: 0; + opacity: 1; + transition: opacity 0.2s ease-in-out; +} + +.dialog__position { + position: fixed; + z-index: var(--z-index); + inset: var(--dialog-inset); + padding: var(--page-margin); + display: flex; + max-height: calc(100vh - (2 * var(--page-margin))); +} +@media (max-width: 600px) { + .dialog__position { + inset: var(--page-margin); + padding: 0; + } +} + +.dialog__position:has(.editor) { + inset: var(--page-margin); + padding: 0; +} + +.dialog:not([open]) { + opacity: 0; + pointer-events: none; + visibility: hidden; +} +.dialog:not([open]) .dialog__content { + transform: translate(0, -16px) scale(0.98); +} + +.dialog__content { + display: flex; + flex-direction: column; + gap: 16px; + padding: var(--dialog-padding, 24px); + max-width: 100%; + width: 100%; + max-height: 100%; + overflow: auto; + + background: var(--dialog-background, var(--background)); + border-radius: var(--dialog-border-radius, 20px); + border: var(--dialog-border, var(--border)); + box-shadow: var(--dialog-box-shadow, var(--box-shadow)); + transform: translate(0, 0) scale(1); + transition: transform 0.2s ease-in-out; +} + +`; +const DIALOG_HEADER = ` +.dialog__header { + display: flex; + gap: 4px; + justify-content: space-between; + font-weight: var(--dialog-header-weight, 600); + margin: 0; +} +.dialog__title { + align-self: center; + width: var(--form-width, 272px); +} + +@media (max-width: 600px) { + .dialog__title { + width: auto; + } +} + +.dialog__position:has(.editor) .dialog__title { + width: auto; +} + + +.brand-link { + display: inline-flex; +} +.brand-link:focus-visible { + outline: var(--outline); +} +`; +const FORM = ` +.form { + display: flex; + overflow: auto; + flex-direction: row; + gap: 16px; + flex: 1 0; +} + +.form__right { + flex: 0 0 auto; + display: flex; + overflow: auto; + flex-direction: column; + justify-content: space-between; + gap: 20px; + width: var(--form-width, 100%); +} + +.dialog__position:has(.editor) .form__right { + width: var(--form-width, 272px); +} + +.form__top { + display: flex; + flex-direction: column; + gap: 8px; +} + +.form__error-container { + color: var(--error-color); + fill: var(--error-color); +} + +.form__label { + display: flex; + flex-direction: column; + gap: 4px; + margin: 0px; +} + +.form__label__text { + display: flex; + gap: 4px; + align-items: center; +} + +.form__label__text--required { + font-size: 0.85em; +} + +.form__input { + font-family: inherit; + line-height: inherit; + background: transparent; + box-sizing: border-box; + border: var(--input-border, var(--border)); + border-radius: var(--input-border-radius, 6px); + color: var(--input-color, inherit); + fill: var(--input-color, inherit); + font-size: var(--input-font-size, inherit); + font-weight: var(--input-font-weight, 500); + padding: 6px 12px; +} + +.form__input::placeholder { + opacity: 0.65; + color: var(--input-placeholder-color, inherit); + filter: var(--interactive-filter); +} + +.form__input:focus-visible { + outline: var(--input-focus-outline, var(--outline)); +} + +.form__input--textarea { + font-family: inherit; + resize: vertical; +} + +.error { + color: var(--error-color); + fill: var(--error-color); +} +`; +const BUTTON = ` +.btn-group { + display: grid; + gap: 8px; +} + +.btn { + line-height: inherit; + border: var(--button-border, var(--border)); + border-radius: var(--button-border-radius, 6px); + cursor: pointer; + font-family: inherit; + font-size: var(--button-font-size, inherit); + font-weight: var(--button-font-weight, 600); + padding: var(--button-padding, 6px 16px); +} +.btn[disabled] { + opacity: 0.6; + pointer-events: none; +} + +.btn--primary { + color: var(--button-primary-color, var(--accent-foreground)); + fill: var(--button-primary-color, var(--accent-foreground)); + background: var(--button-primary-background, var(--accent-background)); + border: var(--button-primary-border, var(--border)); + border-radius: var(--button-primary-border-radius, 6px); + font-weight: var(--button-primary-font-weight, 500); +} +.btn--primary:hover { + color: var(--button-primary-hover-color, var(--accent-foreground)); + fill: var(--button-primary-hover-color, var(--accent-foreground)); + background: var(--button-primary-hover-background, var(--accent-background)); + filter: var(--interactive-filter); +} +.btn--primary:focus-visible { + background: var(--button-primary-hover-background, var(--accent-background)); + filter: var(--interactive-filter); + outline: var(--button-primary-focus-outline, var(--outline)); +} + +.btn--default { + color: var(--button-color, var(--foreground)); + fill: var(--button-color, var(--foreground)); + background: var(--button-background, var(--background)); + border: var(--button-border, var(--border)); + border-radius: var(--button-border-radius, 6px); + font-weight: var(--button-font-weight, 500); +} +.btn--default:hover { + color: var(--button-color, var(--foreground)); + fill: var(--button-color, var(--foreground)); + background: var(--button-hover-background, var(--background)); + filter: var(--interactive-filter); +} +.btn--default:focus-visible { + background: var(--button-hover-background, var(--background)); + filter: var(--interactive-filter); + outline: var(--button-focus-outline, var(--outline)); +} +`; +const SUCCESS = ` +.success__position { + position: fixed; + inset: var(--dialog-inset); + padding: var(--page-margin); + z-index: var(--z-index); +} +.success__content { + background: var(--success-background, var(--background)); + border: var(--success-border, var(--border)); + border-radius: var(--success-border-radius, 1.7em/50%); + box-shadow: var(--success-box-shadow, var(--box-shadow)); + font-weight: var(--success-font-weight, 600); + color: var(--success-color); + fill: var(--success-color); + padding: 12px 24px; + line-height: 1.75em; + + display: grid; + align-items: center; + grid-auto-flow: column; + gap: 6px; + cursor: default; +} + +.success__icon { + display: flex; +} +`; +function createDialogStyles(styleNonce) { + const style2 = DOCUMENT.createElement("style"); + style2.textContent = ` +:host { + --dialog-inset: var(--inset); +} + +${DIALOG} +${DIALOG_HEADER} +${FORM} +${BUTTON} +${SUCCESS} +`; + if (styleNonce) { + style2.setAttribute("nonce", styleNonce); + } + return style2; +} +__name(createDialogStyles, "createDialogStyles"); +function getUser() { + const currentUser = getCurrentScope$1().getUser(); + const isolationUser = getIsolationScope().getUser(); + const globalUser = getGlobalScope().getUser(); + if (currentUser && Object.keys(currentUser).length) { + return currentUser; + } + if (isolationUser && Object.keys(isolationUser).length) { + return isolationUser; + } + return globalUser; +} +__name(getUser, "getUser"); +const feedbackModalIntegration = /* @__PURE__ */ __name(() => { + return { + name: "FeedbackModal", + // eslint-disable-next-line @typescript-eslint/no-empty-function + setupOnce() { + }, + createDialog: /* @__PURE__ */ __name(({ options: options4, screenshotIntegration, sendFeedback: sendFeedback2, shadow }) => { + const shadowRoot = shadow; + const userKey = options4.useSentryUser; + const user = getUser(); + const el = DOCUMENT.createElement("div"); + const style2 = createDialogStyles(options4.styleNonce); + let originalOverflow = ""; + const dialog = { + get el() { + return el; + }, + appendToDom() { + if (!shadowRoot.contains(style2) && !shadowRoot.contains(el)) { + shadowRoot.appendChild(style2); + shadowRoot.appendChild(el); + } + }, + removeFromDom() { + shadowRoot.removeChild(el); + shadowRoot.removeChild(style2); + DOCUMENT.body.style.overflow = originalOverflow; + }, + open() { + renderContent(true); + options4.onFormOpen && options4.onFormOpen(); + originalOverflow = DOCUMENT.body.style.overflow; + DOCUMENT.body.style.overflow = "hidden"; + }, + close() { + renderContent(false); + DOCUMENT.body.style.overflow = originalOverflow; + } + }; + const screenshotInput = screenshotIntegration && screenshotIntegration.createInput({ h: y$1, hooks, dialog, options: options4 }); + const renderContent = /* @__PURE__ */ __name((open2) => { + B$1( + y$1( + Dialog, + { + options: options4, + screenshotInput, + showName: options4.showName || options4.isNameRequired, + showEmail: options4.showEmail || options4.isEmailRequired, + defaultName: userKey && user && user[userKey.name] || "", + defaultEmail: userKey && user && user[userKey.email] || "", + onFormClose: /* @__PURE__ */ __name(() => { + renderContent(false); + options4.onFormClose && options4.onFormClose(); + }, "onFormClose"), + onSubmit: sendFeedback2, + onSubmitSuccess: /* @__PURE__ */ __name((data26) => { + renderContent(false); + options4.onSubmitSuccess && options4.onSubmitSuccess(data26); + }, "onSubmitSuccess"), + onSubmitError: /* @__PURE__ */ __name((error2) => { + options4.onSubmitError && options4.onSubmitError(error2); + }, "onSubmitError"), + onFormSubmitted: /* @__PURE__ */ __name(() => { + options4.onFormSubmitted && options4.onFormSubmitted(); + }, "onFormSubmitted"), + open: open2 + } + ), + el + ); + }, "renderContent"); + return dialog; + }, "createDialog") + }; +}, "feedbackModalIntegration"); +function CropCornerFactory({ + h: h2 + // eslint-disable-line @typescript-eslint/no-unused-vars +}) { + return /* @__PURE__ */ __name(function CropCorner({ + top, + left, + corner, + onGrabButton + }) { + return h2( + "button", + { + class: `editor__crop-corner editor__crop-corner--${corner} `, + style: { + top, + left + }, + onMouseDown: /* @__PURE__ */ __name((e2) => { + e2.preventDefault(); + onGrabButton(e2, corner); + }, "onMouseDown"), + onClick: /* @__PURE__ */ __name((e2) => { + e2.preventDefault(); + }, "onClick") + } + ); + }, "CropCorner"); +} +__name(CropCornerFactory, "CropCornerFactory"); +function createScreenshotInputStyles(styleNonce) { + const style2 = DOCUMENT.createElement("style"); + const surface200 = "#1A141F"; + const gray100 = "#302735"; + style2.textContent = ` +.editor { + padding: 10px; + padding-top: 65px; + padding-bottom: 65px; + flex-grow: 1; + + background-color: ${surface200}; + background-image: repeating-linear-gradient( + -145deg, + transparent, + transparent 8px, + ${surface200} 8px, + ${surface200} 11px + ), + repeating-linear-gradient( + -45deg, + transparent, + transparent 15px, + ${gray100} 15px, + ${gray100} 16px + ); +} + +.editor__canvas-container { + width: 100%; + height: 100%; + position: relative; + display: flex; + align-items: center; + justify-content: center; +} + +.editor__canvas-container canvas { + object-fit: contain; + position: relative; +} + +.editor__crop-btn-group { + padding: 8px; + gap: 8px; + border-radius: var(--menu-border-radius, 6px); + background: var(--button-primary-background, var(--background)); + width: 175px; + position: absolute; +} + +.editor__crop-corner { + width: 30px; + height: 30px; + position: absolute; + background: none; + border: 3px solid #ffffff; +} + +.editor__crop-corner--top-left { + cursor: nwse-resize; + border-right: none; + border-bottom: none; +} +.editor__crop-corner--top-right { + cursor: nesw-resize; + border-left: none; + border-bottom: none; +} +.editor__crop-corner--bottom-left { + cursor: nesw-resize; + border-right: none; + border-top: none; +} +.editor__crop-corner--bottom-right { + cursor: nwse-resize; + border-left: none; + border-top: none; +} +`; + if (styleNonce) { + style2.setAttribute("nonce", styleNonce); + } + return style2; +} +__name(createScreenshotInputStyles, "createScreenshotInputStyles"); +function useTakeScreenshotFactory({ hooks: hooks2 }) { + return /* @__PURE__ */ __name(function useTakeScreenshot({ onBeforeScreenshot, onScreenshot, onAfterScreenshot, onError }) { + hooks2.useEffect(() => { + const takeScreenshot = /* @__PURE__ */ __name(async () => { + onBeforeScreenshot(); + const stream = await NAVIGATOR.mediaDevices.getDisplayMedia({ + video: { + width: WINDOW.innerWidth * WINDOW.devicePixelRatio, + height: WINDOW.innerHeight * WINDOW.devicePixelRatio + }, + audio: false, + // @ts-expect-error experimental flags: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia#prefercurrenttab + monitorTypeSurfaces: "exclude", + preferCurrentTab: true, + selfBrowserSurface: "include", + surfaceSwitching: "exclude" + }); + const video = DOCUMENT.createElement("video"); + await new Promise((resolve2, reject3) => { + video.srcObject = stream; + video.onloadedmetadata = () => { + onScreenshot(video); + stream.getTracks().forEach((track2) => track2.stop()); + resolve2(); + }; + video.play().catch(reject3); + }); + onAfterScreenshot(); + }, "takeScreenshot"); + takeScreenshot().catch(onError); + }, []); + }, "useTakeScreenshot"); +} +__name(useTakeScreenshotFactory, "useTakeScreenshotFactory"); +const CROP_BUTTON_SIZE = 30; +const CROP_BUTTON_BORDER = 3; +const CROP_BUTTON_OFFSET = CROP_BUTTON_SIZE + CROP_BUTTON_BORDER; +const DPI = WINDOW.devicePixelRatio; +const constructRect = /* @__PURE__ */ __name((box) => { + return { + x: Math.min(box.startX, box.endX), + y: Math.min(box.startY, box.endY), + width: Math.abs(box.startX - box.endX), + height: Math.abs(box.startY - box.endY) + }; +}, "constructRect"); +const getContainedSize = /* @__PURE__ */ __name((img) => { + const imgClientHeight = img.clientHeight; + const imgClientWidth = img.clientWidth; + const ratio = img.width / img.height; + let width2 = imgClientHeight * ratio; + let height = imgClientHeight; + if (width2 > imgClientWidth) { + width2 = imgClientWidth; + height = imgClientWidth / ratio; + } + const x2 = (imgClientWidth - width2) / 2; + const y2 = (imgClientHeight - height) / 2; + return { startX: x2, startY: y2, endX: width2 + x2, endY: height + y2 }; +}, "getContainedSize"); +function ScreenshotEditorFactory({ + h: h2, + hooks: hooks2, + imageBuffer, + dialog, + options: options4 +}) { + const useTakeScreenshot = useTakeScreenshotFactory({ hooks: hooks2 }); + return /* @__PURE__ */ __name(function ScreenshotEditor({ onError }) { + const styles = hooks2.useMemo(() => ({ __html: createScreenshotInputStyles(options4.styleNonce).innerText }), []); + const CropCorner = CropCornerFactory({ h: h2 }); + const canvasContainerRef = hooks2.useRef(null); + const cropContainerRef = hooks2.useRef(null); + const croppingRef = hooks2.useRef(null); + const [croppingRect, setCroppingRect] = hooks2.useState({ startX: 0, startY: 0, endX: 0, endY: 0 }); + const [confirmCrop, setConfirmCrop] = hooks2.useState(false); + const [isResizing, setIsResizing] = hooks2.useState(false); + hooks2.useEffect(() => { + WINDOW.addEventListener("resize", resizeCropper, false); + }, []); + function resizeCropper() { + const cropper = croppingRef.current; + const imageDimensions = constructRect(getContainedSize(imageBuffer)); + if (cropper) { + cropper.width = imageDimensions.width * DPI; + cropper.height = imageDimensions.height * DPI; + cropper.style.width = `${imageDimensions.width}px`; + cropper.style.height = `${imageDimensions.height}px`; + const ctx = cropper.getContext("2d"); + if (ctx) { + ctx.scale(DPI, DPI); + } + } + const cropButton = cropContainerRef.current; + if (cropButton) { + cropButton.style.width = `${imageDimensions.width}px`; + cropButton.style.height = `${imageDimensions.height}px`; + } + setCroppingRect({ startX: 0, startY: 0, endX: imageDimensions.width, endY: imageDimensions.height }); + } + __name(resizeCropper, "resizeCropper"); + hooks2.useEffect(() => { + const cropper = croppingRef.current; + if (!cropper) { + return; + } + const ctx = cropper.getContext("2d"); + if (!ctx) { + return; + } + const imageDimensions = constructRect(getContainedSize(imageBuffer)); + const croppingBox = constructRect(croppingRect); + ctx.clearRect(0, 0, imageDimensions.width, imageDimensions.height); + ctx.fillStyle = "rgba(0, 0, 0, 0.5)"; + ctx.fillRect(0, 0, imageDimensions.width, imageDimensions.height); + ctx.clearRect(croppingBox.x, croppingBox.y, croppingBox.width, croppingBox.height); + ctx.strokeStyle = "#ffffff"; + ctx.lineWidth = 3; + ctx.strokeRect(croppingBox.x + 1, croppingBox.y + 1, croppingBox.width - 2, croppingBox.height - 2); + ctx.strokeStyle = "#000000"; + ctx.lineWidth = 1; + ctx.strokeRect(croppingBox.x + 3, croppingBox.y + 3, croppingBox.width - 6, croppingBox.height - 6); + }, [croppingRect]); + function onGrabButton(e2, corner) { + setConfirmCrop(false); + setIsResizing(true); + const handleMouseMove2 = makeHandleMouseMove(corner); + const handleMouseUp = /* @__PURE__ */ __name(() => { + DOCUMENT.removeEventListener("mousemove", handleMouseMove2); + DOCUMENT.removeEventListener("mouseup", handleMouseUp); + setConfirmCrop(true); + setIsResizing(false); + }, "handleMouseUp"); + DOCUMENT.addEventListener("mouseup", handleMouseUp); + DOCUMENT.addEventListener("mousemove", handleMouseMove2); + } + __name(onGrabButton, "onGrabButton"); + const makeHandleMouseMove = hooks2.useCallback((corner) => { + return function(e2) { + if (!croppingRef.current) { + return; + } + const cropCanvas = croppingRef.current; + const cropBoundingRect = cropCanvas.getBoundingClientRect(); + const mouseX = e2.clientX - cropBoundingRect.x; + const mouseY = e2.clientY - cropBoundingRect.y; + switch (corner) { + case "top-left": + setCroppingRect((prev2) => ({ + ...prev2, + startX: Math.min(Math.max(0, mouseX), prev2.endX - CROP_BUTTON_OFFSET), + startY: Math.min(Math.max(0, mouseY), prev2.endY - CROP_BUTTON_OFFSET) + })); + break; + case "top-right": + setCroppingRect((prev2) => ({ + ...prev2, + endX: Math.max(Math.min(mouseX, cropCanvas.width / DPI), prev2.startX + CROP_BUTTON_OFFSET), + startY: Math.min(Math.max(0, mouseY), prev2.endY - CROP_BUTTON_OFFSET) + })); + break; + case "bottom-left": + setCroppingRect((prev2) => ({ + ...prev2, + startX: Math.min(Math.max(0, mouseX), prev2.endX - CROP_BUTTON_OFFSET), + endY: Math.max(Math.min(mouseY, cropCanvas.height / DPI), prev2.startY + CROP_BUTTON_OFFSET) + })); + break; + case "bottom-right": + setCroppingRect((prev2) => ({ + ...prev2, + endX: Math.max(Math.min(mouseX, cropCanvas.width / DPI), prev2.startX + CROP_BUTTON_OFFSET), + endY: Math.max(Math.min(mouseY, cropCanvas.height / DPI), prev2.startY + CROP_BUTTON_OFFSET) + })); + break; + } + }; + }, []); + const initialPositionRef = hooks2.useRef({ initialX: 0, initialY: 0 }); + function onDragStart2(e2) { + if (isResizing) return; + initialPositionRef.current = { initialX: e2.clientX, initialY: e2.clientY }; + const handleMouseMove2 = /* @__PURE__ */ __name((moveEvent) => { + const cropCanvas = croppingRef.current; + if (!cropCanvas) return; + const deltaX = moveEvent.clientX - initialPositionRef.current.initialX; + const deltaY = moveEvent.clientY - initialPositionRef.current.initialY; + setCroppingRect((prev2) => { + const newStartX = Math.max( + 0, + Math.min(prev2.startX + deltaX, cropCanvas.width / DPI - (prev2.endX - prev2.startX)) + ); + const newStartY = Math.max( + 0, + Math.min(prev2.startY + deltaY, cropCanvas.height / DPI - (prev2.endY - prev2.startY)) + ); + const newEndX = newStartX + (prev2.endX - prev2.startX); + const newEndY = newStartY + (prev2.endY - prev2.startY); + initialPositionRef.current.initialX = moveEvent.clientX; + initialPositionRef.current.initialY = moveEvent.clientY; + return { + startX: newStartX, + startY: newStartY, + endX: newEndX, + endY: newEndY + }; + }); + }, "handleMouseMove"); + const handleMouseUp = /* @__PURE__ */ __name(() => { + DOCUMENT.removeEventListener("mousemove", handleMouseMove2); + DOCUMENT.removeEventListener("mouseup", handleMouseUp); + }, "handleMouseUp"); + DOCUMENT.addEventListener("mousemove", handleMouseMove2); + DOCUMENT.addEventListener("mouseup", handleMouseUp); + } + __name(onDragStart2, "onDragStart"); + function submit() { + const cutoutCanvas = DOCUMENT.createElement("canvas"); + const imageBox = constructRect(getContainedSize(imageBuffer)); + const croppingBox = constructRect(croppingRect); + cutoutCanvas.width = croppingBox.width * DPI; + cutoutCanvas.height = croppingBox.height * DPI; + const cutoutCtx = cutoutCanvas.getContext("2d"); + if (cutoutCtx && imageBuffer) { + cutoutCtx.drawImage( + imageBuffer, + croppingBox.x / imageBox.width * imageBuffer.width, + croppingBox.y / imageBox.height * imageBuffer.height, + croppingBox.width / imageBox.width * imageBuffer.width, + croppingBox.height / imageBox.height * imageBuffer.height, + 0, + 0, + cutoutCanvas.width, + cutoutCanvas.height + ); + } + const ctx = imageBuffer.getContext("2d"); + if (ctx) { + ctx.clearRect(0, 0, imageBuffer.width, imageBuffer.height); + imageBuffer.width = cutoutCanvas.width; + imageBuffer.height = cutoutCanvas.height; + imageBuffer.style.width = `${croppingBox.width}px`; + imageBuffer.style.height = `${croppingBox.height}px`; + ctx.drawImage(cutoutCanvas, 0, 0); + resizeCropper(); + } + } + __name(submit, "submit"); + useTakeScreenshot({ + onBeforeScreenshot: hooks2.useCallback(() => { + dialog.el.style.display = "none"; + }, []), + onScreenshot: hooks2.useCallback( + (imageSource) => { + const context = imageBuffer.getContext("2d"); + if (!context) { + throw new Error("Could not get canvas context"); + } + imageBuffer.width = imageSource.videoWidth; + imageBuffer.height = imageSource.videoHeight; + imageBuffer.style.width = "100%"; + imageBuffer.style.height = "100%"; + context.drawImage(imageSource, 0, 0); + }, + [imageBuffer] + ), + onAfterScreenshot: hooks2.useCallback(() => { + dialog.el.style.display = "block"; + const container = canvasContainerRef.current; + container && container.appendChild(imageBuffer); + resizeCropper(); + }, []), + onError: hooks2.useCallback((error2) => { + dialog.el.style.display = "block"; + onError(error2); + }, []) + }); + return h2( + "div", + { class: "editor" }, + h2("style", { nonce: options4.styleNonce, dangerouslySetInnerHTML: styles }), + h2( + "div", + { class: "editor__canvas-container", ref: canvasContainerRef }, + h2( + "div", + { class: "editor__crop-container", style: { position: "absolute", zIndex: 1 }, ref: cropContainerRef }, + h2( + "canvas", + { + onMouseDown: onDragStart2, + style: { position: "absolute", cursor: confirmCrop ? "move" : "auto" }, + ref: croppingRef + } + ), + h2( + CropCorner, + { + left: croppingRect.startX - CROP_BUTTON_BORDER, + top: croppingRect.startY - CROP_BUTTON_BORDER, + onGrabButton, + corner: "top-left" + } + ), + h2( + CropCorner, + { + left: croppingRect.endX - CROP_BUTTON_SIZE + CROP_BUTTON_BORDER, + top: croppingRect.startY - CROP_BUTTON_BORDER, + onGrabButton, + corner: "top-right" + } + ), + h2( + CropCorner, + { + left: croppingRect.startX - CROP_BUTTON_BORDER, + top: croppingRect.endY - CROP_BUTTON_SIZE + CROP_BUTTON_BORDER, + onGrabButton, + corner: "bottom-left" + } + ), + h2( + CropCorner, + { + left: croppingRect.endX - CROP_BUTTON_SIZE + CROP_BUTTON_BORDER, + top: croppingRect.endY - CROP_BUTTON_SIZE + CROP_BUTTON_BORDER, + onGrabButton, + corner: "bottom-right" + } + ), + h2( + "div", + { + style: { + left: Math.max(0, croppingRect.endX - 191), + top: Math.max(0, croppingRect.endY + 8), + display: confirmCrop ? "flex" : "none" + }, + class: "editor__crop-btn-group" + }, + h2( + "button", + { + onClick: /* @__PURE__ */ __name((e2) => { + e2.preventDefault(); + if (croppingRef.current) { + setCroppingRect({ + startX: 0, + startY: 0, + endX: croppingRef.current.width / DPI, + endY: croppingRef.current.height / DPI + }); + } + setConfirmCrop(false); + }, "onClick"), + class: "btn btn--default" + }, + options4.cancelButtonLabel + ), + h2( + "button", + { + onClick: /* @__PURE__ */ __name((e2) => { + e2.preventDefault(); + submit(); + setConfirmCrop(false); + }, "onClick"), + class: "btn btn--primary" + }, + options4.confirmButtonLabel + ) + ) + ) + ) + ); + }, "ScreenshotEditor"); +} +__name(ScreenshotEditorFactory, "ScreenshotEditorFactory"); +const feedbackScreenshotIntegration = /* @__PURE__ */ __name(() => { + return { + name: "FeedbackScreenshot", + // eslint-disable-next-line @typescript-eslint/no-empty-function + setupOnce() { + }, + createInput: /* @__PURE__ */ __name(({ h: h2, hooks: hooks2, dialog, options: options4 }) => { + const imageBuffer = DOCUMENT.createElement("canvas"); + return { + input: ScreenshotEditorFactory({ + h: h2, + hooks: hooks2, + imageBuffer, + dialog, + options: options4 + }), + // eslint-disable-line @typescript-eslint/no-explicit-any + value: /* @__PURE__ */ __name(async () => { + const blob = await new Promise((resolve2) => { + imageBuffer.toBlob(resolve2, "image/png"); + }); + if (blob) { + const data26 = new Uint8Array(await blob.arrayBuffer()); + const attachment = { + data: data26, + filename: "screenshot.png", + contentType: "application/png" + // attachmentType?: string; + }; + return attachment; + } + return void 0; + }, "value") + }; + }, "createInput") + }; +}, "feedbackScreenshotIntegration"); +const feedbackAsyncIntegration = buildFeedbackIntegration({ + lazyLoadIntegration +}); +const feedbackSyncIntegration = buildFeedbackIntegration({ + getModalIntegration: /* @__PURE__ */ __name(() => feedbackModalIntegration, "getModalIntegration"), + getScreenshotIntegration: /* @__PURE__ */ __name(() => feedbackScreenshotIntegration, "getScreenshotIntegration") +}); +function increment(name2, value4 = 1, data26) { + metrics$1.increment(BrowserMetricsAggregator, name2, value4, data26); +} +__name(increment, "increment"); +function distribution(name2, value4, data26) { + metrics$1.distribution(BrowserMetricsAggregator, name2, value4, data26); +} +__name(distribution, "distribution"); +function set$4(name2, value4, data26) { + metrics$1.set(BrowserMetricsAggregator, name2, value4, data26); +} +__name(set$4, "set$4"); +function gauge(name2, value4, data26) { + metrics$1.gauge(BrowserMetricsAggregator, name2, value4, data26); +} +__name(gauge, "gauge"); +function timing(name2, value4, unit = "second", data26) { + return metrics$1.timing(BrowserMetricsAggregator, name2, value4, unit, data26); +} +__name(timing, "timing"); +const metrics = { + increment, + distribution, + set: set$4, + gauge, + timing +}; +const responseToSpanId = /* @__PURE__ */ new WeakMap(); +const spanIdToEndTimestamp = /* @__PURE__ */ new Map(); +const defaultRequestInstrumentationOptions = { + traceFetch: true, + traceXHR: true, + enableHTTPTimings: true, + trackFetchStreamPerformance: false +}; +function instrumentOutgoingRequests(client, _options) { + const { + traceFetch, + traceXHR, + trackFetchStreamPerformance, + shouldCreateSpanForRequest, + enableHTTPTimings, + tracePropagationTargets + } = { + traceFetch: defaultRequestInstrumentationOptions.traceFetch, + traceXHR: defaultRequestInstrumentationOptions.traceXHR, + trackFetchStreamPerformance: defaultRequestInstrumentationOptions.trackFetchStreamPerformance, + ..._options + }; + const shouldCreateSpan = typeof shouldCreateSpanForRequest === "function" ? shouldCreateSpanForRequest : (_2) => true; + const shouldAttachHeadersWithTargets = /* @__PURE__ */ __name((url) => shouldAttachHeaders(url, tracePropagationTargets), "shouldAttachHeadersWithTargets"); + const spans = {}; + if (traceFetch) { + client.addEventProcessor((event) => { + if (event.type === "transaction" && event.spans) { + event.spans.forEach((span) => { + if (span.op === "http.client") { + const updatedTimestamp = spanIdToEndTimestamp.get(span.span_id); + if (updatedTimestamp) { + span.timestamp = updatedTimestamp / 1e3; + spanIdToEndTimestamp.delete(span.span_id); + } + } + }); + } + return event; + }); + if (trackFetchStreamPerformance) { + addFetchEndInstrumentationHandler((handlerData) => { + if (handlerData.response) { + const span = responseToSpanId.get(handlerData.response); + if (span && handlerData.endTimestamp) { + spanIdToEndTimestamp.set(span, handlerData.endTimestamp); + } + } + }); + } + addFetchInstrumentationHandler((handlerData) => { + const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans); + if (handlerData.response && handlerData.fetchData.__span) { + responseToSpanId.set(handlerData.response, handlerData.fetchData.__span); + } + if (createdSpan) { + const fullUrl = getFullURL(handlerData.fetchData.url); + const host = fullUrl ? parseUrl$1(fullUrl).host : void 0; + createdSpan.setAttributes({ + "http.url": fullUrl, + "server.address": host + }); + } + if (enableHTTPTimings && createdSpan) { + addHTTPTimings(createdSpan); + } + }); + } + if (traceXHR) { + addXhrInstrumentationHandler((handlerData) => { + const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans); + if (enableHTTPTimings && createdSpan) { + addHTTPTimings(createdSpan); + } + }); + } +} +__name(instrumentOutgoingRequests, "instrumentOutgoingRequests"); +function isPerformanceResourceTiming(entry) { + return entry.entryType === "resource" && "initiatorType" in entry && typeof entry.nextHopProtocol === "string" && (entry.initiatorType === "fetch" || entry.initiatorType === "xmlhttprequest"); +} +__name(isPerformanceResourceTiming, "isPerformanceResourceTiming"); +function addHTTPTimings(span) { + const { url } = spanToJSON(span).data || {}; + if (!url || typeof url !== "string") { + return; + } + const cleanup = addPerformanceInstrumentationHandler("resource", ({ entries }) => { + entries.forEach((entry) => { + if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) { + const spanData = resourceTimingEntryToSpanData(entry); + spanData.forEach((data26) => span.setAttribute(...data26)); + setTimeout(cleanup); + } + }); + }); +} +__name(addHTTPTimings, "addHTTPTimings"); +function extractNetworkProtocol(nextHopProtocol) { + let name2 = "unknown"; + let version2 = "unknown"; + let _name = ""; + for (const char of nextHopProtocol) { + if (char === "/") { + [name2, version2] = nextHopProtocol.split("/"); + break; + } + if (!isNaN(Number(char))) { + name2 = _name === "h" ? "http" : _name; + version2 = nextHopProtocol.split(_name)[1]; + break; + } + _name += char; + } + if (_name === nextHopProtocol) { + name2 = _name; + } + return { name: name2, version: version2 }; +} +__name(extractNetworkProtocol, "extractNetworkProtocol"); +function getAbsoluteTime(time = 0) { + return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1e3; +} +__name(getAbsoluteTime, "getAbsoluteTime"); +function resourceTimingEntryToSpanData(resourceTiming) { + const { name: name2, version: version2 } = extractNetworkProtocol(resourceTiming.nextHopProtocol); + const timingSpanData = []; + timingSpanData.push(["network.protocol.version", version2], ["network.protocol.name", name2]); + if (!browserPerformanceTimeOrigin) { + return timingSpanData; + } + return [ + ...timingSpanData, + ["http.request.redirect_start", getAbsoluteTime(resourceTiming.redirectStart)], + ["http.request.fetch_start", getAbsoluteTime(resourceTiming.fetchStart)], + ["http.request.domain_lookup_start", getAbsoluteTime(resourceTiming.domainLookupStart)], + ["http.request.domain_lookup_end", getAbsoluteTime(resourceTiming.domainLookupEnd)], + ["http.request.connect_start", getAbsoluteTime(resourceTiming.connectStart)], + ["http.request.secure_connection_start", getAbsoluteTime(resourceTiming.secureConnectionStart)], + ["http.request.connection_end", getAbsoluteTime(resourceTiming.connectEnd)], + ["http.request.request_start", getAbsoluteTime(resourceTiming.requestStart)], + ["http.request.response_start", getAbsoluteTime(resourceTiming.responseStart)], + ["http.request.response_end", getAbsoluteTime(resourceTiming.responseEnd)] + ]; +} +__name(resourceTimingEntryToSpanData, "resourceTimingEntryToSpanData"); +function shouldAttachHeaders(targetUrl, tracePropagationTargets) { + const href = WINDOW$5.location && WINDOW$5.location.href; + if (!href) { + const isRelativeSameOriginRequest = !!targetUrl.match(/^\/(?!\/)/); + if (!tracePropagationTargets) { + return isRelativeSameOriginRequest; + } else { + return stringMatchesSomePattern(targetUrl, tracePropagationTargets); + } + } else { + let resolvedUrl; + let currentOrigin; + try { + resolvedUrl = new URL(targetUrl, href); + currentOrigin = new URL(href).origin; + } catch (e2) { + return false; + } + const isSameOriginRequest = resolvedUrl.origin === currentOrigin; + if (!tracePropagationTargets) { + return isSameOriginRequest; + } else { + return stringMatchesSomePattern(resolvedUrl.toString(), tracePropagationTargets) || isSameOriginRequest && stringMatchesSomePattern(resolvedUrl.pathname, tracePropagationTargets); + } + } +} +__name(shouldAttachHeaders, "shouldAttachHeaders"); +function xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeaders2, spans) { + const xhr = handlerData.xhr; + const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY]; + if (!xhr || xhr.__sentry_own_request__ || !sentryXhrData) { + return void 0; + } + const shouldCreateSpanResult = hasTracingEnabled() && shouldCreateSpan(sentryXhrData.url); + if (handlerData.endTimestamp && shouldCreateSpanResult) { + const spanId = xhr.__sentry_xhr_span_id__; + if (!spanId) return; + const span2 = spans[spanId]; + if (span2 && sentryXhrData.status_code !== void 0) { + setHttpStatus(span2, sentryXhrData.status_code); + span2.end(); + delete spans[spanId]; + } + return void 0; + } + const fullUrl = getFullURL(sentryXhrData.url); + const host = fullUrl ? parseUrl$1(fullUrl).host : void 0; + const hasParent = !!getActiveSpan(); + const span = shouldCreateSpanResult && hasParent ? startInactiveSpan({ + name: `${sentryXhrData.method} ${sentryXhrData.url}`, + attributes: { + type: "xhr", + "http.method": sentryXhrData.method, + "http.url": fullUrl, + url: sentryXhrData.url, + "server.address": host, + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.http.browser", + [SEMANTIC_ATTRIBUTE_SENTRY_OP]: "http.client" + } + }) : new SentryNonRecordingSpan(); + xhr.__sentry_xhr_span_id__ = span.spanContext().spanId; + spans[xhr.__sentry_xhr_span_id__] = span; + if (shouldAttachHeaders2(sentryXhrData.url)) { + addTracingHeadersToXhrRequest( + xhr, + // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction), + // we do not want to use the span as base for the trace headers, + // which means that the headers will be generated from the scope and the sampling decision is deferred + hasTracingEnabled() && hasParent ? span : void 0 + ); + } + return span; +} +__name(xhrCallback, "xhrCallback"); +function addTracingHeadersToXhrRequest(xhr, span) { + const { "sentry-trace": sentryTrace, baggage } = getTraceData({ span }); + if (sentryTrace) { + setHeaderOnXhr(xhr, sentryTrace, baggage); + } +} +__name(addTracingHeadersToXhrRequest, "addTracingHeadersToXhrRequest"); +function setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader) { + try { + xhr.setRequestHeader("sentry-trace", sentryTraceHeader); + if (sentryBaggageHeader) { + xhr.setRequestHeader("baggage", sentryBaggageHeader); + } + } catch (_2) { + } +} +__name(setHeaderOnXhr, "setHeaderOnXhr"); +function getFullURL(url) { + try { + const parsed = new URL(url, WINDOW$5.location.origin); + return parsed.href; + } catch (e2) { + return void 0; + } +} +__name(getFullURL, "getFullURL"); +function registerBackgroundTabDetection() { + if (WINDOW$5 && WINDOW$5.document) { + WINDOW$5.document.addEventListener("visibilitychange", () => { + const activeSpan = getActiveSpan(); + if (!activeSpan) { + return; + } + const rootSpan = getRootSpan(activeSpan); + if (WINDOW$5.document.hidden && rootSpan) { + const cancelledStatus = "cancelled"; + const { op, status } = spanToJSON(rootSpan); + if (DEBUG_BUILD$4) { + logger$2.log(`[Tracing] Transaction: ${cancelledStatus} -> since tab moved to the background, op: ${op}`); + } + if (!status) { + rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: cancelledStatus }); + } + rootSpan.setAttribute("sentry.cancellation_reason", "document.hidden"); + rootSpan.end(); + } + }); + } else { + DEBUG_BUILD$4 && logger$2.warn("[Tracing] Could not set up background tab detection due to lack of global document"); + } +} +__name(registerBackgroundTabDetection, "registerBackgroundTabDetection"); +const BROWSER_TRACING_INTEGRATION_ID = "BrowserTracing"; +const DEFAULT_BROWSER_TRACING_OPTIONS = { + ...TRACING_DEFAULTS, + instrumentNavigation: true, + instrumentPageLoad: true, + markBackgroundSpan: true, + enableLongTask: true, + enableLongAnimationFrame: true, + enableInp: true, + _experiments: {}, + ...defaultRequestInstrumentationOptions +}; +const browserTracingIntegration$1 = /* @__PURE__ */ __name((_options = {}) => { + registerSpanErrorInstrumentation(); + const { + enableInp, + enableLongTask, + enableLongAnimationFrame, + _experiments: { enableInteractions, enableStandaloneClsSpans }, + beforeStartSpan, + idleTimeout, + finalTimeout, + childSpanTimeout, + markBackgroundSpan, + traceFetch, + traceXHR, + trackFetchStreamPerformance, + shouldCreateSpanForRequest, + enableHTTPTimings, + instrumentPageLoad, + instrumentNavigation + } = { + ...DEFAULT_BROWSER_TRACING_OPTIONS, + ..._options + }; + const _collectWebVitals = startTrackingWebVitals({ recordClsStandaloneSpans: enableStandaloneClsSpans || false }); + if (enableInp) { + startTrackingINP(); + } + if (enableLongAnimationFrame && GLOBAL_OBJ.PerformanceObserver && PerformanceObserver.supportedEntryTypes && PerformanceObserver.supportedEntryTypes.includes("long-animation-frame")) { + startTrackingLongAnimationFrames(); + } else if (enableLongTask) { + startTrackingLongTasks(); + } + if (enableInteractions) { + startTrackingInteractions(); + } + const latestRoute = { + name: void 0, + source: void 0 + }; + function _createRouteSpan(client, startSpanOptions) { + const isPageloadTransaction = startSpanOptions.op === "pageload"; + const finalStartSpanOptions = beforeStartSpan ? beforeStartSpan(startSpanOptions) : startSpanOptions; + const attributes = finalStartSpanOptions.attributes || {}; + if (startSpanOptions.name !== finalStartSpanOptions.name) { + attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = "custom"; + finalStartSpanOptions.attributes = attributes; + } + latestRoute.name = finalStartSpanOptions.name; + latestRoute.source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]; + const idleSpan = startIdleSpan(finalStartSpanOptions, { + idleTimeout, + finalTimeout, + childSpanTimeout, + // should wait for finish signal if it's a pageload transaction + disableAutoFinish: isPageloadTransaction, + beforeSpanEnd: /* @__PURE__ */ __name((span) => { + _collectWebVitals(); + addPerformanceEntries(span, { recordClsOnPageloadSpan: !enableStandaloneClsSpans }); + }, "beforeSpanEnd") + }); + function emitFinish() { + if (["interactive", "complete"].includes(WINDOW$5.document.readyState)) { + client.emit("idleSpanEnableAutoFinish", idleSpan); + } + } + __name(emitFinish, "emitFinish"); + if (isPageloadTransaction && WINDOW$5.document) { + WINDOW$5.document.addEventListener("readystatechange", () => { + emitFinish(); + }); + emitFinish(); + } + return idleSpan; + } + __name(_createRouteSpan, "_createRouteSpan"); + return { + name: BROWSER_TRACING_INTEGRATION_ID, + afterAllSetup(client) { + let activeSpan; + let startingUrl = WINDOW$5.location && WINDOW$5.location.href; + function maybeEndActiveSpan() { + if (activeSpan && !spanToJSON(activeSpan).timestamp) { + DEBUG_BUILD$4 && logger$2.log(`[Tracing] Finishing current active span with op: ${spanToJSON(activeSpan).op}`); + activeSpan.end(); + } + } + __name(maybeEndActiveSpan, "maybeEndActiveSpan"); + client.on("startNavigationSpan", (startSpanOptions) => { + if (getClient() !== client) { + return; + } + maybeEndActiveSpan(); + activeSpan = _createRouteSpan(client, { + op: "navigation", + ...startSpanOptions + }); + }); + client.on("startPageLoadSpan", (startSpanOptions, traceOptions = {}) => { + if (getClient() !== client) { + return; + } + maybeEndActiveSpan(); + const sentryTrace = traceOptions.sentryTrace || getMetaContent("sentry-trace"); + const baggage = traceOptions.baggage || getMetaContent("baggage"); + const propagationContext = propagationContextFromHeaders(sentryTrace, baggage); + getCurrentScope$1().setPropagationContext(propagationContext); + activeSpan = _createRouteSpan(client, { + op: "pageload", + ...startSpanOptions + }); + }); + client.on("spanEnd", (span) => { + const op = spanToJSON(span).op; + if (span !== getRootSpan(span) || op !== "navigation" && op !== "pageload") { + return; + } + const scope = getCurrentScope$1(); + const oldPropagationContext = scope.getPropagationContext(); + scope.setPropagationContext({ + ...oldPropagationContext, + sampled: oldPropagationContext.sampled !== void 0 ? oldPropagationContext.sampled : spanIsSampled(span), + dsc: oldPropagationContext.dsc || getDynamicSamplingContextFromSpan(span) + }); + }); + if (WINDOW$5.location) { + if (instrumentPageLoad) { + startBrowserTracingPageLoadSpan(client, { + name: WINDOW$5.location.pathname, + // pageload should always start at timeOrigin (and needs to be in s, not ms) + startTime: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1e3 : void 0, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "url", + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.pageload.browser" + } + }); + } + if (instrumentNavigation) { + addHistoryInstrumentationHandler(({ to, from: from2 }) => { + if (from2 === void 0 && startingUrl && startingUrl.indexOf(to) !== -1) { + startingUrl = void 0; + return; + } + if (from2 !== to) { + startingUrl = void 0; + startBrowserTracingNavigationSpan(client, { + name: WINDOW$5.location.pathname, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "url", + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.navigation.browser" + } + }); + } + }); + } + } + if (markBackgroundSpan) { + registerBackgroundTabDetection(); + } + if (enableInteractions) { + registerInteractionListener(idleTimeout, finalTimeout, childSpanTimeout, latestRoute); + } + if (enableInp) { + registerInpInteractionListener(); + } + instrumentOutgoingRequests(client, { + traceFetch, + traceXHR, + trackFetchStreamPerformance, + tracePropagationTargets: client.getOptions().tracePropagationTargets, + shouldCreateSpanForRequest, + enableHTTPTimings + }); + } + }; +}, "browserTracingIntegration$1"); +function startBrowserTracingPageLoadSpan(client, spanOptions, traceOptions) { + client.emit("startPageLoadSpan", spanOptions, traceOptions); + getCurrentScope$1().setTransactionName(spanOptions.name); + const span = getActiveSpan(); + const op = span && spanToJSON(span).op; + return op === "pageload" ? span : void 0; +} +__name(startBrowserTracingPageLoadSpan, "startBrowserTracingPageLoadSpan"); +function startBrowserTracingNavigationSpan(client, spanOptions) { + getIsolationScope().setPropagationContext({ traceId: generateTraceId() }); + getCurrentScope$1().setPropagationContext({ traceId: generateTraceId() }); + client.emit("startNavigationSpan", spanOptions); + getCurrentScope$1().setTransactionName(spanOptions.name); + const span = getActiveSpan(); + const op = span && spanToJSON(span).op; + return op === "navigation" ? span : void 0; +} +__name(startBrowserTracingNavigationSpan, "startBrowserTracingNavigationSpan"); +function getMetaContent(metaName) { + const metaTag = getDomElement(`meta[name=${metaName}]`); + return metaTag ? metaTag.getAttribute("content") : void 0; +} +__name(getMetaContent, "getMetaContent"); +function registerInteractionListener(idleTimeout, finalTimeout, childSpanTimeout, latestRoute) { + let inflightInteractionSpan; + const registerInteractionTransaction = /* @__PURE__ */ __name(() => { + const op = "ui.action.click"; + const activeSpan = getActiveSpan(); + const rootSpan = activeSpan && getRootSpan(activeSpan); + if (rootSpan) { + const currentRootSpanOp = spanToJSON(rootSpan).op; + if (["navigation", "pageload"].includes(currentRootSpanOp)) { + DEBUG_BUILD$4 && logger$2.warn(`[Tracing] Did not create ${op} span because a pageload or navigation span is in progress.`); + return void 0; + } + } + if (inflightInteractionSpan) { + inflightInteractionSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, "interactionInterrupted"); + inflightInteractionSpan.end(); + inflightInteractionSpan = void 0; + } + if (!latestRoute.name) { + DEBUG_BUILD$4 && logger$2.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`); + return void 0; + } + inflightInteractionSpan = startIdleSpan( + { + name: latestRoute.name, + op, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: latestRoute.source || "url" + } + }, + { + idleTimeout, + finalTimeout, + childSpanTimeout + } + ); + }, "registerInteractionTransaction"); + if (WINDOW$5.document) { + addEventListener("click", registerInteractionTransaction, { once: false, capture: true }); + } +} +__name(registerInteractionListener, "registerInteractionListener"); +function promisifyRequest(request) { + return new Promise((resolve2, reject3) => { + request.oncomplete = request.onsuccess = () => resolve2(request.result); + request.onabort = request.onerror = () => reject3(request.error); + }); +} +__name(promisifyRequest, "promisifyRequest"); +function createStore(dbName, storeName) { + const request = indexedDB.open(dbName); + request.onupgradeneeded = () => request.result.createObjectStore(storeName); + const dbp = promisifyRequest(request); + return (callback) => dbp.then((db) => callback(db.transaction(storeName, "readwrite").objectStore(storeName))); +} +__name(createStore, "createStore"); +function keys$7(store) { + return promisifyRequest(store.getAllKeys()); +} +__name(keys$7, "keys$7"); +function push(store, value4, maxQueueSize) { + return store((store2) => { + return keys$7(store2).then((keys2) => { + if (keys2.length >= maxQueueSize) { + return; + } + store2.put(value4, Math.max(...keys2, 0) + 1); + return promisifyRequest(store2.transaction); + }); + }); +} +__name(push, "push"); +function unshift(store, value4, maxQueueSize) { + return store((store2) => { + return keys$7(store2).then((keys2) => { + if (keys2.length >= maxQueueSize) { + return; + } + store2.put(value4, Math.min(...keys2, 0) - 1); + return promisifyRequest(store2.transaction); + }); + }); +} +__name(unshift, "unshift"); +function shift$1(store) { + return store((store2) => { + return keys$7(store2).then((keys2) => { + const firstKey = keys2[0]; + if (firstKey == null) { + return void 0; + } + return promisifyRequest(store2.get(firstKey)).then((value4) => { + store2.delete(firstKey); + return promisifyRequest(store2.transaction).then(() => value4); + }); + }); + }); +} +__name(shift$1, "shift$1"); +function createIndexedDbStore(options4) { + let store; + function getStore() { + if (store == void 0) { + store = createStore(options4.dbName || "sentry-offline", options4.storeName || "queue"); + } + return store; + } + __name(getStore, "getStore"); + return { + push: /* @__PURE__ */ __name(async (env) => { + try { + const serialized = await serializeEnvelope(env); + await push(getStore(), serialized, options4.maxQueueSize || 30); + } catch (_2) { + } + }, "push"), + unshift: /* @__PURE__ */ __name(async (env) => { + try { + const serialized = await serializeEnvelope(env); + await unshift(getStore(), serialized, options4.maxQueueSize || 30); + } catch (_2) { + } + }, "unshift"), + shift: /* @__PURE__ */ __name(async () => { + try { + const deserialized = await shift$1(getStore()); + if (deserialized) { + return parseEnvelope(deserialized); + } + } catch (_2) { + } + return void 0; + }, "shift") + }; +} +__name(createIndexedDbStore, "createIndexedDbStore"); +function makeIndexedDbOfflineTransport(createTransport2) { + return (options4) => createTransport2({ ...options4, createStore: createIndexedDbStore }); +} +__name(makeIndexedDbOfflineTransport, "makeIndexedDbOfflineTransport"); +function makeBrowserOfflineTransport(createTransport2 = makeFetchTransport) { + return makeIndexedDbOfflineTransport(makeOfflineTransport(createTransport2)); +} +__name(makeBrowserOfflineTransport, "makeBrowserOfflineTransport"); +const MS_TO_NS = 1e6; +const THREAD_ID_STRING = String(0); +const THREAD_NAME = "main"; +let OS_PLATFORM = ""; +let OS_PLATFORM_VERSION = ""; +let OS_ARCH = ""; +let OS_BROWSER = WINDOW$5.navigator && WINDOW$5.navigator.userAgent || ""; +let OS_MODEL = ""; +const OS_LOCALE = WINDOW$5.navigator && WINDOW$5.navigator.language || WINDOW$5.navigator && WINDOW$5.navigator.languages && WINDOW$5.navigator.languages[0] || ""; +function isUserAgentData(data26) { + return typeof data26 === "object" && data26 !== null && "getHighEntropyValues" in data26; +} +__name(isUserAgentData, "isUserAgentData"); +const userAgentData = WINDOW$5.navigator && WINDOW$5.navigator.userAgentData; +if (isUserAgentData(userAgentData)) { + userAgentData.getHighEntropyValues(["architecture", "model", "platform", "platformVersion", "fullVersionList"]).then((ua) => { + OS_PLATFORM = ua.platform || ""; + OS_ARCH = ua.architecture || ""; + OS_MODEL = ua.model || ""; + OS_PLATFORM_VERSION = ua.platformVersion || ""; + if (ua.fullVersionList && ua.fullVersionList.length > 0) { + const firstUa = ua.fullVersionList[ua.fullVersionList.length - 1]; + OS_BROWSER = `${firstUa.brand} ${firstUa.version}`; + } + }).catch((e2) => void 0); +} +function isProcessedJSSelfProfile(profile) { + return !("thread_metadata" in profile); +} +__name(isProcessedJSSelfProfile, "isProcessedJSSelfProfile"); +function enrichWithThreadInformation(profile) { + if (!isProcessedJSSelfProfile(profile)) { + return profile; + } + return convertJSSelfProfileToSampledFormat(profile); +} +__name(enrichWithThreadInformation, "enrichWithThreadInformation"); +function getTraceId(event) { + const traceId = event && event.contexts && event.contexts["trace"] && event.contexts["trace"]["trace_id"]; + if (typeof traceId === "string" && traceId.length !== 32) { + if (DEBUG_BUILD$4) { + logger$2.log(`[Profiling] Invalid traceId: ${traceId} on profiled event`); + } + } + if (typeof traceId !== "string") { + return ""; + } + return traceId; +} +__name(getTraceId, "getTraceId"); +function createProfilePayload(profile_id, start_timestamp, processed_profile, event) { + if (event.type !== "transaction") { + throw new TypeError("Profiling events may only be attached to transactions, this should never occur."); + } + if (processed_profile === void 0 || processed_profile === null) { + throw new TypeError( + `Cannot construct profiling event envelope without a valid profile. Got ${processed_profile} instead.` + ); + } + const traceId = getTraceId(event); + const enrichedThreadProfile = enrichWithThreadInformation(processed_profile); + const transactionStartMs = start_timestamp ? start_timestamp : typeof event.start_timestamp === "number" ? event.start_timestamp * 1e3 : timestampInSeconds() * 1e3; + const transactionEndMs = typeof event.timestamp === "number" ? event.timestamp * 1e3 : timestampInSeconds() * 1e3; + const profile = { + event_id: profile_id, + timestamp: new Date(transactionStartMs).toISOString(), + platform: "javascript", + version: "1", + release: event.release || "", + environment: event.environment || DEFAULT_ENVIRONMENT, + runtime: { + name: "javascript", + version: WINDOW$5.navigator.userAgent + }, + os: { + name: OS_PLATFORM, + version: OS_PLATFORM_VERSION, + build_number: OS_BROWSER + }, + device: { + locale: OS_LOCALE, + model: OS_MODEL, + manufacturer: OS_BROWSER, + architecture: OS_ARCH, + is_emulator: false + }, + debug_meta: { + images: applyDebugMetadata(processed_profile.resources) + }, + profile: enrichedThreadProfile, + transactions: [ + { + name: event.transaction || "", + id: event.event_id || uuid4(), + trace_id: traceId, + active_thread_id: THREAD_ID_STRING, + relative_start_ns: "0", + relative_end_ns: ((transactionEndMs - transactionStartMs) * 1e6).toFixed(0) + } + ] + }; + return profile; +} +__name(createProfilePayload, "createProfilePayload"); +function isAutomatedPageLoadSpan(span) { + return spanToJSON(span).op === "pageload"; +} +__name(isAutomatedPageLoadSpan, "isAutomatedPageLoadSpan"); +function convertJSSelfProfileToSampledFormat(input) { + let EMPTY_STACK_ID = void 0; + let STACK_ID = 0; + const profile = { + samples: [], + stacks: [], + frames: [], + thread_metadata: { + [THREAD_ID_STRING]: { name: THREAD_NAME } + } + }; + const firstSample = input.samples[0]; + if (!firstSample) { + return profile; + } + const start2 = firstSample.timestamp; + const origin2 = typeof performance.timeOrigin === "number" ? performance.timeOrigin : browserPerformanceTimeOrigin || 0; + const adjustForOriginChange = origin2 - (browserPerformanceTimeOrigin || origin2); + input.samples.forEach((jsSample, i2) => { + if (jsSample.stackId === void 0) { + if (EMPTY_STACK_ID === void 0) { + EMPTY_STACK_ID = STACK_ID; + profile.stacks[EMPTY_STACK_ID] = []; + STACK_ID++; + } + profile["samples"][i2] = { + // convert ms timestamp to ns + elapsed_since_start_ns: ((jsSample.timestamp + adjustForOriginChange - start2) * MS_TO_NS).toFixed(0), + stack_id: EMPTY_STACK_ID, + thread_id: THREAD_ID_STRING + }; + return; + } + let stackTop = input.stacks[jsSample.stackId]; + const stack2 = []; + while (stackTop) { + stack2.push(stackTop.frameId); + const frame = input.frames[stackTop.frameId]; + if (frame && profile.frames[stackTop.frameId] === void 0) { + profile.frames[stackTop.frameId] = { + function: frame.name, + abs_path: typeof frame.resourceId === "number" ? input.resources[frame.resourceId] : void 0, + lineno: frame.line, + colno: frame.column + }; + } + stackTop = stackTop.parentId === void 0 ? void 0 : input.stacks[stackTop.parentId]; + } + const sample = { + // convert ms timestamp to ns + elapsed_since_start_ns: ((jsSample.timestamp + adjustForOriginChange - start2) * MS_TO_NS).toFixed(0), + stack_id: STACK_ID, + thread_id: THREAD_ID_STRING + }; + profile["stacks"][STACK_ID] = stack2; + profile["samples"][i2] = sample; + STACK_ID++; + }); + return profile; +} +__name(convertJSSelfProfileToSampledFormat, "convertJSSelfProfileToSampledFormat"); +function addProfilesToEnvelope(envelope, profiles) { + if (!profiles.length) { + return envelope; + } + for (const profile of profiles) { + envelope[1].push([{ type: "profile" }, profile]); + } + return envelope; +} +__name(addProfilesToEnvelope, "addProfilesToEnvelope"); +function findProfiledTransactionsFromEnvelope(envelope) { + const events2 = []; + forEachEnvelopeItem(envelope, (item3, type) => { + if (type !== "transaction") { + return; + } + for (let j2 = 1; j2 < item3.length; j2++) { + const event = item3[j2]; + if (event && event.contexts && event.contexts["profile"] && event.contexts["profile"]["profile_id"]) { + events2.push(item3[j2]); + } + } + }); + return events2; +} +__name(findProfiledTransactionsFromEnvelope, "findProfiledTransactionsFromEnvelope"); +function applyDebugMetadata(resource_paths) { + const client = getClient(); + const options4 = client && client.getOptions(); + const stackParser = options4 && options4.stackParser; + if (!stackParser) { + return []; + } + return getDebugImagesForResources(stackParser, resource_paths); +} +__name(applyDebugMetadata, "applyDebugMetadata"); +function isValidSampleRate(rate) { + if (typeof rate !== "number" && typeof rate !== "boolean" || typeof rate === "number" && isNaN(rate)) { + DEBUG_BUILD$4 && logger$2.warn( + `[Profiling] Invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify( + rate + )} of type ${JSON.stringify(typeof rate)}.` + ); + return false; + } + if (rate === true || rate === false) { + return true; + } + if (rate < 0 || rate > 1) { + DEBUG_BUILD$4 && logger$2.warn(`[Profiling] Invalid sample rate. Sample rate must be between 0 and 1. Got ${rate}.`); + return false; + } + return true; +} +__name(isValidSampleRate, "isValidSampleRate"); +function isValidProfile(profile) { + if (profile.samples.length < 2) { + if (DEBUG_BUILD$4) { + logger$2.log("[Profiling] Discarding profile because it contains less than 2 samples"); + } + return false; + } + if (!profile.frames.length) { + if (DEBUG_BUILD$4) { + logger$2.log("[Profiling] Discarding profile because it contains no frames"); + } + return false; + } + return true; +} +__name(isValidProfile, "isValidProfile"); +let PROFILING_CONSTRUCTOR_FAILED = false; +const MAX_PROFILE_DURATION_MS = 3e4; +function isJSProfilerSupported(maybeProfiler) { + return typeof maybeProfiler === "function"; +} +__name(isJSProfilerSupported, "isJSProfilerSupported"); +function startJSSelfProfile() { + const JSProfilerConstructor = WINDOW$5.Profiler; + if (!isJSProfilerSupported(JSProfilerConstructor)) { + if (DEBUG_BUILD$4) { + logger$2.log( + "[Profiling] Profiling is not supported by this browser, Profiler interface missing on window object." + ); + } + return; + } + const samplingIntervalMS = 10; + const maxSamples = Math.floor(MAX_PROFILE_DURATION_MS / samplingIntervalMS); + try { + return new JSProfilerConstructor({ sampleInterval: samplingIntervalMS, maxBufferSize: maxSamples }); + } catch (e2) { + if (DEBUG_BUILD$4) { + logger$2.log( + "[Profiling] Failed to initialize the Profiling constructor, this is likely due to a missing 'Document-Policy': 'js-profiling' header." + ); + logger$2.log("[Profiling] Disabling profiling for current user session."); + } + PROFILING_CONSTRUCTOR_FAILED = true; + } + return; +} +__name(startJSSelfProfile, "startJSSelfProfile"); +function shouldProfileSpan(span) { + if (PROFILING_CONSTRUCTOR_FAILED) { + if (DEBUG_BUILD$4) { + logger$2.log("[Profiling] Profiling has been disabled for the duration of the current user session."); + } + return false; + } + if (!span.isRecording()) { + if (DEBUG_BUILD$4) { + logger$2.log("[Profiling] Discarding profile because transaction was not sampled."); + } + return false; + } + const client = getClient(); + const options4 = client && client.getOptions(); + if (!options4) { + DEBUG_BUILD$4 && logger$2.log("[Profiling] Profiling disabled, no options found."); + return false; + } + const profilesSampleRate = options4.profilesSampleRate; + if (!isValidSampleRate(profilesSampleRate)) { + DEBUG_BUILD$4 && logger$2.warn("[Profiling] Discarding profile because of invalid sample rate."); + return false; + } + if (!profilesSampleRate) { + DEBUG_BUILD$4 && logger$2.log( + "[Profiling] Discarding profile because a negative sampling decision was inherited or profileSampleRate is set to 0" + ); + return false; + } + const sampled = profilesSampleRate === true ? true : Math.random() < profilesSampleRate; + if (!sampled) { + DEBUG_BUILD$4 && logger$2.log( + `[Profiling] Discarding profile because it's not included in the random sample (sampling rate = ${Number( + profilesSampleRate + )})` + ); + return false; + } + return true; +} +__name(shouldProfileSpan, "shouldProfileSpan"); +function createProfilingEvent(profile_id, start_timestamp, profile, event) { + if (!isValidProfile(profile)) { + return null; + } + return createProfilePayload(profile_id, start_timestamp, profile, event); +} +__name(createProfilingEvent, "createProfilingEvent"); +const PROFILE_MAP = /* @__PURE__ */ new Map(); +function getActiveProfilesCount() { + return PROFILE_MAP.size; +} +__name(getActiveProfilesCount, "getActiveProfilesCount"); +function takeProfileFromGlobalCache(profile_id) { + const profile = PROFILE_MAP.get(profile_id); + if (profile) { + PROFILE_MAP.delete(profile_id); + } + return profile; +} +__name(takeProfileFromGlobalCache, "takeProfileFromGlobalCache"); +function addProfileToGlobalCache(profile_id, profile) { + PROFILE_MAP.set(profile_id, profile); + if (PROFILE_MAP.size > 30) { + const last = PROFILE_MAP.keys().next().value; + PROFILE_MAP.delete(last); + } +} +__name(addProfileToGlobalCache, "addProfileToGlobalCache"); +function startProfileForSpan(span) { + let startTimestamp; + if (isAutomatedPageLoadSpan(span)) { + startTimestamp = timestampInSeconds() * 1e3; + } + const profiler2 = startJSSelfProfile(); + if (!profiler2) { + return; + } + if (DEBUG_BUILD$4) { + logger$2.log(`[Profiling] started profiling span: ${spanToJSON(span).description}`); + } + const profileId = uuid4(); + getCurrentScope$1().setContext("profile", { + profile_id: profileId, + start_timestamp: startTimestamp + }); + async function onProfileHandler() { + if (!span) { + return; + } + if (!profiler2) { + return; + } + return profiler2.stop().then((profile) => { + if (maxDurationTimeoutID) { + WINDOW$5.clearTimeout(maxDurationTimeoutID); + maxDurationTimeoutID = void 0; + } + if (DEBUG_BUILD$4) { + logger$2.log(`[Profiling] stopped profiling of span: ${spanToJSON(span).description}`); + } + if (!profile) { + if (DEBUG_BUILD$4) { + logger$2.log( + `[Profiling] profiler returned null profile for: ${spanToJSON(span).description}`, + "this may indicate an overlapping span or a call to stopProfiling with a profile title that was never started" + ); + } + return; + } + addProfileToGlobalCache(profileId, profile); + }).catch((error2) => { + if (DEBUG_BUILD$4) { + logger$2.log("[Profiling] error while stopping profiler:", error2); + } + }); + } + __name(onProfileHandler, "onProfileHandler"); + let maxDurationTimeoutID = WINDOW$5.setTimeout(() => { + if (DEBUG_BUILD$4) { + logger$2.log("[Profiling] max profile duration elapsed, stopping profiling for:", spanToJSON(span).description); + } + onProfileHandler(); + }, MAX_PROFILE_DURATION_MS); + const originalEnd = span.end.bind(span); + function profilingWrappedSpanEnd() { + if (!span) { + return originalEnd(); + } + void onProfileHandler().then( + () => { + originalEnd(); + }, + () => { + originalEnd(); + } + ); + return span; + } + __name(profilingWrappedSpanEnd, "profilingWrappedSpanEnd"); + span.end = profilingWrappedSpanEnd; +} +__name(startProfileForSpan, "startProfileForSpan"); +const INTEGRATION_NAME$2 = "BrowserProfiling"; +const _browserProfilingIntegration = /* @__PURE__ */ __name(() => { + return { + name: INTEGRATION_NAME$2, + setup(client) { + const activeSpan = getActiveSpan(); + const rootSpan = activeSpan && getRootSpan(activeSpan); + if (rootSpan && isAutomatedPageLoadSpan(rootSpan)) { + if (shouldProfileSpan(rootSpan)) { + startProfileForSpan(rootSpan); + } + } + client.on("spanStart", (span) => { + if (span === getRootSpan(span) && shouldProfileSpan(span)) { + startProfileForSpan(span); + } + }); + client.on("beforeEnvelope", (envelope) => { + if (!getActiveProfilesCount()) { + return; + } + const profiledTransactionEvents = findProfiledTransactionsFromEnvelope(envelope); + if (!profiledTransactionEvents.length) { + return; + } + const profilesToAddToEnvelope = []; + for (const profiledTransaction of profiledTransactionEvents) { + const context = profiledTransaction && profiledTransaction.contexts; + const profile_id = context && context["profile"] && context["profile"]["profile_id"]; + const start_timestamp = context && context["profile"] && context["profile"]["start_timestamp"]; + if (typeof profile_id !== "string") { + DEBUG_BUILD$4 && logger$2.log("[Profiling] cannot find profile for a span without a profile context"); + continue; + } + if (!profile_id) { + DEBUG_BUILD$4 && logger$2.log("[Profiling] cannot find profile for a span without a profile context"); + continue; + } + if (context && context["profile"]) { + delete context.profile; + } + const profile = takeProfileFromGlobalCache(profile_id); + if (!profile) { + DEBUG_BUILD$4 && logger$2.log(`[Profiling] Could not retrieve profile for span: ${profile_id}`); + continue; + } + const profileEvent = createProfilingEvent( + profile_id, + start_timestamp, + profile, + profiledTransaction + ); + if (profileEvent) { + profilesToAddToEnvelope.push(profileEvent); + } + } + addProfilesToEnvelope(envelope, profilesToAddToEnvelope); + }); + } + }; +}, "_browserProfilingIntegration"); +const browserProfilingIntegration = defineIntegration(_browserProfilingIntegration); +const INTEGRATION_NAME$1 = "SpotlightBrowser"; +const _spotlightIntegration = /* @__PURE__ */ __name((options4 = {}) => { + const sidecarUrl = options4.sidecarUrl || "http://localhost:8969/stream"; + return { + name: INTEGRATION_NAME$1, + setup: /* @__PURE__ */ __name(() => { + DEBUG_BUILD$4 && logger$2.log("Using Sidecar URL", sidecarUrl); + }, "setup"), + // We don't want to send interaction transactions/root spans created from + // clicks within Spotlight to Sentry. Neither do we want them to be sent to + // spotlight. + processEvent: /* @__PURE__ */ __name((event) => isSpotlightInteraction(event) ? null : event, "processEvent"), + afterAllSetup: /* @__PURE__ */ __name((client) => { + setupSidecarForwarding(client, sidecarUrl); + }, "afterAllSetup") + }; +}, "_spotlightIntegration"); +function setupSidecarForwarding(client, sidecarUrl) { + const makeFetch = getNativeImplementation("fetch"); + let failCount = 0; + client.on("beforeEnvelope", (envelope) => { + if (failCount > 3) { + logger$2.warn("[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests:", failCount); + return; + } + makeFetch(sidecarUrl, { + method: "POST", + body: serializeEnvelope(envelope), + headers: { + "Content-Type": "application/x-sentry-envelope" + }, + mode: "cors" + }).then( + (res) => { + if (res.status >= 200 && res.status < 400) { + failCount = 0; + } + }, + (err) => { + failCount++; + logger$2.error( + "Sentry SDK can't connect to Sidecar is it running? See: https://spotlightjs.com/sidecar/npx/", + err + ); + } + ); + }); +} +__name(setupSidecarForwarding, "setupSidecarForwarding"); +const spotlightBrowserIntegration = defineIntegration(_spotlightIntegration); +function isSpotlightInteraction(event) { + return Boolean( + event.type === "transaction" && event.spans && event.contexts && event.contexts.trace && event.contexts.trace.op === "ui.action.click" && event.spans.some(({ description }) => description && description.includes("#sentry-spotlight")) + ); +} +__name(isSpotlightInteraction, "isSpotlightInteraction"); +const FLAG_BUFFER_SIZE = 100; +function copyFlagsFromScopeToEvent(event) { + const scope = getCurrentScope$1(); + const flagContext = scope.getScopeData().contexts.flags; + const flagBuffer = flagContext ? flagContext.values : []; + if (!flagBuffer.length) { + return event; + } + if (event.contexts === void 0) { + event.contexts = {}; + } + event.contexts.flags = { values: [...flagBuffer] }; + return event; +} +__name(copyFlagsFromScopeToEvent, "copyFlagsFromScopeToEvent"); +function insertFlagToScope(name2, value4, maxSize = FLAG_BUFFER_SIZE) { + const scopeContexts = getCurrentScope$1().getScopeData().contexts; + if (!scopeContexts.flags) { + scopeContexts.flags = { values: [] }; + } + const flags = scopeContexts.flags.values; + insertToFlagBuffer(flags, name2, value4, maxSize); +} +__name(insertFlagToScope, "insertFlagToScope"); +function insertToFlagBuffer(flags, name2, value4, maxSize) { + if (typeof value4 !== "boolean") { + return; + } + if (flags.length > maxSize) { + DEBUG_BUILD$4 && logger$2.error(`[Feature Flags] insertToFlagBuffer called on a buffer larger than maxSize=${maxSize}`); + return; + } + const index2 = flags.findIndex((f2) => f2.flag === name2); + if (index2 !== -1) { + flags.splice(index2, 1); + } + if (flags.length === maxSize) { + flags.shift(); + } + flags.push({ + flag: name2, + result: value4 + }); +} +__name(insertToFlagBuffer, "insertToFlagBuffer"); +const featureFlagsIntegration = defineIntegration(() => { + return { + name: "FeatureFlags", + processEvent(event, _hint, _client) { + return copyFlagsFromScopeToEvent(event); + }, + addFeatureFlag(name2, value4) { + insertFlagToScope(name2, value4); + } + }; +}); +const launchDarklyIntegration = defineIntegration(() => { + return { + name: "LaunchDarkly", + processEvent(event, _hint, _client) { + return copyFlagsFromScopeToEvent(event); + } + }; +}); +function buildLaunchDarklyFlagUsedHandler() { + return { + name: "sentry-flag-auditor", + type: "flag-used", + synchronous: true, + /** + * Handle a flag evaluation by storing its name and value on the current scope. + */ + method: /* @__PURE__ */ __name((flagKey, flagDetail, _context) => { + insertFlagToScope(flagKey, flagDetail.value); + }, "method") + }; +} +__name(buildLaunchDarklyFlagUsedHandler, "buildLaunchDarklyFlagUsedHandler"); +const openFeatureIntegration = defineIntegration(() => { + return { + name: "OpenFeature", + processEvent(event, _hint, _client) { + return copyFlagsFromScopeToEvent(event); + } + }; +}); +class OpenFeatureIntegrationHook { + static { + __name(this, "OpenFeatureIntegrationHook"); + } + /** + * Successful evaluation result. + */ + after(_hookContext, evaluationDetails) { + insertFlagToScope(evaluationDetails.flagKey, evaluationDetails.value); + } + /** + * On error evaluation result. + */ + error(hookContext, _error, _hookHints) { + insertFlagToScope(hookContext.flagKey, hookContext.defaultValue); + } +} +const DEFAULT_HOOKS = ["activate", "mount", "update"]; +const DEBUG_BUILD = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; +const classifyRE$1 = /(?:^|[-_])(\w)/g; +const classify$1 = /* @__PURE__ */ __name((str) => str.replace(classifyRE$1, (c2) => c2.toUpperCase()).replace(/[-_]/g, ""), "classify$1"); +const ROOT_COMPONENT_NAME = ""; +const ANONYMOUS_COMPONENT_NAME = ""; +const repeat = /* @__PURE__ */ __name((str, n2) => { + return str.repeat(n2); +}, "repeat"); +const formatComponentName$1 = /* @__PURE__ */ __name((vm, includeFile) => { + if (!vm) { + return ANONYMOUS_COMPONENT_NAME; + } + if (vm.$root === vm) { + return ROOT_COMPONENT_NAME; + } + if (!vm.$options) { + return ANONYMOUS_COMPONENT_NAME; + } + const options4 = vm.$options; + let name2 = options4.name || options4._componentTag || options4.__name; + const file = options4.__file; + if (!name2 && file) { + const match2 = file.match(/([^/\\]+)\.vue$/); + if (match2) { + name2 = match2[1]; + } + } + return (name2 ? `<${classify$1(name2)}>` : ANONYMOUS_COMPONENT_NAME) + (file && includeFile !== false ? ` at ${file}` : ""); +}, "formatComponentName$1"); +const generateComponentTrace = /* @__PURE__ */ __name((vm) => { + if (vm && (vm._isVue || vm.__isVue) && vm.$parent) { + const tree = []; + let currentRecursiveSequence = 0; + while (vm) { + if (tree.length > 0) { + const last = tree[tree.length - 1]; + if (last.constructor === vm.constructor) { + currentRecursiveSequence++; + vm = vm.$parent; + continue; + } else if (currentRecursiveSequence > 0) { + tree[tree.length - 1] = [last, currentRecursiveSequence]; + currentRecursiveSequence = 0; + } + } + tree.push(vm); + vm = vm.$parent; + } + const formattedTree = tree.map( + (vm2, i2) => `${(i2 === 0 ? "---> " : repeat(" ", 5 + i2 * 2)) + (Array.isArray(vm2) ? `${formatComponentName$1(vm2[0])}... (${vm2[1]} recursive calls)` : formatComponentName$1(vm2))}` + ).join("\n"); + return ` + +found in + +${formattedTree}`; + } + return ` + +(found in ${formatComponentName$1(vm)})`; +}, "generateComponentTrace"); +const attachErrorHandler = /* @__PURE__ */ __name((app2, options4) => { + const { errorHandler: originalErrorHandler, warnHandler, silent } = app2.config; + app2.config.errorHandler = (error2, vm, lifecycleHook) => { + const componentName = formatComponentName$1(vm, false); + const trace = vm ? generateComponentTrace(vm) : ""; + const metadata = { + componentName, + lifecycleHook, + trace + }; + if (options4.attachProps && vm) { + if (vm.$options && vm.$options.propsData) { + metadata.propsData = vm.$options.propsData; + } else if (vm.$props) { + metadata.propsData = vm.$props; + } + } + setTimeout(() => { + captureException(error2, { + captureContext: { contexts: { vue: metadata } }, + mechanism: { handled: false } + }); + }); + if (typeof originalErrorHandler === "function" && app2.config.errorHandler) { + originalErrorHandler.call(app2, error2, vm, lifecycleHook); + } + if (options4.logErrors) { + const hasConsole = typeof console !== "undefined"; + const message3 = `Error in ${lifecycleHook}: "${error2 && error2.toString()}"`; + if (warnHandler) { + warnHandler.call(null, message3, vm, trace); + } else if (hasConsole && !silent) { + consoleSandbox(() => { + console.error(`[Vue warn]: ${message3}${trace}`); + }); + } + } + }; +}, "attachErrorHandler"); +const VUE_OP = "ui.vue"; +const HOOKS = { + activate: ["activated", "deactivated"], + create: ["beforeCreate", "created"], + // Vue 3 + unmount: ["beforeUnmount", "unmounted"], + // Vue 2 + destroy: ["beforeDestroy", "destroyed"], + mount: ["beforeMount", "mounted"], + update: ["beforeUpdate", "updated"] +}; +function finishRootSpan(vm, timestamp2, timeout) { + if (vm.$_sentryRootSpanTimer) { + clearTimeout(vm.$_sentryRootSpanTimer); + } + vm.$_sentryRootSpanTimer = setTimeout(() => { + if (vm.$root && vm.$root.$_sentryRootSpan) { + vm.$root.$_sentryRootSpan.end(timestamp2); + vm.$root.$_sentryRootSpan = void 0; + } + }, timeout); +} +__name(finishRootSpan, "finishRootSpan"); +function findTrackComponent(trackComponents, formattedName) { + function extractComponentName(name2) { + return name2.replace(/^<([^\s]*)>(?: at [^\s]*)?$/, "$1"); + } + __name(extractComponentName, "extractComponentName"); + const isMatched = trackComponents.some((compo) => { + return extractComponentName(formattedName) === extractComponentName(compo); + }); + return isMatched; +} +__name(findTrackComponent, "findTrackComponent"); +const createTracingMixins = /* @__PURE__ */ __name((options4) => { + const hooks2 = (options4.hooks || []).concat(DEFAULT_HOOKS).filter((value4, index2, self2) => self2.indexOf(value4) === index2); + const mixins = {}; + for (const operation of hooks2) { + const internalHooks = HOOKS[operation]; + if (!internalHooks) { + DEBUG_BUILD && logger$2.warn(`Unknown hook: ${operation}`); + continue; + } + for (const internalHook of internalHooks) { + mixins[internalHook] = function() { + const isRoot = this.$root === this; + if (isRoot) { + this.$_sentryRootSpan = this.$_sentryRootSpan || startInactiveSpan({ + name: "Application Render", + op: `${VUE_OP}.render`, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.ui.vue" + }, + onlyIfParent: true + }); + } + const name2 = formatComponentName$1(this, false); + const shouldTrack2 = Array.isArray(options4.trackComponents) ? findTrackComponent(options4.trackComponents, name2) : options4.trackComponents; + if (!isRoot && !shouldTrack2) { + return; + } + this.$_sentrySpans = this.$_sentrySpans || {}; + if (internalHook == internalHooks[0]) { + const activeSpan = this.$root && this.$root.$_sentryRootSpan || getActiveSpan(); + if (activeSpan) { + const oldSpan = this.$_sentrySpans[operation]; + if (oldSpan) { + oldSpan.end(); + } + this.$_sentrySpans[operation] = startInactiveSpan({ + name: `Vue ${name2}`, + op: `${VUE_OP}.${operation}`, + attributes: { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.ui.vue" + }, + // UI spans should only be created if there is an active root span (transaction) + onlyIfParent: true + }); + } + } else { + const span = this.$_sentrySpans[operation]; + if (!span) return; + span.end(); + finishRootSpan(this, timestampInSeconds(), options4.timeout); + } + }; + } + } + return mixins; +}, "createTracingMixins"); +const globalWithVue = GLOBAL_OBJ; +const DEFAULT_CONFIG = { + Vue: globalWithVue.Vue, + attachProps: true, + logErrors: true, + attachErrorHandler: true, + hooks: DEFAULT_HOOKS, + timeout: 2e3, + trackComponents: false +}; +const INTEGRATION_NAME = "Vue"; +const vueIntegration = defineIntegration((integrationOptions = {}) => { + return { + name: INTEGRATION_NAME, + setup(client) { + const options4 = { ...DEFAULT_CONFIG, ...client.getOptions(), ...integrationOptions }; + if (!options4.Vue && !options4.app) { + consoleSandbox(() => { + console.warn( + "[@sentry/vue]: Misconfigured SDK. Vue specific errors will not be captured. Update your `Sentry.init` call with an appropriate config option: `app` (Application Instance - Vue 3) or `Vue` (Vue Constructor - Vue 2)." + ); + }); + return; + } + if (options4.app) { + const apps = Array.isArray(options4.app) ? options4.app : [options4.app]; + apps.forEach((app2) => vueInit(app2, options4)); + } else if (options4.Vue) { + vueInit(options4.Vue, options4); + } + } + }; +}); +const vueInit = /* @__PURE__ */ __name((app2, options4) => { + if (DEBUG_BUILD) { + const appWithInstance = app2; + const isMounted = appWithInstance._instance && appWithInstance._instance.isMounted; + if (isMounted === true) { + consoleSandbox(() => { + console.warn( + "[@sentry/vue]: Misconfigured SDK. Vue app is already mounted. Make sure to call `app.mount()` after `Sentry.init()`." + ); + }); + } + } + if (options4.attachErrorHandler) { + attachErrorHandler(app2, options4); + } + if (hasTracingEnabled(options4)) { + app2.mixin( + createTracingMixins({ + ...options4, + // eslint-disable-next-line deprecation/deprecation + ...options4.tracingOptions + }) + ); + } +}, "vueInit"); +function init$3(config2 = {}) { + const options4 = { + _metadata: { + sdk: { + name: "sentry.javascript.vue", + packages: [ + { + name: "npm:@sentry/vue", + version: SDK_VERSION + } + ], + version: SDK_VERSION + } + }, + defaultIntegrations: [...getDefaultIntegrations(config2), vueIntegration()], + ...config2 + }; + return init$4(options4); +} +__name(init$3, "init$3"); +function instrumentVueRouter(router2, options4, startNavigationSpanFn) { + let isFirstPageLoad = true; + router2.onError((error2) => captureException(error2, { mechanism: { handled: false } })); + router2.beforeEach((to, from2, next2) => { + const isPageLoadNavigation = from2.name == null && from2.matched.length === 0 || from2.name === void 0 && isFirstPageLoad; + if (isFirstPageLoad) { + isFirstPageLoad = false; + } + const attributes = { + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.navigation.vue" + }; + for (const key of Object.keys(to.params)) { + attributes[`params.${key}`] = to.params[key]; + } + for (const key of Object.keys(to.query)) { + const value4 = to.query[key]; + if (value4) { + attributes[`query.${key}`] = value4; + } + } + let spanName = to.path; + let transactionSource = "url"; + if (to.name && options4.routeLabel !== "path") { + spanName = to.name.toString(); + transactionSource = "custom"; + } else if (to.matched.length > 0) { + const lastIndex2 = to.matched.length - 1; + spanName = to.matched[lastIndex2].path; + transactionSource = "route"; + } + getCurrentScope$1().setTransactionName(spanName); + if (options4.instrumentPageLoad && isPageLoadNavigation) { + const activeRootSpan = getActiveRootSpan(); + if (activeRootSpan) { + const existingAttributes = spanToJSON(activeRootSpan).data || {}; + if (existingAttributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] !== "custom") { + activeRootSpan.updateName(spanName); + activeRootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, transactionSource); + } + activeRootSpan.setAttributes({ + ...attributes, + [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.pageload.vue" + }); + } + } + if (options4.instrumentNavigation && !isPageLoadNavigation) { + attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = transactionSource; + attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] = "auto.navigation.vue"; + startNavigationSpanFn({ + name: spanName, + op: "navigation", + attributes + }); + } + if (next2) { + next2(); + } + }); +} +__name(instrumentVueRouter, "instrumentVueRouter"); +function getActiveRootSpan() { + const span = getActiveSpan(); + const rootSpan = span && getRootSpan(span); + if (!rootSpan) { + return void 0; + } + const op = spanToJSON(rootSpan).op; + return op === "navigation" || op === "pageload" ? rootSpan : void 0; +} +__name(getActiveRootSpan, "getActiveRootSpan"); +function browserTracingIntegration(options4 = {}) { + if (!options4.router) { + return browserTracingIntegration$1(options4); + } + const integration = browserTracingIntegration$1({ + ...options4, + instrumentNavigation: false + }); + const { router: router2, instrumentNavigation = true, instrumentPageLoad = true, routeLabel = "name" } = options4; + return { + ...integration, + afterAllSetup(client) { + integration.afterAllSetup(client); + const startNavigationSpan = /* @__PURE__ */ __name((options5) => { + startBrowserTracingNavigationSpan(client, options5); + }, "startNavigationSpan"); + instrumentVueRouter(router2, { routeLabel, instrumentNavigation, instrumentPageLoad }, startNavigationSpan); + } + }; +} +__name(browserTracingIntegration, "browserTracingIntegration"); +const createSentryPiniaPlugin = /* @__PURE__ */ __name((options4 = { + attachPiniaState: true, + addBreadcrumbs: true, + actionTransformer: /* @__PURE__ */ __name((action) => action, "actionTransformer"), + stateTransformer: /* @__PURE__ */ __name((state) => state, "stateTransformer") +}) => { + const plugin = /* @__PURE__ */ __name(({ store }) => { + options4.attachPiniaState !== false && getGlobalScope().addEventProcessor((event, hint) => { + try { + const timestamp2 = (/* @__PURE__ */ new Date()).toTimeString().split(" ")[0]; + const filename = `pinia_state_${store.$id}_${timestamp2}.json`; + hint.attachments = [ + ...hint.attachments || [], + { + filename, + data: JSON.stringify(store.$state) + } + ]; + } catch (_2) { + } + return event; + }); + store.$onAction((context) => { + context.after(() => { + const transformedActionName = options4.actionTransformer ? options4.actionTransformer(context.name) : context.name; + if (typeof transformedActionName !== "undefined" && transformedActionName !== null && options4.addBreadcrumbs !== false) { + addBreadcrumb({ + category: "action", + message: transformedActionName, + level: "info" + }); + } + const transformedState = options4.stateTransformer ? options4.stateTransformer(store.$state) : store.$state; + const scope = getCurrentScope$1(); + const currentState = scope.getScopeData().contexts.state; + if (typeof transformedState !== "undefined" && transformedState !== null) { + const client = getClient(); + const options5 = client && client.getOptions(); + const normalizationDepth = options5 && options5.normalizeDepth || 3; + const piniaStateContext = { type: "pinia", value: transformedState }; + const newState = { + ...currentState || {}, + state: piniaStateContext + }; + addNonEnumerableProperty( + newState, + "__sentry_override_normalization_depth__", + 3 + // 3 layers for `state.value.transformedState + normalizationDepth + // rest for the actual state + ); + scope.setContext("state", newState); + } else { + scope.setContext("state", { + ...currentState || {}, + state: { type: "pinia", value: "undefined" } + }); + } + }); + }); + }, "plugin"); + return plugin; +}, "createSentryPiniaPlugin"); +/** +* @vue/shared v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +/*! #__NO_SIDE_EFFECTS__ */ +// @__NO_SIDE_EFFECTS__ +function makeMap(str) { + const map3 = /* @__PURE__ */ Object.create(null); + for (const key of str.split(",")) map3[key] = 1; + return (val) => val in map3; +} +__name(makeMap, "makeMap"); +const EMPTY_OBJ = false ? Object.freeze({}) : {}; +const EMPTY_ARR = false ? Object.freeze([]) : []; +const NOOP = /* @__PURE__ */ __name(() => { +}, "NOOP"); +const NO = /* @__PURE__ */ __name(() => false, "NO"); +const isOn = /* @__PURE__ */ __name((key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter +(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97), "isOn"); +const isModelListener = /* @__PURE__ */ __name((key) => key.startsWith("onUpdate:"), "isModelListener"); +const extend$1 = Object.assign; +const remove$2 = /* @__PURE__ */ __name((arr, el) => { + const i2 = arr.indexOf(el); + if (i2 > -1) { + arr.splice(i2, 1); + } +}, "remove$2"); +const hasOwnProperty$d = Object.prototype.hasOwnProperty; +const hasOwn$3 = /* @__PURE__ */ __name((val, key) => hasOwnProperty$d.call(val, key), "hasOwn$3"); +const isArray$b = Array.isArray; +const isMap$3 = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object Map]", "isMap$3"); +const isSet$3 = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object Set]", "isSet$3"); +const isDate$4 = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object Date]", "isDate$4"); +const isRegExp$4 = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object RegExp]", "isRegExp$4"); +const isFunction$c = /* @__PURE__ */ __name((val) => typeof val === "function", "isFunction$c"); +const isString$9 = /* @__PURE__ */ __name((val) => typeof val === "string", "isString$9"); +const isSymbol$1 = /* @__PURE__ */ __name((val) => typeof val === "symbol", "isSymbol$1"); +const isObject$f = /* @__PURE__ */ __name((val) => val !== null && typeof val === "object", "isObject$f"); +const isPromise$1 = /* @__PURE__ */ __name((val) => { + return (isObject$f(val) || isFunction$c(val)) && isFunction$c(val.then) && isFunction$c(val.catch); +}, "isPromise$1"); +const objectToString$3 = Object.prototype.toString; +const toTypeString$1 = /* @__PURE__ */ __name((value4) => objectToString$3.call(value4), "toTypeString$1"); +const toRawType = /* @__PURE__ */ __name((value4) => { + return toTypeString$1(value4).slice(8, -1); +}, "toRawType"); +const isPlainObject$4 = /* @__PURE__ */ __name((val) => toTypeString$1(val) === "[object Object]", "isPlainObject$4"); +const isIntegerKey = /* @__PURE__ */ __name((key) => isString$9(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key, "isIntegerKey"); +const isReservedProp = /* @__PURE__ */ makeMap( + // the leading comma is intentional so empty string "" is also included + ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" +); +const isBuiltInDirective = /* @__PURE__ */ makeMap( + "bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo" +); +const cacheStringFunction$1 = /* @__PURE__ */ __name((fn) => { + const cache2 = /* @__PURE__ */ Object.create(null); + return (str) => { + const hit = cache2[str]; + return hit || (cache2[str] = fn(str)); + }; +}, "cacheStringFunction$1"); +const camelizeRE$1 = /-(\w)/g; +const camelize$1 = cacheStringFunction$1( + (str) => { + return str.replace(camelizeRE$1, (_2, c2) => c2 ? c2.toUpperCase() : ""); + } +); +const hyphenateRE$1 = /\B([A-Z])/g; +const hyphenate$1 = cacheStringFunction$1( + (str) => str.replace(hyphenateRE$1, "-$1").toLowerCase() +); +const capitalize$1 = cacheStringFunction$1((str) => { + return str.charAt(0).toUpperCase() + str.slice(1); +}); +const toHandlerKey = cacheStringFunction$1( + (str) => { + const s2 = str ? `on${capitalize$1(str)}` : ``; + return s2; + } +); +const hasChanged = /* @__PURE__ */ __name((value4, oldValue2) => !Object.is(value4, oldValue2), "hasChanged"); +const invokeArrayFns = /* @__PURE__ */ __name((fns, ...arg) => { + for (let i2 = 0; i2 < fns.length; i2++) { + fns[i2](...arg); + } +}, "invokeArrayFns"); +const def = /* @__PURE__ */ __name((obj, key, value4, writable = false) => { + Object.defineProperty(obj, key, { + configurable: true, + enumerable: false, + writable, + value: value4 + }); +}, "def"); +const looseToNumber = /* @__PURE__ */ __name((val) => { + const n2 = parseFloat(val); + return isNaN(n2) ? val : n2; +}, "looseToNumber"); +const toNumber = /* @__PURE__ */ __name((val) => { + const n2 = isString$9(val) ? Number(val) : NaN; + return isNaN(n2) ? val : n2; +}, "toNumber"); +let _globalThis$1; +const getGlobalThis$1 = /* @__PURE__ */ __name(() => { + return _globalThis$1 || (_globalThis$1 = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); +}, "getGlobalThis$1"); +const identRE = /^[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*$/; +function genPropsAccessExp(name2) { + return identRE.test(name2) ? `__props.${name2}` : `__props[${JSON.stringify(name2)}]`; +} +__name(genPropsAccessExp, "genPropsAccessExp"); +function genCacheKey(source, options4) { + return source + JSON.stringify( + options4, + (_2, val) => typeof val === "function" ? val.toString() : val + ); +} +__name(genCacheKey, "genCacheKey"); +const PatchFlags = { + "TEXT": 1, + "1": "TEXT", + "CLASS": 2, + "2": "CLASS", + "STYLE": 4, + "4": "STYLE", + "PROPS": 8, + "8": "PROPS", + "FULL_PROPS": 16, + "16": "FULL_PROPS", + "NEED_HYDRATION": 32, + "32": "NEED_HYDRATION", + "STABLE_FRAGMENT": 64, + "64": "STABLE_FRAGMENT", + "KEYED_FRAGMENT": 128, + "128": "KEYED_FRAGMENT", + "UNKEYED_FRAGMENT": 256, + "256": "UNKEYED_FRAGMENT", + "NEED_PATCH": 512, + "512": "NEED_PATCH", + "DYNAMIC_SLOTS": 1024, + "1024": "DYNAMIC_SLOTS", + "DEV_ROOT_FRAGMENT": 2048, + "2048": "DEV_ROOT_FRAGMENT", + "CACHED": -1, + "-1": "CACHED", + "BAIL": -2, + "-2": "BAIL" +}; +const PatchFlagNames = { + [1]: `TEXT`, + [2]: `CLASS`, + [4]: `STYLE`, + [8]: `PROPS`, + [16]: `FULL_PROPS`, + [32]: `NEED_HYDRATION`, + [64]: `STABLE_FRAGMENT`, + [128]: `KEYED_FRAGMENT`, + [256]: `UNKEYED_FRAGMENT`, + [512]: `NEED_PATCH`, + [1024]: `DYNAMIC_SLOTS`, + [2048]: `DEV_ROOT_FRAGMENT`, + [-1]: `HOISTED`, + [-2]: `BAIL` +}; +const ShapeFlags = { + "ELEMENT": 1, + "1": "ELEMENT", + "FUNCTIONAL_COMPONENT": 2, + "2": "FUNCTIONAL_COMPONENT", + "STATEFUL_COMPONENT": 4, + "4": "STATEFUL_COMPONENT", + "TEXT_CHILDREN": 8, + "8": "TEXT_CHILDREN", + "ARRAY_CHILDREN": 16, + "16": "ARRAY_CHILDREN", + "SLOTS_CHILDREN": 32, + "32": "SLOTS_CHILDREN", + "TELEPORT": 64, + "64": "TELEPORT", + "SUSPENSE": 128, + "128": "SUSPENSE", + "COMPONENT_SHOULD_KEEP_ALIVE": 256, + "256": "COMPONENT_SHOULD_KEEP_ALIVE", + "COMPONENT_KEPT_ALIVE": 512, + "512": "COMPONENT_KEPT_ALIVE", + "COMPONENT": 6, + "6": "COMPONENT" +}; +const SlotFlags = { + "STABLE": 1, + "1": "STABLE", + "DYNAMIC": 2, + "2": "DYNAMIC", + "FORWARDED": 3, + "3": "FORWARDED" +}; +const slotFlagsText = { + [1]: "STABLE", + [2]: "DYNAMIC", + [3]: "FORWARDED" +}; +const GLOBALS_ALLOWED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol"; +const isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED); +const isGloballyWhitelisted = isGloballyAllowed; +const range = 2; +function generateCodeFrame$1(source, start2 = 0, end = source.length) { + start2 = Math.max(0, Math.min(start2, source.length)); + end = Math.max(0, Math.min(end, source.length)); + if (start2 > end) return ""; + let lines = source.split(/(\r?\n)/); + const newlineSequences = lines.filter((_2, idx) => idx % 2 === 1); + lines = lines.filter((_2, idx) => idx % 2 === 0); + let count = 0; + const res = []; + for (let i2 = 0; i2 < lines.length; i2++) { + count += lines[i2].length + (newlineSequences[i2] && newlineSequences[i2].length || 0); + if (count >= start2) { + for (let j2 = i2 - range; j2 <= i2 + range || end > count; j2++) { + if (j2 < 0 || j2 >= lines.length) continue; + const line = j2 + 1; + res.push( + `${line}${" ".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j2]}` + ); + const lineLength = lines[j2].length; + const newLineSeqLength = newlineSequences[j2] && newlineSequences[j2].length || 0; + if (j2 === i2) { + const pad = start2 - (count - (lineLength + newLineSeqLength)); + const length = Math.max( + 1, + end > count ? lineLength - pad : end - start2 + ); + res.push(` | ` + " ".repeat(pad) + "^".repeat(length)); + } else if (j2 > i2) { + if (end > count) { + const length = Math.max(Math.min(end - count, lineLength), 1); + res.push(` | ` + "^".repeat(length)); + } + count += lineLength + newLineSeqLength; + } + } + break; + } + } + return res.join("\n"); +} +__name(generateCodeFrame$1, "generateCodeFrame$1"); +function normalizeStyle(value4) { + if (isArray$b(value4)) { + const res = {}; + for (let i2 = 0; i2 < value4.length; i2++) { + const item3 = value4[i2]; + const normalized = isString$9(item3) ? parseStringStyle(item3) : normalizeStyle(item3); + if (normalized) { + for (const key in normalized) { + res[key] = normalized[key]; + } + } + } + return res; + } else if (isString$9(value4) || isObject$f(value4)) { + return value4; + } +} +__name(normalizeStyle, "normalizeStyle"); +const listDelimiterRE = /;(?![^(]*\))/g; +const propertyDelimiterRE = /:([^]+)/; +const styleCommentRE = /\/\*[^]*?\*\//g; +function parseStringStyle(cssText) { + const ret = {}; + cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item3) => { + if (item3) { + const tmp = item3.split(propertyDelimiterRE); + tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); + } + }); + return ret; +} +__name(parseStringStyle, "parseStringStyle"); +function stringifyStyle(styles) { + if (!styles) return ""; + if (isString$9(styles)) return styles; + let ret = ""; + for (const key in styles) { + const value4 = styles[key]; + if (isString$9(value4) || typeof value4 === "number") { + const normalizedKey = key.startsWith(`--`) ? key : hyphenate$1(key); + ret += `${normalizedKey}:${value4};`; + } + } + return ret; +} +__name(stringifyStyle, "stringifyStyle"); +function normalizeClass(value4) { + let res = ""; + if (isString$9(value4)) { + res = value4; + } else if (isArray$b(value4)) { + for (let i2 = 0; i2 < value4.length; i2++) { + const normalized = normalizeClass(value4[i2]); + if (normalized) { + res += normalized + " "; + } + } + } else if (isObject$f(value4)) { + for (const name2 in value4) { + if (value4[name2]) { + res += name2 + " "; + } + } + } + return res.trim(); +} +__name(normalizeClass, "normalizeClass"); +function normalizeProps(props) { + if (!props) return null; + let { class: klass, style: style2 } = props; + if (klass && !isString$9(klass)) { + props.class = normalizeClass(klass); + } + if (style2) { + props.style = normalizeStyle(style2); + } + return props; +} +__name(normalizeProps, "normalizeProps"); +const HTML_TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot"; +const SVG_TAGS = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view"; +const MATH_TAGS = "annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics"; +const VOID_TAGS = "area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr"; +const isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS); +const isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS); +const isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS); +const isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS); +const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; +const isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs); +const isBooleanAttr = /* @__PURE__ */ makeMap( + specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected` +); +function includeBooleanAttr(value4) { + return !!value4 || value4 === ""; +} +__name(includeBooleanAttr, "includeBooleanAttr"); +const unsafeAttrCharRE = /[>/="'\u0009\u000a\u000c\u0020]/; +const attrValidationCache = {}; +function isSSRSafeAttrName(name2) { + if (attrValidationCache.hasOwnProperty(name2)) { + return attrValidationCache[name2]; + } + const isUnsafe = unsafeAttrCharRE.test(name2); + if (isUnsafe) { + console.error(`unsafe attribute name: ${name2}`); + } + return attrValidationCache[name2] = !isUnsafe; +} +__name(isSSRSafeAttrName, "isSSRSafeAttrName"); +const propsToAttrMap = { + acceptCharset: "accept-charset", + className: "class", + htmlFor: "for", + httpEquiv: "http-equiv" +}; +const isKnownHtmlAttr = /* @__PURE__ */ makeMap( + `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap` +); +const isKnownSvgAttr = /* @__PURE__ */ makeMap( + `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan` +); +const isKnownMathMLAttr = /* @__PURE__ */ makeMap( + `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns` +); +function isRenderableAttrValue(value4) { + if (value4 == null) { + return false; + } + const type = typeof value4; + return type === "string" || type === "number" || type === "boolean"; +} +__name(isRenderableAttrValue, "isRenderableAttrValue"); +const escapeRE$2 = /["'&<>]/; +function escapeHtml$2(string) { + const str = "" + string; + const match2 = escapeRE$2.exec(str); + if (!match2) { + return str; + } + let html = ""; + let escaped; + let index2; + let lastIndex2 = 0; + for (index2 = match2.index; index2 < str.length; index2++) { + switch (str.charCodeAt(index2)) { + case 34: + escaped = """; + break; + case 38: + escaped = "&"; + break; + case 39: + escaped = "'"; + break; + case 60: + escaped = "<"; + break; + case 62: + escaped = ">"; + break; + default: + continue; + } + if (lastIndex2 !== index2) { + html += str.slice(lastIndex2, index2); + } + lastIndex2 = index2 + 1; + html += escaped; + } + return lastIndex2 !== index2 ? html + str.slice(lastIndex2, index2) : html; +} +__name(escapeHtml$2, "escapeHtml$2"); +const commentStripRE = /^-?>||--!>|?@[\\\]^`{|}~]/g; +function getEscapedCssVarName(key, doubleEscape) { + return key.replace( + cssVarNameEscapeSymbolsRE, + (s2) => doubleEscape ? s2 === '"' ? '\\\\\\"' : `\\\\${s2}` : `\\${s2}` + ); +} +__name(getEscapedCssVarName, "getEscapedCssVarName"); +function looseCompareArrays(a2, b2) { + if (a2.length !== b2.length) return false; + let equal = true; + for (let i2 = 0; equal && i2 < a2.length; i2++) { + equal = looseEqual(a2[i2], b2[i2]); + } + return equal; +} +__name(looseCompareArrays, "looseCompareArrays"); +function looseEqual(a2, b2) { + if (a2 === b2) return true; + let aValidType = isDate$4(a2); + let bValidType = isDate$4(b2); + if (aValidType || bValidType) { + return aValidType && bValidType ? a2.getTime() === b2.getTime() : false; + } + aValidType = isSymbol$1(a2); + bValidType = isSymbol$1(b2); + if (aValidType || bValidType) { + return a2 === b2; + } + aValidType = isArray$b(a2); + bValidType = isArray$b(b2); + if (aValidType || bValidType) { + return aValidType && bValidType ? looseCompareArrays(a2, b2) : false; + } + aValidType = isObject$f(a2); + bValidType = isObject$f(b2); + if (aValidType || bValidType) { + if (!aValidType || !bValidType) { + return false; + } + const aKeysCount = Object.keys(a2).length; + const bKeysCount = Object.keys(b2).length; + if (aKeysCount !== bKeysCount) { + return false; + } + for (const key in a2) { + const aHasKey = a2.hasOwnProperty(key); + const bHasKey = b2.hasOwnProperty(key); + if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a2[key], b2[key])) { + return false; + } + } + } + return String(a2) === String(b2); +} +__name(looseEqual, "looseEqual"); +function looseIndexOf(arr, val) { + return arr.findIndex((item3) => looseEqual(item3, val)); +} +__name(looseIndexOf, "looseIndexOf"); +const isRef$1 = /* @__PURE__ */ __name((val) => { + return !!(val && val["__v_isRef"] === true); +}, "isRef$1"); +const toDisplayString$1 = /* @__PURE__ */ __name((val) => { + return isString$9(val) ? val : val == null ? "" : isArray$b(val) || isObject$f(val) && (val.toString === objectToString$3 || !isFunction$c(val.toString)) ? isRef$1(val) ? toDisplayString$1(val.value) : JSON.stringify(val, replacer, 2) : String(val); +}, "toDisplayString$1"); +const replacer = /* @__PURE__ */ __name((_key, val) => { + if (isRef$1(val)) { + return replacer(_key, val.value); + } else if (isMap$3(val)) { + return { + [`Map(${val.size})`]: [...val.entries()].reduce( + (entries, [key, val2], i2) => { + entries[stringifySymbol(key, i2) + " =>"] = val2; + return entries; + }, + {} + ) + }; + } else if (isSet$3(val)) { + return { + [`Set(${val.size})`]: [...val.values()].map((v2) => stringifySymbol(v2)) + }; + } else if (isSymbol$1(val)) { + return stringifySymbol(val); + } else if (isObject$f(val) && !isArray$b(val) && !isPlainObject$4(val)) { + return String(val); + } + return val; +}, "replacer"); +const stringifySymbol = /* @__PURE__ */ __name((v2, i2 = "") => { + var _a2; + return ( + // Symbol.description in es2019+ so we need to cast here to pass + // the lib: es2016 check + isSymbol$1(v2) ? `Symbol(${(_a2 = v2.description) != null ? _a2 : i2})` : v2 + ); +}, "stringifySymbol"); +/** +* @vue/reactivity v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +function warn$4(msg, ...args) { + console.warn(`[Vue warn] ${msg}`, ...args); +} +__name(warn$4, "warn$4"); +let activeEffectScope; +class EffectScope { + static { + __name(this, "EffectScope"); + } + constructor(detached = false) { + this.detached = detached; + this._active = true; + this.effects = []; + this.cleanups = []; + this._isPaused = false; + this.parent = activeEffectScope; + if (!detached && activeEffectScope) { + this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( + this + ) - 1; + } + } + get active() { + return this._active; + } + pause() { + if (this._active) { + this._isPaused = true; + let i2, l2; + if (this.scopes) { + for (i2 = 0, l2 = this.scopes.length; i2 < l2; i2++) { + this.scopes[i2].pause(); + } + } + for (i2 = 0, l2 = this.effects.length; i2 < l2; i2++) { + this.effects[i2].pause(); + } + } + } + /** + * Resumes the effect scope, including all child scopes and effects. + */ + resume() { + if (this._active) { + if (this._isPaused) { + this._isPaused = false; + let i2, l2; + if (this.scopes) { + for (i2 = 0, l2 = this.scopes.length; i2 < l2; i2++) { + this.scopes[i2].resume(); + } + } + for (i2 = 0, l2 = this.effects.length; i2 < l2; i2++) { + this.effects[i2].resume(); + } + } + } + } + run(fn) { + if (this._active) { + const currentEffectScope = activeEffectScope; + try { + activeEffectScope = this; + return fn(); + } finally { + activeEffectScope = currentEffectScope; + } + } else if (false) { + warn$4(`cannot run an inactive effect scope.`); + } + } + /** + * This should only be called on non-detached scopes + * @internal + */ + on() { + activeEffectScope = this; + } + /** + * This should only be called on non-detached scopes + * @internal + */ + off() { + activeEffectScope = this.parent; + } + stop(fromParent) { + if (this._active) { + this._active = false; + let i2, l2; + for (i2 = 0, l2 = this.effects.length; i2 < l2; i2++) { + this.effects[i2].stop(); + } + this.effects.length = 0; + for (i2 = 0, l2 = this.cleanups.length; i2 < l2; i2++) { + this.cleanups[i2](); + } + this.cleanups.length = 0; + if (this.scopes) { + for (i2 = 0, l2 = this.scopes.length; i2 < l2; i2++) { + this.scopes[i2].stop(true); + } + this.scopes.length = 0; + } + if (!this.detached && this.parent && !fromParent) { + const last = this.parent.scopes.pop(); + if (last && last !== this) { + this.parent.scopes[this.index] = last; + last.index = this.index; + } + } + this.parent = void 0; + } + } +} +function effectScope(detached) { + return new EffectScope(detached); +} +__name(effectScope, "effectScope"); +function getCurrentScope() { + return activeEffectScope; +} +__name(getCurrentScope, "getCurrentScope"); +function onScopeDispose(fn, failSilently = false) { + if (activeEffectScope) { + activeEffectScope.cleanups.push(fn); + } else if (false) { + warn$4( + `onScopeDispose() is called when there is no active effect scope to be associated with.` + ); + } +} +__name(onScopeDispose, "onScopeDispose"); +let activeSub; +const EffectFlags = { + "ACTIVE": 1, + "1": "ACTIVE", + "RUNNING": 2, + "2": "RUNNING", + "TRACKING": 4, + "4": "TRACKING", + "NOTIFIED": 8, + "8": "NOTIFIED", + "DIRTY": 16, + "16": "DIRTY", + "ALLOW_RECURSE": 32, + "32": "ALLOW_RECURSE", + "PAUSED": 64, + "64": "PAUSED" +}; +const pausedQueueEffects = /* @__PURE__ */ new WeakSet(); +class ReactiveEffect { + static { + __name(this, "ReactiveEffect"); + } + constructor(fn) { + this.fn = fn; + this.deps = void 0; + this.depsTail = void 0; + this.flags = 1 | 4; + this.next = void 0; + this.cleanup = void 0; + this.scheduler = void 0; + if (activeEffectScope && activeEffectScope.active) { + activeEffectScope.effects.push(this); + } + } + pause() { + this.flags |= 64; + } + resume() { + if (this.flags & 64) { + this.flags &= ~64; + if (pausedQueueEffects.has(this)) { + pausedQueueEffects.delete(this); + this.trigger(); + } + } + } + /** + * @internal + */ + notify() { + if (this.flags & 2 && !(this.flags & 32)) { + return; + } + if (!(this.flags & 8)) { + batch(this); + } + } + run() { + if (!(this.flags & 1)) { + return this.fn(); + } + this.flags |= 2; + cleanupEffect(this); + prepareDeps(this); + const prevEffect = activeSub; + const prevShouldTrack = shouldTrack; + activeSub = this; + shouldTrack = true; + try { + return this.fn(); + } finally { + if (false) { + warn$4( + "Active effect was not restored correctly - this is likely a Vue internal bug." + ); + } + cleanupDeps(this); + activeSub = prevEffect; + shouldTrack = prevShouldTrack; + this.flags &= ~2; + } + } + stop() { + if (this.flags & 1) { + for (let link2 = this.deps; link2; link2 = link2.nextDep) { + removeSub(link2); + } + this.deps = this.depsTail = void 0; + cleanupEffect(this); + this.onStop && this.onStop(); + this.flags &= ~1; + } + } + trigger() { + if (this.flags & 64) { + pausedQueueEffects.add(this); + } else if (this.scheduler) { + this.scheduler(); + } else { + this.runIfDirty(); + } + } + /** + * @internal + */ + runIfDirty() { + if (isDirty$1(this)) { + this.run(); + } + } + get dirty() { + return isDirty$1(this); + } +} +let batchDepth = 0; +let batchedSub; +let batchedComputed; +function batch(sub, isComputed2 = false) { + sub.flags |= 8; + if (isComputed2) { + sub.next = batchedComputed; + batchedComputed = sub; + return; + } + sub.next = batchedSub; + batchedSub = sub; +} +__name(batch, "batch"); +function startBatch() { + batchDepth++; +} +__name(startBatch, "startBatch"); +function endBatch() { + if (--batchDepth > 0) { + return; + } + if (batchedComputed) { + let e2 = batchedComputed; + batchedComputed = void 0; + while (e2) { + const next2 = e2.next; + e2.next = void 0; + e2.flags &= ~8; + e2 = next2; + } + } + let error2; + while (batchedSub) { + let e2 = batchedSub; + batchedSub = void 0; + while (e2) { + const next2 = e2.next; + e2.next = void 0; + e2.flags &= ~8; + if (e2.flags & 1) { + try { + ; + e2.trigger(); + } catch (err) { + if (!error2) error2 = err; + } + } + e2 = next2; + } + } + if (error2) throw error2; +} +__name(endBatch, "endBatch"); +function prepareDeps(sub) { + for (let link2 = sub.deps; link2; link2 = link2.nextDep) { + link2.version = -1; + link2.prevActiveLink = link2.dep.activeLink; + link2.dep.activeLink = link2; + } +} +__name(prepareDeps, "prepareDeps"); +function cleanupDeps(sub) { + let head; + let tail = sub.depsTail; + let link2 = tail; + while (link2) { + const prev2 = link2.prevDep; + if (link2.version === -1) { + if (link2 === tail) tail = prev2; + removeSub(link2); + removeDep(link2); + } else { + head = link2; + } + link2.dep.activeLink = link2.prevActiveLink; + link2.prevActiveLink = void 0; + link2 = prev2; + } + sub.deps = head; + sub.depsTail = tail; +} +__name(cleanupDeps, "cleanupDeps"); +function isDirty$1(sub) { + for (let link2 = sub.deps; link2; link2 = link2.nextDep) { + if (link2.dep.version !== link2.version || link2.dep.computed && (refreshComputed(link2.dep.computed) || link2.dep.version !== link2.version)) { + return true; + } + } + if (sub._dirty) { + return true; + } + return false; +} +__name(isDirty$1, "isDirty$1"); +function refreshComputed(computed2) { + if (computed2.flags & 4 && !(computed2.flags & 16)) { + return; + } + computed2.flags &= ~16; + if (computed2.globalVersion === globalVersion) { + return; + } + computed2.globalVersion = globalVersion; + const dep = computed2.dep; + computed2.flags |= 2; + if (dep.version > 0 && !computed2.isSSR && computed2.deps && !isDirty$1(computed2)) { + computed2.flags &= ~2; + return; + } + const prevSub = activeSub; + const prevShouldTrack = shouldTrack; + activeSub = computed2; + shouldTrack = true; + try { + prepareDeps(computed2); + const value4 = computed2.fn(computed2._value); + if (dep.version === 0 || hasChanged(value4, computed2._value)) { + computed2._value = value4; + dep.version++; + } + } catch (err) { + dep.version++; + throw err; + } finally { + activeSub = prevSub; + shouldTrack = prevShouldTrack; + cleanupDeps(computed2); + computed2.flags &= ~2; + } +} +__name(refreshComputed, "refreshComputed"); +function removeSub(link2, soft = false) { + const { dep, prevSub, nextSub } = link2; + if (prevSub) { + prevSub.nextSub = nextSub; + link2.prevSub = void 0; + } + if (nextSub) { + nextSub.prevSub = prevSub; + link2.nextSub = void 0; + } + if (false) { + dep.subsHead = nextSub; + } + if (dep.subs === link2) { + dep.subs = prevSub; + if (!prevSub && dep.computed) { + dep.computed.flags &= ~4; + for (let l2 = dep.computed.deps; l2; l2 = l2.nextDep) { + removeSub(l2, true); + } + } + } + if (!soft && !--dep.sc && dep.map) { + dep.map.delete(dep.key); + } +} +__name(removeSub, "removeSub"); +function removeDep(link2) { + const { prevDep, nextDep } = link2; + if (prevDep) { + prevDep.nextDep = nextDep; + link2.prevDep = void 0; + } + if (nextDep) { + nextDep.prevDep = prevDep; + link2.nextDep = void 0; + } +} +__name(removeDep, "removeDep"); +function effect(fn, options4) { + if (fn.effect instanceof ReactiveEffect) { + fn = fn.effect.fn; + } + const e2 = new ReactiveEffect(fn); + if (options4) { + extend$1(e2, options4); + } + try { + e2.run(); + } catch (err) { + e2.stop(); + throw err; + } + const runner = e2.run.bind(e2); + runner.effect = e2; + return runner; +} +__name(effect, "effect"); +function stop(runner) { + runner.effect.stop(); +} +__name(stop, "stop"); +let shouldTrack = true; +const trackStack = []; +function pauseTracking() { + trackStack.push(shouldTrack); + shouldTrack = false; +} +__name(pauseTracking, "pauseTracking"); +function enableTracking() { + trackStack.push(shouldTrack); + shouldTrack = true; +} +__name(enableTracking, "enableTracking"); +function resetTracking() { + const last = trackStack.pop(); + shouldTrack = last === void 0 ? true : last; +} +__name(resetTracking, "resetTracking"); +function onEffectCleanup(fn, failSilently = false) { + if (activeSub instanceof ReactiveEffect) { + activeSub.cleanup = fn; + } else if (false) { + warn$4( + `onEffectCleanup() was called when there was no active effect to associate with.` + ); + } +} +__name(onEffectCleanup, "onEffectCleanup"); +function cleanupEffect(e2) { + const { cleanup } = e2; + e2.cleanup = void 0; + if (cleanup) { + const prevSub = activeSub; + activeSub = void 0; + try { + cleanup(); + } finally { + activeSub = prevSub; + } + } +} +__name(cleanupEffect, "cleanupEffect"); +let globalVersion = 0; +let Link$3 = class Link2 { + static { + __name(this, "Link"); + } + constructor(sub, dep) { + this.sub = sub; + this.dep = dep; + this.version = dep.version; + this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0; + } +}; +class Dep { + static { + __name(this, "Dep"); + } + constructor(computed2) { + this.computed = computed2; + this.version = 0; + this.activeLink = void 0; + this.subs = void 0; + this.map = void 0; + this.key = void 0; + this.sc = 0; + if (false) { + this.subsHead = void 0; + } + } + track(debugInfo) { + if (!activeSub || !shouldTrack || activeSub === this.computed) { + return; + } + let link2 = this.activeLink; + if (link2 === void 0 || link2.sub !== activeSub) { + link2 = this.activeLink = new Link$3(activeSub, this); + if (!activeSub.deps) { + activeSub.deps = activeSub.depsTail = link2; + } else { + link2.prevDep = activeSub.depsTail; + activeSub.depsTail.nextDep = link2; + activeSub.depsTail = link2; + } + addSub(link2); + } else if (link2.version === -1) { + link2.version = this.version; + if (link2.nextDep) { + const next2 = link2.nextDep; + next2.prevDep = link2.prevDep; + if (link2.prevDep) { + link2.prevDep.nextDep = next2; + } + link2.prevDep = activeSub.depsTail; + link2.nextDep = void 0; + activeSub.depsTail.nextDep = link2; + activeSub.depsTail = link2; + if (activeSub.deps === link2) { + activeSub.deps = next2; + } + } + } + if (false) { + activeSub.onTrack( + extend$1( + { + effect: activeSub + }, + debugInfo + ) + ); + } + return link2; + } + trigger(debugInfo) { + this.version++; + globalVersion++; + this.notify(debugInfo); + } + notify(debugInfo) { + startBatch(); + try { + if (false) { + for (let head = this.subsHead; head; head = head.nextSub) { + if (head.sub.onTrigger && !(head.sub.flags & 8)) { + head.sub.onTrigger( + extend$1( + { + effect: head.sub + }, + debugInfo + ) + ); + } + } + } + for (let link2 = this.subs; link2; link2 = link2.prevSub) { + if (link2.sub.notify()) { + ; + link2.sub.dep.notify(); + } + } + } finally { + endBatch(); + } + } +} +function addSub(link2) { + link2.dep.sc++; + if (link2.sub.flags & 4) { + const computed2 = link2.dep.computed; + if (computed2 && !link2.dep.subs) { + computed2.flags |= 4 | 16; + for (let l2 = computed2.deps; l2; l2 = l2.nextDep) { + addSub(l2); + } + } + const currentTail = link2.dep.subs; + if (currentTail !== link2) { + link2.prevSub = currentTail; + if (currentTail) currentTail.nextSub = link2; + } + if (false) { + link2.dep.subsHead = link2; + } + link2.dep.subs = link2; + } +} +__name(addSub, "addSub"); +const targetMap = /* @__PURE__ */ new WeakMap(); +const ITERATE_KEY = Symbol( + false ? "Object iterate" : "" +); +const MAP_KEY_ITERATE_KEY = Symbol( + false ? "Map keys iterate" : "" +); +const ARRAY_ITERATE_KEY = Symbol( + false ? "Array iterate" : "" +); +function track(target2, type, key) { + if (shouldTrack && activeSub) { + let depsMap = targetMap.get(target2); + if (!depsMap) { + targetMap.set(target2, depsMap = /* @__PURE__ */ new Map()); + } + let dep = depsMap.get(key); + if (!dep) { + depsMap.set(key, dep = new Dep()); + dep.map = depsMap; + dep.key = key; + } + if (false) { + dep.track({ + target: target2, + type, + key + }); + } else { + dep.track(); + } + } +} +__name(track, "track"); +function trigger(target2, type, key, newValue2, oldValue2, oldTarget) { + const depsMap = targetMap.get(target2); + if (!depsMap) { + globalVersion++; + return; + } + const run2 = /* @__PURE__ */ __name((dep) => { + if (dep) { + if (false) { + dep.trigger({ + target: target2, + type, + key, + newValue: newValue2, + oldValue: oldValue2, + oldTarget + }); + } else { + dep.trigger(); + } + } + }, "run"); + startBatch(); + if (type === "clear") { + depsMap.forEach(run2); + } else { + const targetIsArray = isArray$b(target2); + const isArrayIndex = targetIsArray && isIntegerKey(key); + if (targetIsArray && key === "length") { + const newLength = Number(newValue2); + depsMap.forEach((dep, key2) => { + if (key2 === "length" || key2 === ARRAY_ITERATE_KEY || !isSymbol$1(key2) && key2 >= newLength) { + run2(dep); + } + }); + } else { + if (key !== void 0 || depsMap.has(void 0)) { + run2(depsMap.get(key)); + } + if (isArrayIndex) { + run2(depsMap.get(ARRAY_ITERATE_KEY)); + } + switch (type) { + case "add": + if (!targetIsArray) { + run2(depsMap.get(ITERATE_KEY)); + if (isMap$3(target2)) { + run2(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } else if (isArrayIndex) { + run2(depsMap.get("length")); + } + break; + case "delete": + if (!targetIsArray) { + run2(depsMap.get(ITERATE_KEY)); + if (isMap$3(target2)) { + run2(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } + break; + case "set": + if (isMap$3(target2)) { + run2(depsMap.get(ITERATE_KEY)); + } + break; + } + } + } + endBatch(); +} +__name(trigger, "trigger"); +function getDepFromReactive(object, key) { + const depMap = targetMap.get(object); + return depMap && depMap.get(key); +} +__name(getDepFromReactive, "getDepFromReactive"); +function reactiveReadArray(array) { + const raw = toRaw(array); + if (raw === array) return raw; + track(raw, "iterate", ARRAY_ITERATE_KEY); + return isShallow(array) ? raw : raw.map(toReactive$1); +} +__name(reactiveReadArray, "reactiveReadArray"); +function shallowReadArray(arr) { + track(arr = toRaw(arr), "iterate", ARRAY_ITERATE_KEY); + return arr; +} +__name(shallowReadArray, "shallowReadArray"); +const arrayInstrumentations = { + __proto__: null, + [Symbol.iterator]() { + return iterator(this, Symbol.iterator, toReactive$1); + }, + concat(...args) { + return reactiveReadArray(this).concat( + ...args.map((x2) => isArray$b(x2) ? reactiveReadArray(x2) : x2) + ); + }, + entries() { + return iterator(this, "entries", (value4) => { + value4[1] = toReactive$1(value4[1]); + return value4; + }); + }, + every(fn, thisArg) { + return apply$2(this, "every", fn, thisArg, void 0, arguments); + }, + filter(fn, thisArg) { + return apply$2(this, "filter", fn, thisArg, (v2) => v2.map(toReactive$1), arguments); + }, + find(fn, thisArg) { + return apply$2(this, "find", fn, thisArg, toReactive$1, arguments); + }, + findIndex(fn, thisArg) { + return apply$2(this, "findIndex", fn, thisArg, void 0, arguments); + }, + findLast(fn, thisArg) { + return apply$2(this, "findLast", fn, thisArg, toReactive$1, arguments); + }, + findLastIndex(fn, thisArg) { + return apply$2(this, "findLastIndex", fn, thisArg, void 0, arguments); + }, + // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement + forEach(fn, thisArg) { + return apply$2(this, "forEach", fn, thisArg, void 0, arguments); + }, + includes(...args) { + return searchProxy(this, "includes", args); + }, + indexOf(...args) { + return searchProxy(this, "indexOf", args); + }, + join(separator) { + return reactiveReadArray(this).join(separator); + }, + // keys() iterator only reads `length`, no optimisation required + lastIndexOf(...args) { + return searchProxy(this, "lastIndexOf", args); + }, + map(fn, thisArg) { + return apply$2(this, "map", fn, thisArg, void 0, arguments); + }, + pop() { + return noTracking(this, "pop"); + }, + push(...args) { + return noTracking(this, "push", args); + }, + reduce(fn, ...args) { + return reduce(this, "reduce", fn, args); + }, + reduceRight(fn, ...args) { + return reduce(this, "reduceRight", fn, args); + }, + shift() { + return noTracking(this, "shift"); + }, + // slice could use ARRAY_ITERATE but also seems to beg for range tracking + some(fn, thisArg) { + return apply$2(this, "some", fn, thisArg, void 0, arguments); + }, + splice(...args) { + return noTracking(this, "splice", args); + }, + toReversed() { + return reactiveReadArray(this).toReversed(); + }, + toSorted(comparer) { + return reactiveReadArray(this).toSorted(comparer); + }, + toSpliced(...args) { + return reactiveReadArray(this).toSpliced(...args); + }, + unshift(...args) { + return noTracking(this, "unshift", args); + }, + values() { + return iterator(this, "values", toReactive$1); + } +}; +function iterator(self2, method, wrapValue) { + const arr = shallowReadArray(self2); + const iter = arr[method](); + if (arr !== self2 && !isShallow(self2)) { + iter._next = iter.next; + iter.next = () => { + const result = iter._next(); + if (result.value) { + result.value = wrapValue(result.value); + } + return result; + }; + } + return iter; +} +__name(iterator, "iterator"); +const arrayProto$1 = Array.prototype; +function apply$2(self2, method, fn, thisArg, wrappedRetFn, args) { + const arr = shallowReadArray(self2); + const needsWrap = arr !== self2 && !isShallow(self2); + const methodFn = arr[method]; + if (methodFn !== arrayProto$1[method]) { + const result2 = methodFn.apply(self2, args); + return needsWrap ? toReactive$1(result2) : result2; + } + let wrappedFn = fn; + if (arr !== self2) { + if (needsWrap) { + wrappedFn = /* @__PURE__ */ __name(function(item3, index2) { + return fn.call(this, toReactive$1(item3), index2, self2); + }, "wrappedFn"); + } else if (fn.length > 2) { + wrappedFn = /* @__PURE__ */ __name(function(item3, index2) { + return fn.call(this, item3, index2, self2); + }, "wrappedFn"); + } + } + const result = methodFn.call(arr, wrappedFn, thisArg); + return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result; +} +__name(apply$2, "apply$2"); +function reduce(self2, method, fn, args) { + const arr = shallowReadArray(self2); + let wrappedFn = fn; + if (arr !== self2) { + if (!isShallow(self2)) { + wrappedFn = /* @__PURE__ */ __name(function(acc, item3, index2) { + return fn.call(this, acc, toReactive$1(item3), index2, self2); + }, "wrappedFn"); + } else if (fn.length > 3) { + wrappedFn = /* @__PURE__ */ __name(function(acc, item3, index2) { + return fn.call(this, acc, item3, index2, self2); + }, "wrappedFn"); + } + } + return arr[method](wrappedFn, ...args); +} +__name(reduce, "reduce"); +function searchProxy(self2, method, args) { + const arr = toRaw(self2); + track(arr, "iterate", ARRAY_ITERATE_KEY); + const res = arr[method](...args); + if ((res === -1 || res === false) && isProxy(args[0])) { + args[0] = toRaw(args[0]); + return arr[method](...args); + } + return res; +} +__name(searchProxy, "searchProxy"); +function noTracking(self2, method, args = []) { + pauseTracking(); + startBatch(); + const res = toRaw(self2)[method].apply(self2, args); + endBatch(); + resetTracking(); + return res; +} +__name(noTracking, "noTracking"); +const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`); +const builtInSymbols = new Set( + /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol$1) +); +function hasOwnProperty$c(key) { + if (!isSymbol$1(key)) key = String(key); + const obj = toRaw(this); + track(obj, "has", key); + return obj.hasOwnProperty(key); +} +__name(hasOwnProperty$c, "hasOwnProperty$c"); +class BaseReactiveHandler { + static { + __name(this, "BaseReactiveHandler"); + } + constructor(_isReadonly = false, _isShallow = false) { + this._isReadonly = _isReadonly; + this._isShallow = _isShallow; + } + get(target2, key, receiver) { + if (key === "__v_skip") return target2["__v_skip"]; + const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow; + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_isShallow") { + return isShallow2; + } else if (key === "__v_raw") { + if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target2) || // receiver is not the reactive proxy, but has the same prototype + // this means the receiver is a user proxy of the reactive proxy + Object.getPrototypeOf(target2) === Object.getPrototypeOf(receiver)) { + return target2; + } + return; + } + const targetIsArray = isArray$b(target2); + if (!isReadonly2) { + let fn; + if (targetIsArray && (fn = arrayInstrumentations[key])) { + return fn; + } + if (key === "hasOwnProperty") { + return hasOwnProperty$c; + } + } + const res = Reflect.get( + target2, + key, + // if this is a proxy wrapping a ref, return methods using the raw ref + // as receiver so that we don't have to call `toRaw` on the ref in all + // its class methods + isRef(target2) ? target2 : receiver + ); + if (isSymbol$1(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { + return res; + } + if (!isReadonly2) { + track(target2, "get", key); + } + if (isShallow2) { + return res; + } + if (isRef(res)) { + return targetIsArray && isIntegerKey(key) ? res : res.value; + } + if (isObject$f(res)) { + return isReadonly2 ? readonly(res) : reactive(res); + } + return res; + } +} +class MutableReactiveHandler extends BaseReactiveHandler { + static { + __name(this, "MutableReactiveHandler"); + } + constructor(isShallow2 = false) { + super(false, isShallow2); + } + set(target2, key, value4, receiver) { + let oldValue2 = target2[key]; + if (!this._isShallow) { + const isOldValueReadonly = isReadonly(oldValue2); + if (!isShallow(value4) && !isReadonly(value4)) { + oldValue2 = toRaw(oldValue2); + value4 = toRaw(value4); + } + if (!isArray$b(target2) && isRef(oldValue2) && !isRef(value4)) { + if (isOldValueReadonly) { + return false; + } else { + oldValue2.value = value4; + return true; + } + } + } + const hadKey = isArray$b(target2) && isIntegerKey(key) ? Number(key) < target2.length : hasOwn$3(target2, key); + const result = Reflect.set( + target2, + key, + value4, + isRef(target2) ? target2 : receiver + ); + if (target2 === toRaw(receiver)) { + if (!hadKey) { + trigger(target2, "add", key, value4); + } else if (hasChanged(value4, oldValue2)) { + trigger(target2, "set", key, value4, oldValue2); + } + } + return result; + } + deleteProperty(target2, key) { + const hadKey = hasOwn$3(target2, key); + const oldValue2 = target2[key]; + const result = Reflect.deleteProperty(target2, key); + if (result && hadKey) { + trigger(target2, "delete", key, void 0, oldValue2); + } + return result; + } + has(target2, key) { + const result = Reflect.has(target2, key); + if (!isSymbol$1(key) || !builtInSymbols.has(key)) { + track(target2, "has", key); + } + return result; + } + ownKeys(target2) { + track( + target2, + "iterate", + isArray$b(target2) ? "length" : ITERATE_KEY + ); + return Reflect.ownKeys(target2); + } +} +class ReadonlyReactiveHandler extends BaseReactiveHandler { + static { + __name(this, "ReadonlyReactiveHandler"); + } + constructor(isShallow2 = false) { + super(true, isShallow2); + } + set(target2, key) { + if (false) { + warn$4( + `Set operation on key "${String(key)}" failed: target is readonly.`, + target2 + ); + } + return true; + } + deleteProperty(target2, key) { + if (false) { + warn$4( + `Delete operation on key "${String(key)}" failed: target is readonly.`, + target2 + ); + } + return true; + } +} +const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler(); +const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(); +const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true); +const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true); +const toShallow = /* @__PURE__ */ __name((value4) => value4, "toShallow"); +const getProto = /* @__PURE__ */ __name((v2) => Reflect.getPrototypeOf(v2), "getProto"); +function createIterableMethod(method, isReadonly2, isShallow2) { + return function(...args) { + const target2 = this["__v_raw"]; + const rawTarget = toRaw(target2); + const targetIsMap = isMap$3(rawTarget); + const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; + const isKeyOnly = method === "keys" && targetIsMap; + const innerIterator = target2[method](...args); + const wrap2 = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive$1; + !isReadonly2 && track( + rawTarget, + "iterate", + isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY + ); + return { + // iterator protocol + next() { + const { value: value4, done } = innerIterator.next(); + return done ? { value: value4, done } : { + value: isPair ? [wrap2(value4[0]), wrap2(value4[1])] : wrap2(value4), + done + }; + }, + // iterable protocol + [Symbol.iterator]() { + return this; + } + }; + }; +} +__name(createIterableMethod, "createIterableMethod"); +function createReadonlyMethod(type) { + return function(...args) { + if (false) { + const key = args[0] ? `on key "${args[0]}" ` : ``; + warn$4( + `${capitalize$1(type)} operation ${key}failed: target is readonly.`, + toRaw(this) + ); + } + return type === "delete" ? false : type === "clear" ? void 0 : this; + }; +} +__name(createReadonlyMethod, "createReadonlyMethod"); +function createInstrumentations(readonly2, shallow) { + const instrumentations = { + get(key) { + const target2 = this["__v_raw"]; + const rawTarget = toRaw(target2); + const rawKey = toRaw(key); + if (!readonly2) { + if (hasChanged(key, rawKey)) { + track(rawTarget, "get", key); + } + track(rawTarget, "get", rawKey); + } + const { has: has2 } = getProto(rawTarget); + const wrap2 = shallow ? toShallow : readonly2 ? toReadonly : toReactive$1; + if (has2.call(rawTarget, key)) { + return wrap2(target2.get(key)); + } else if (has2.call(rawTarget, rawKey)) { + return wrap2(target2.get(rawKey)); + } else if (target2 !== rawTarget) { + target2.get(key); + } + }, + get size() { + const target2 = this["__v_raw"]; + !readonly2 && track(toRaw(target2), "iterate", ITERATE_KEY); + return Reflect.get(target2, "size", target2); + }, + has(key) { + const target2 = this["__v_raw"]; + const rawTarget = toRaw(target2); + const rawKey = toRaw(key); + if (!readonly2) { + if (hasChanged(key, rawKey)) { + track(rawTarget, "has", key); + } + track(rawTarget, "has", rawKey); + } + return key === rawKey ? target2.has(key) : target2.has(key) || target2.has(rawKey); + }, + forEach(callback, thisArg) { + const observed = this; + const target2 = observed["__v_raw"]; + const rawTarget = toRaw(target2); + const wrap2 = shallow ? toShallow : readonly2 ? toReadonly : toReactive$1; + !readonly2 && track(rawTarget, "iterate", ITERATE_KEY); + return target2.forEach((value4, key) => { + return callback.call(thisArg, wrap2(value4), wrap2(key), observed); + }); + } + }; + extend$1( + instrumentations, + readonly2 ? { + add: createReadonlyMethod("add"), + set: createReadonlyMethod("set"), + delete: createReadonlyMethod("delete"), + clear: createReadonlyMethod("clear") + } : { + add(value4) { + if (!shallow && !isShallow(value4) && !isReadonly(value4)) { + value4 = toRaw(value4); + } + const target2 = toRaw(this); + const proto = getProto(target2); + const hadKey = proto.has.call(target2, value4); + if (!hadKey) { + target2.add(value4); + trigger(target2, "add", value4, value4); + } + return this; + }, + set(key, value4) { + if (!shallow && !isShallow(value4) && !isReadonly(value4)) { + value4 = toRaw(value4); + } + const target2 = toRaw(this); + const { has: has2, get: get3 } = getProto(target2); + let hadKey = has2.call(target2, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has2.call(target2, key); + } else if (false) { + checkIdentityKeys(target2, has2, key); + } + const oldValue2 = get3.call(target2, key); + target2.set(key, value4); + if (!hadKey) { + trigger(target2, "add", key, value4); + } else if (hasChanged(value4, oldValue2)) { + trigger(target2, "set", key, value4, oldValue2); + } + return this; + }, + delete(key) { + const target2 = toRaw(this); + const { has: has2, get: get3 } = getProto(target2); + let hadKey = has2.call(target2, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has2.call(target2, key); + } else if (false) { + checkIdentityKeys(target2, has2, key); + } + const oldValue2 = get3 ? get3.call(target2, key) : void 0; + const result = target2.delete(key); + if (hadKey) { + trigger(target2, "delete", key, void 0, oldValue2); + } + return result; + }, + clear() { + const target2 = toRaw(this); + const hadItems = target2.size !== 0; + const oldTarget = false ? isMap$3(target2) ? new Map(target2) : new Set(target2) : void 0; + const result = target2.clear(); + if (hadItems) { + trigger( + target2, + "clear", + void 0, + void 0, + oldTarget + ); + } + return result; + } + } + ); + const iteratorMethods = [ + "keys", + "values", + "entries", + Symbol.iterator + ]; + iteratorMethods.forEach((method) => { + instrumentations[method] = createIterableMethod(method, readonly2, shallow); + }); + return instrumentations; +} +__name(createInstrumentations, "createInstrumentations"); +function createInstrumentationGetter(isReadonly2, shallow) { + const instrumentations = createInstrumentations(isReadonly2, shallow); + return (target2, key, receiver) => { + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_raw") { + return target2; + } + return Reflect.get( + hasOwn$3(instrumentations, key) && key in target2 ? instrumentations : target2, + key, + receiver + ); + }; +} +__name(createInstrumentationGetter, "createInstrumentationGetter"); +const mutableCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(false, false) +}; +const shallowCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(false, true) +}; +const readonlyCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(true, false) +}; +const shallowReadonlyCollectionHandlers = { + get: /* @__PURE__ */ createInstrumentationGetter(true, true) +}; +function checkIdentityKeys(target2, has2, key) { + const rawKey = toRaw(key); + if (rawKey !== key && has2.call(target2, rawKey)) { + const type = toRawType(target2); + warn$4( + `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.` + ); + } +} +__name(checkIdentityKeys, "checkIdentityKeys"); +const reactiveMap = /* @__PURE__ */ new WeakMap(); +const shallowReactiveMap = /* @__PURE__ */ new WeakMap(); +const readonlyMap = /* @__PURE__ */ new WeakMap(); +const shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); +function targetTypeMap(rawType) { + switch (rawType) { + case "Object": + case "Array": + return 1; + case "Map": + case "Set": + case "WeakMap": + case "WeakSet": + return 2; + default: + return 0; + } +} +__name(targetTypeMap, "targetTypeMap"); +function getTargetType(value4) { + return value4["__v_skip"] || !Object.isExtensible(value4) ? 0 : targetTypeMap(toRawType(value4)); +} +__name(getTargetType, "getTargetType"); +function reactive(target2) { + if (isReadonly(target2)) { + return target2; + } + return createReactiveObject( + target2, + false, + mutableHandlers, + mutableCollectionHandlers, + reactiveMap + ); +} +__name(reactive, "reactive"); +function shallowReactive(target2) { + return createReactiveObject( + target2, + false, + shallowReactiveHandlers, + shallowCollectionHandlers, + shallowReactiveMap + ); +} +__name(shallowReactive, "shallowReactive"); +function readonly(target2) { + return createReactiveObject( + target2, + true, + readonlyHandlers, + readonlyCollectionHandlers, + readonlyMap + ); +} +__name(readonly, "readonly"); +function shallowReadonly(target2) { + return createReactiveObject( + target2, + true, + shallowReadonlyHandlers, + shallowReadonlyCollectionHandlers, + shallowReadonlyMap + ); +} +__name(shallowReadonly, "shallowReadonly"); +function createReactiveObject(target2, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { + if (!isObject$f(target2)) { + if (false) { + warn$4( + `value cannot be made ${isReadonly2 ? "readonly" : "reactive"}: ${String( + target2 + )}` + ); + } + return target2; + } + if (target2["__v_raw"] && !(isReadonly2 && target2["__v_isReactive"])) { + return target2; + } + const existingProxy = proxyMap.get(target2); + if (existingProxy) { + return existingProxy; + } + const targetType = getTargetType(target2); + if (targetType === 0) { + return target2; + } + const proxy = new Proxy( + target2, + targetType === 2 ? collectionHandlers : baseHandlers + ); + proxyMap.set(target2, proxy); + return proxy; +} +__name(createReactiveObject, "createReactiveObject"); +function isReactive(value4) { + if (isReadonly(value4)) { + return isReactive(value4["__v_raw"]); + } + return !!(value4 && value4["__v_isReactive"]); +} +__name(isReactive, "isReactive"); +function isReadonly(value4) { + return !!(value4 && value4["__v_isReadonly"]); +} +__name(isReadonly, "isReadonly"); +function isShallow(value4) { + return !!(value4 && value4["__v_isShallow"]); +} +__name(isShallow, "isShallow"); +function isProxy(value4) { + return value4 ? !!value4["__v_raw"] : false; +} +__name(isProxy, "isProxy"); +function toRaw(observed) { + const raw = observed && observed["__v_raw"]; + return raw ? toRaw(raw) : observed; +} +__name(toRaw, "toRaw"); +function markRaw(value4) { + if (!hasOwn$3(value4, "__v_skip") && Object.isExtensible(value4)) { + def(value4, "__v_skip", true); + } + return value4; +} +__name(markRaw, "markRaw"); +const toReactive$1 = /* @__PURE__ */ __name((value4) => isObject$f(value4) ? reactive(value4) : value4, "toReactive$1"); +const toReadonly = /* @__PURE__ */ __name((value4) => isObject$f(value4) ? readonly(value4) : value4, "toReadonly"); +function isRef(r2) { + return r2 ? r2["__v_isRef"] === true : false; +} +__name(isRef, "isRef"); +function ref(value4) { + return createRef(value4, false); +} +__name(ref, "ref"); +function shallowRef(value4) { + return createRef(value4, true); +} +__name(shallowRef, "shallowRef"); +function createRef(rawValue, shallow) { + if (isRef(rawValue)) { + return rawValue; + } + return new RefImpl(rawValue, shallow); +} +__name(createRef, "createRef"); +class RefImpl { + static { + __name(this, "RefImpl"); + } + constructor(value4, isShallow2) { + this.dep = new Dep(); + this["__v_isRef"] = true; + this["__v_isShallow"] = false; + this._rawValue = isShallow2 ? value4 : toRaw(value4); + this._value = isShallow2 ? value4 : toReactive$1(value4); + this["__v_isShallow"] = isShallow2; + } + get value() { + if (false) { + this.dep.track({ + target: this, + type: "get", + key: "value" + }); + } else { + this.dep.track(); + } + return this._value; + } + set value(newValue2) { + const oldValue2 = this._rawValue; + const useDirectValue = this["__v_isShallow"] || isShallow(newValue2) || isReadonly(newValue2); + newValue2 = useDirectValue ? newValue2 : toRaw(newValue2); + if (hasChanged(newValue2, oldValue2)) { + this._rawValue = newValue2; + this._value = useDirectValue ? newValue2 : toReactive$1(newValue2); + if (false) { + this.dep.trigger({ + target: this, + type: "set", + key: "value", + newValue: newValue2, + oldValue: oldValue2 + }); + } else { + this.dep.trigger(); + } + } + } +} +function triggerRef(ref2) { + if (ref2.dep) { + if (false) { + ref2.dep.trigger({ + target: ref2, + type: "set", + key: "value", + newValue: ref2._value + }); + } else { + ref2.dep.trigger(); + } + } +} +__name(triggerRef, "triggerRef"); +function unref(ref2) { + return isRef(ref2) ? ref2.value : ref2; +} +__name(unref, "unref"); +function toValue$4(source) { + return isFunction$c(source) ? source() : unref(source); +} +__name(toValue$4, "toValue$4"); +const shallowUnwrapHandlers = { + get: /* @__PURE__ */ __name((target2, key, receiver) => key === "__v_raw" ? target2 : unref(Reflect.get(target2, key, receiver)), "get"), + set: /* @__PURE__ */ __name((target2, key, value4, receiver) => { + const oldValue2 = target2[key]; + if (isRef(oldValue2) && !isRef(value4)) { + oldValue2.value = value4; + return true; + } else { + return Reflect.set(target2, key, value4, receiver); + } + }, "set") +}; +function proxyRefs(objectWithRefs) { + return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); +} +__name(proxyRefs, "proxyRefs"); +class CustomRefImpl { + static { + __name(this, "CustomRefImpl"); + } + constructor(factory) { + this["__v_isRef"] = true; + this._value = void 0; + const dep = this.dep = new Dep(); + const { get: get3, set: set3 } = factory(dep.track.bind(dep), dep.trigger.bind(dep)); + this._get = get3; + this._set = set3; + } + get value() { + return this._value = this._get(); + } + set value(newVal) { + this._set(newVal); + } +} +function customRef(factory) { + return new CustomRefImpl(factory); +} +__name(customRef, "customRef"); +function toRefs$1(object) { + if (false) { + warn$4(`toRefs() expects a reactive object but received a plain one.`); + } + const ret = isArray$b(object) ? new Array(object.length) : {}; + for (const key in object) { + ret[key] = propertyToRef(object, key); + } + return ret; +} +__name(toRefs$1, "toRefs$1"); +class ObjectRefImpl { + static { + __name(this, "ObjectRefImpl"); + } + constructor(_object, _key, _defaultValue) { + this._object = _object; + this._key = _key; + this._defaultValue = _defaultValue; + this["__v_isRef"] = true; + this._value = void 0; + } + get value() { + const val = this._object[this._key]; + return this._value = val === void 0 ? this._defaultValue : val; + } + set value(newVal) { + this._object[this._key] = newVal; + } + get dep() { + return getDepFromReactive(toRaw(this._object), this._key); + } +} +class GetterRefImpl { + static { + __name(this, "GetterRefImpl"); + } + constructor(_getter) { + this._getter = _getter; + this["__v_isRef"] = true; + this["__v_isReadonly"] = true; + this._value = void 0; + } + get value() { + return this._value = this._getter(); + } +} +function toRef$1(source, key, defaultValue2) { + if (isRef(source)) { + return source; + } else if (isFunction$c(source)) { + return new GetterRefImpl(source); + } else if (isObject$f(source) && arguments.length > 1) { + return propertyToRef(source, key, defaultValue2); + } else { + return ref(source); + } +} +__name(toRef$1, "toRef$1"); +function propertyToRef(source, key, defaultValue2) { + const val = source[key]; + return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue2); +} +__name(propertyToRef, "propertyToRef"); +class ComputedRefImpl { + static { + __name(this, "ComputedRefImpl"); + } + constructor(fn, setter, isSSR) { + this.fn = fn; + this.setter = setter; + this._value = void 0; + this.dep = new Dep(this); + this.__v_isRef = true; + this.deps = void 0; + this.depsTail = void 0; + this.flags = 16; + this.globalVersion = globalVersion - 1; + this.next = void 0; + this.effect = this; + this["__v_isReadonly"] = !setter; + this.isSSR = isSSR; + } + /** + * @internal + */ + notify() { + this.flags |= 16; + if (!(this.flags & 8) && // avoid infinite self recursion + activeSub !== this) { + batch(this, true); + return true; + } else if (false) ; + } + get value() { + const link2 = false ? this.dep.track({ + target: this, + type: "get", + key: "value" + }) : this.dep.track(); + refreshComputed(this); + if (link2) { + link2.version = this.dep.version; + } + return this._value; + } + set value(newValue2) { + if (this.setter) { + this.setter(newValue2); + } else if (false) { + warn$4("Write operation failed: computed value is readonly"); + } + } +} +function computed$1(getterOrOptions, debugOptions, isSSR = false) { + let getter; + let setter; + if (isFunction$c(getterOrOptions)) { + getter = getterOrOptions; + } else { + getter = getterOrOptions.get; + setter = getterOrOptions.set; + } + const cRef = new ComputedRefImpl(getter, setter, isSSR); + if (false) { + cRef.onTrack = debugOptions.onTrack; + cRef.onTrigger = debugOptions.onTrigger; + } + return cRef; +} +__name(computed$1, "computed$1"); +const TrackOpTypes = { + "GET": "get", + "HAS": "has", + "ITERATE": "iterate" +}; +const TriggerOpTypes = { + "SET": "set", + "ADD": "add", + "DELETE": "delete", + "CLEAR": "clear" +}; +const ReactiveFlags = { + "SKIP": "__v_skip", + "IS_REACTIVE": "__v_isReactive", + "IS_READONLY": "__v_isReadonly", + "IS_SHALLOW": "__v_isShallow", + "RAW": "__v_raw", + "IS_REF": "__v_isRef" +}; +const WatchErrorCodes = { + "WATCH_GETTER": 2, + "2": "WATCH_GETTER", + "WATCH_CALLBACK": 3, + "3": "WATCH_CALLBACK", + "WATCH_CLEANUP": 4, + "4": "WATCH_CLEANUP" +}; +const INITIAL_WATCHER_VALUE = {}; +const cleanupMap = /* @__PURE__ */ new WeakMap(); +let activeWatcher = void 0; +function getCurrentWatcher() { + return activeWatcher; +} +__name(getCurrentWatcher, "getCurrentWatcher"); +function onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) { + if (owner) { + let cleanups = cleanupMap.get(owner); + if (!cleanups) cleanupMap.set(owner, cleanups = []); + cleanups.push(cleanupFn); + } else if (false) { + warn$4( + `onWatcherCleanup() was called when there was no active watcher to associate with.` + ); + } +} +__name(onWatcherCleanup, "onWatcherCleanup"); +function watch$1(source, cb, options4 = EMPTY_OBJ) { + const { immediate, deep, once: once2, scheduler, augmentJob, call } = options4; + const warnInvalidSource = /* @__PURE__ */ __name((s2) => { + (options4.onWarn || warn$4)( + `Invalid watch source: `, + s2, + `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.` + ); + }, "warnInvalidSource"); + const reactiveGetter = /* @__PURE__ */ __name((source2) => { + if (deep) return source2; + if (isShallow(source2) || deep === false || deep === 0) + return traverse(source2, 1); + return traverse(source2); + }, "reactiveGetter"); + let effect2; + let getter; + let cleanup; + let boundCleanup; + let forceTrigger = false; + let isMultiSource = false; + if (isRef(source)) { + getter = /* @__PURE__ */ __name(() => source.value, "getter"); + forceTrigger = isShallow(source); + } else if (isReactive(source)) { + getter = /* @__PURE__ */ __name(() => reactiveGetter(source), "getter"); + forceTrigger = true; + } else if (isArray$b(source)) { + isMultiSource = true; + forceTrigger = source.some((s2) => isReactive(s2) || isShallow(s2)); + getter = /* @__PURE__ */ __name(() => source.map((s2) => { + if (isRef(s2)) { + return s2.value; + } else if (isReactive(s2)) { + return reactiveGetter(s2); + } else if (isFunction$c(s2)) { + return call ? call(s2, 2) : s2(); + } else { + } + }), "getter"); + } else if (isFunction$c(source)) { + if (cb) { + getter = call ? () => call(source, 2) : source; + } else { + getter = /* @__PURE__ */ __name(() => { + if (cleanup) { + pauseTracking(); + try { + cleanup(); + } finally { + resetTracking(); + } + } + const currentEffect = activeWatcher; + activeWatcher = effect2; + try { + return call ? call(source, 3, [boundCleanup]) : source(boundCleanup); + } finally { + activeWatcher = currentEffect; + } + }, "getter"); + } + } else { + getter = NOOP; + } + if (cb && deep) { + const baseGetter = getter; + const depth = deep === true ? Infinity : deep; + getter = /* @__PURE__ */ __name(() => traverse(baseGetter(), depth), "getter"); + } + const scope = getCurrentScope(); + const watchHandle = /* @__PURE__ */ __name(() => { + effect2.stop(); + if (scope && scope.active) { + remove$2(scope.effects, effect2); + } + }, "watchHandle"); + if (once2 && cb) { + const _cb = cb; + cb = /* @__PURE__ */ __name((...args) => { + _cb(...args); + watchHandle(); + }, "cb"); + } + let oldValue2 = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE; + const job = /* @__PURE__ */ __name((immediateFirstRun) => { + if (!(effect2.flags & 1) || !effect2.dirty && !immediateFirstRun) { + return; + } + if (cb) { + const newValue2 = effect2.run(); + if (deep || forceTrigger || (isMultiSource ? newValue2.some((v2, i2) => hasChanged(v2, oldValue2[i2])) : hasChanged(newValue2, oldValue2))) { + if (cleanup) { + cleanup(); + } + const currentWatcher = activeWatcher; + activeWatcher = effect2; + try { + const args = [ + newValue2, + // pass undefined as the old value when it's changed for the first time + oldValue2 === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue2[0] === INITIAL_WATCHER_VALUE ? [] : oldValue2, + boundCleanup + ]; + call ? call(cb, 3, args) : ( + // @ts-expect-error + cb(...args) + ); + oldValue2 = newValue2; + } finally { + activeWatcher = currentWatcher; + } + } + } else { + effect2.run(); + } + }, "job"); + if (augmentJob) { + augmentJob(job); + } + effect2 = new ReactiveEffect(getter); + effect2.scheduler = scheduler ? () => scheduler(job, false) : job; + boundCleanup = /* @__PURE__ */ __name((fn) => onWatcherCleanup(fn, false, effect2), "boundCleanup"); + cleanup = effect2.onStop = () => { + const cleanups = cleanupMap.get(effect2); + if (cleanups) { + if (call) { + call(cleanups, 4); + } else { + for (const cleanup2 of cleanups) cleanup2(); + } + cleanupMap.delete(effect2); + } + }; + if (false) { + effect2.onTrack = options4.onTrack; + effect2.onTrigger = options4.onTrigger; + } + if (cb) { + if (immediate) { + job(true); + } else { + oldValue2 = effect2.run(); + } + } else if (scheduler) { + scheduler(job.bind(null, true), true); + } else { + effect2.run(); + } + watchHandle.pause = effect2.pause.bind(effect2); + watchHandle.resume = effect2.resume.bind(effect2); + watchHandle.stop = watchHandle; + return watchHandle; +} +__name(watch$1, "watch$1"); +function traverse(value4, depth = Infinity, seen2) { + if (depth <= 0 || !isObject$f(value4) || value4["__v_skip"]) { + return value4; + } + seen2 = seen2 || /* @__PURE__ */ new Set(); + if (seen2.has(value4)) { + return value4; + } + seen2.add(value4); + depth--; + if (isRef(value4)) { + traverse(value4.value, depth, seen2); + } else if (isArray$b(value4)) { + for (let i2 = 0; i2 < value4.length; i2++) { + traverse(value4[i2], depth, seen2); + } + } else if (isSet$3(value4) || isMap$3(value4)) { + value4.forEach((v2) => { + traverse(v2, depth, seen2); + }); + } else if (isPlainObject$4(value4)) { + for (const key in value4) { + traverse(value4[key], depth, seen2); + } + for (const key of Object.getOwnPropertySymbols(value4)) { + if (Object.prototype.propertyIsEnumerable.call(value4, key)) { + traverse(value4[key], depth, seen2); + } + } + } + return value4; +} +__name(traverse, "traverse"); +/** +* @vue/runtime-core v3.5.13 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +const stack = []; +function pushWarningContext(vnode) { + stack.push(vnode); +} +__name(pushWarningContext, "pushWarningContext"); +function popWarningContext() { + stack.pop(); +} +__name(popWarningContext, "popWarningContext"); +let isWarning = false; +function warn$1$1(msg, ...args) { + if (isWarning) return; + isWarning = true; + pauseTracking(); + const instance = stack.length ? stack[stack.length - 1].component : null; + const appWarnHandler = instance && instance.appContext.config.warnHandler; + const trace = getComponentTrace(); + if (appWarnHandler) { + callWithErrorHandling( + appWarnHandler, + instance, + 11, + [ + // eslint-disable-next-line no-restricted-syntax + msg + args.map((a2) => { + var _a2, _b; + return (_b = (_a2 = a2.toString) == null ? void 0 : _a2.call(a2)) != null ? _b : JSON.stringify(a2); + }).join(""), + instance && instance.proxy, + trace.map( + ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>` + ).join("\n"), + trace + ] + ); + } else { + const warnArgs = [`[Vue warn]: ${msg}`, ...args]; + if (trace.length && // avoid spamming console during tests + true) { + warnArgs.push(` +`, ...formatTrace(trace)); + } + console.warn(...warnArgs); + } + resetTracking(); + isWarning = false; +} +__name(warn$1$1, "warn$1$1"); +function getComponentTrace() { + let currentVNode = stack[stack.length - 1]; + if (!currentVNode) { + return []; + } + const normalizedStack = []; + while (currentVNode) { + const last = normalizedStack[0]; + if (last && last.vnode === currentVNode) { + last.recurseCount++; + } else { + normalizedStack.push({ + vnode: currentVNode, + recurseCount: 0 + }); + } + const parentInstance = currentVNode.component && currentVNode.component.parent; + currentVNode = parentInstance && parentInstance.vnode; + } + return normalizedStack; +} +__name(getComponentTrace, "getComponentTrace"); +function formatTrace(trace) { + const logs = []; + trace.forEach((entry, i2) => { + logs.push(...i2 === 0 ? [] : [` +`], ...formatTraceEntry(entry)); + }); + return logs; +} +__name(formatTrace, "formatTrace"); +function formatTraceEntry({ vnode, recurseCount }) { + const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; + const isRoot = vnode.component ? vnode.component.parent == null : false; + const open2 = ` at <${formatComponentName( + vnode.component, + vnode.type, + isRoot + )}`; + const close5 = `>` + postfix; + return vnode.props ? [open2, ...formatProps(vnode.props), close5] : [open2 + close5]; +} +__name(formatTraceEntry, "formatTraceEntry"); +function formatProps(props) { + const res = []; + const keys2 = Object.keys(props); + keys2.slice(0, 3).forEach((key) => { + res.push(...formatProp(key, props[key])); + }); + if (keys2.length > 3) { + res.push(` ...`); + } + return res; +} +__name(formatProps, "formatProps"); +function formatProp(key, value4, raw) { + if (isString$9(value4)) { + value4 = JSON.stringify(value4); + return raw ? value4 : [`${key}=${value4}`]; + } else if (typeof value4 === "number" || typeof value4 === "boolean" || value4 == null) { + return raw ? value4 : [`${key}=${value4}`]; + } else if (isRef(value4)) { + value4 = formatProp(key, toRaw(value4.value), true); + return raw ? value4 : [`${key}=Ref<`, value4, `>`]; + } else if (isFunction$c(value4)) { + return [`${key}=fn${value4.name ? `<${value4.name}>` : ``}`]; + } else { + value4 = toRaw(value4); + return raw ? value4 : [`${key}=`, value4]; + } +} +__name(formatProp, "formatProp"); +function assertNumber(val, type) { + if (true) return; + if (val === void 0) { + return; + } else if (typeof val !== "number") { + warn$1$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`); + } else if (isNaN(val)) { + warn$1$1(`${type} is NaN - the duration expression might be incorrect.`); + } +} +__name(assertNumber, "assertNumber"); +const ErrorCodes = { + "SETUP_FUNCTION": 0, + "0": "SETUP_FUNCTION", + "RENDER_FUNCTION": 1, + "1": "RENDER_FUNCTION", + "NATIVE_EVENT_HANDLER": 5, + "5": "NATIVE_EVENT_HANDLER", + "COMPONENT_EVENT_HANDLER": 6, + "6": "COMPONENT_EVENT_HANDLER", + "VNODE_HOOK": 7, + "7": "VNODE_HOOK", + "DIRECTIVE_HOOK": 8, + "8": "DIRECTIVE_HOOK", + "TRANSITION_HOOK": 9, + "9": "TRANSITION_HOOK", + "APP_ERROR_HANDLER": 10, + "10": "APP_ERROR_HANDLER", + "APP_WARN_HANDLER": 11, + "11": "APP_WARN_HANDLER", + "FUNCTION_REF": 12, + "12": "FUNCTION_REF", + "ASYNC_COMPONENT_LOADER": 13, + "13": "ASYNC_COMPONENT_LOADER", + "SCHEDULER": 14, + "14": "SCHEDULER", + "COMPONENT_UPDATE": 15, + "15": "COMPONENT_UPDATE", + "APP_UNMOUNT_CLEANUP": 16, + "16": "APP_UNMOUNT_CLEANUP" +}; +const ErrorTypeStrings$1 = { + ["sp"]: "serverPrefetch hook", + ["bc"]: "beforeCreate hook", + ["c"]: "created hook", + ["bm"]: "beforeMount hook", + ["m"]: "mounted hook", + ["bu"]: "beforeUpdate hook", + ["u"]: "updated", + ["bum"]: "beforeUnmount hook", + ["um"]: "unmounted hook", + ["a"]: "activated hook", + ["da"]: "deactivated hook", + ["ec"]: "errorCaptured hook", + ["rtc"]: "renderTracked hook", + ["rtg"]: "renderTriggered hook", + [0]: "setup function", + [1]: "render function", + [2]: "watcher getter", + [3]: "watcher callback", + [4]: "watcher cleanup function", + [5]: "native event handler", + [6]: "component event handler", + [7]: "vnode hook", + [8]: "directive hook", + [9]: "transition hook", + [10]: "app errorHandler", + [11]: "app warnHandler", + [12]: "ref function", + [13]: "async component loader", + [14]: "scheduler flush", + [15]: "component update", + [16]: "app unmount cleanup function" +}; +function callWithErrorHandling(fn, instance, type, args) { + try { + return args ? fn(...args) : fn(); + } catch (err) { + handleError(err, instance, type); + } +} +__name(callWithErrorHandling, "callWithErrorHandling"); +function callWithAsyncErrorHandling(fn, instance, type, args) { + if (isFunction$c(fn)) { + const res = callWithErrorHandling(fn, instance, type, args); + if (res && isPromise$1(res)) { + res.catch((err) => { + handleError(err, instance, type); + }); + } + return res; + } + if (isArray$b(fn)) { + const values = []; + for (let i2 = 0; i2 < fn.length; i2++) { + values.push(callWithAsyncErrorHandling(fn[i2], instance, type, args)); + } + return values; + } else if (false) { + warn$1$1( + `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}` + ); + } +} +__name(callWithAsyncErrorHandling, "callWithAsyncErrorHandling"); +function handleError(err, instance, type, throwInDev = true) { + const contextVNode = instance ? instance.vnode : null; + const { errorHandler: errorHandler2, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ; + if (instance) { + let cur = instance.parent; + const exposedInstance = instance.proxy; + const errorInfo = false ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`; + while (cur) { + const errorCapturedHooks = cur.ec; + if (errorCapturedHooks) { + for (let i2 = 0; i2 < errorCapturedHooks.length; i2++) { + if (errorCapturedHooks[i2](err, exposedInstance, errorInfo) === false) { + return; + } + } + } + cur = cur.parent; + } + if (errorHandler2) { + pauseTracking(); + callWithErrorHandling(errorHandler2, null, 10, [ + err, + exposedInstance, + errorInfo + ]); + resetTracking(); + return; + } + } + logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction); +} +__name(handleError, "handleError"); +function logError(err, type, contextVNode, throwInDev = true, throwInProd = false) { + if (false) { + const info = ErrorTypeStrings$1[type]; + if (contextVNode) { + pushWarningContext(contextVNode); + } + warn$1$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`); + if (contextVNode) { + popWarningContext(); + } + if (throwInDev) { + throw err; + } else { + console.error(err); + } + } else if (throwInProd) { + throw err; + } else { + console.error(err); + } +} +__name(logError, "logError"); +const queue = []; +let flushIndex = -1; +const pendingPostFlushCbs = []; +let activePostFlushCbs = null; +let postFlushIndex = 0; +const resolvedPromise = /* @__PURE__ */ Promise.resolve(); +let currentFlushPromise = null; +const RECURSION_LIMIT = 100; +function nextTick(fn) { + const p2 = currentFlushPromise || resolvedPromise; + return fn ? p2.then(this ? fn.bind(this) : fn) : p2; +} +__name(nextTick, "nextTick"); +function findInsertionIndex$1(id3) { + let start2 = flushIndex + 1; + let end = queue.length; + while (start2 < end) { + const middle = start2 + end >>> 1; + const middleJob = queue[middle]; + const middleJobId = getId(middleJob); + if (middleJobId < id3 || middleJobId === id3 && middleJob.flags & 2) { + start2 = middle + 1; + } else { + end = middle; + } + } + return start2; +} +__name(findInsertionIndex$1, "findInsertionIndex$1"); +function queueJob(job) { + if (!(job.flags & 1)) { + const jobId = getId(job); + const lastJob = queue[queue.length - 1]; + if (!lastJob || // fast path when the job id is larger than the tail + !(job.flags & 2) && jobId >= getId(lastJob)) { + queue.push(job); + } else { + queue.splice(findInsertionIndex$1(jobId), 0, job); + } + job.flags |= 1; + queueFlush(); + } +} +__name(queueJob, "queueJob"); +function queueFlush() { + if (!currentFlushPromise) { + currentFlushPromise = resolvedPromise.then(flushJobs); + } +} +__name(queueFlush, "queueFlush"); +function queuePostFlushCb(cb) { + if (!isArray$b(cb)) { + if (activePostFlushCbs && cb.id === -1) { + activePostFlushCbs.splice(postFlushIndex + 1, 0, cb); + } else if (!(cb.flags & 1)) { + pendingPostFlushCbs.push(cb); + cb.flags |= 1; + } + } else { + pendingPostFlushCbs.push(...cb); + } + queueFlush(); +} +__name(queuePostFlushCb, "queuePostFlushCb"); +function flushPreFlushCbs(instance, seen2, i2 = flushIndex + 1) { + if (false) { + seen2 = seen2 || /* @__PURE__ */ new Map(); + } + for (; i2 < queue.length; i2++) { + const cb = queue[i2]; + if (cb && cb.flags & 2) { + if (instance && cb.id !== instance.uid) { + continue; + } + if (false) { + continue; + } + queue.splice(i2, 1); + i2--; + if (cb.flags & 4) { + cb.flags &= ~1; + } + cb(); + if (!(cb.flags & 4)) { + cb.flags &= ~1; + } + } + } +} +__name(flushPreFlushCbs, "flushPreFlushCbs"); +function flushPostFlushCbs(seen2) { + if (pendingPostFlushCbs.length) { + const deduped = [...new Set(pendingPostFlushCbs)].sort( + (a2, b2) => getId(a2) - getId(b2) + ); + pendingPostFlushCbs.length = 0; + if (activePostFlushCbs) { + activePostFlushCbs.push(...deduped); + return; + } + activePostFlushCbs = deduped; + if (false) { + seen2 = seen2 || /* @__PURE__ */ new Map(); + } + for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { + const cb = activePostFlushCbs[postFlushIndex]; + if (false) { + continue; + } + if (cb.flags & 4) { + cb.flags &= ~1; + } + if (!(cb.flags & 8)) cb(); + cb.flags &= ~1; + } + activePostFlushCbs = null; + postFlushIndex = 0; + } +} +__name(flushPostFlushCbs, "flushPostFlushCbs"); +const getId = /* @__PURE__ */ __name((job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id, "getId"); +function flushJobs(seen2) { + if (false) { + seen2 = seen2 || /* @__PURE__ */ new Map(); + } + const check = false ? (job) => checkRecursiveUpdates(seen2, job) : NOOP; + try { + for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex]; + if (job && !(job.flags & 8)) { + if (false) { + continue; + } + if (job.flags & 4) { + job.flags &= ~1; + } + callWithErrorHandling( + job, + job.i, + job.i ? 15 : 14 + ); + if (!(job.flags & 4)) { + job.flags &= ~1; + } + } + } + } finally { + for (; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex]; + if (job) { + job.flags &= ~1; + } + } + flushIndex = -1; + queue.length = 0; + flushPostFlushCbs(seen2); + currentFlushPromise = null; + if (queue.length || pendingPostFlushCbs.length) { + flushJobs(seen2); + } + } +} +__name(flushJobs, "flushJobs"); +function checkRecursiveUpdates(seen2, fn) { + const count = seen2.get(fn) || 0; + if (count > RECURSION_LIMIT) { + const instance = fn.i; + const componentName = instance && getComponentName(instance.type); + handleError( + `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`, + null, + 10 + ); + return true; + } + seen2.set(fn, count + 1); + return false; +} +__name(checkRecursiveUpdates, "checkRecursiveUpdates"); +let isHmrUpdating = false; +const hmrDirtyComponents = /* @__PURE__ */ new Map(); +if (false) { + getGlobalThis$1().__VUE_HMR_RUNTIME__ = { + createRecord: tryWrap(createRecord), + rerender: tryWrap(rerender), + reload: tryWrap(reload) + }; +} +const map$1 = /* @__PURE__ */ new Map(); +function registerHMR(instance) { + const id3 = instance.type.__hmrId; + let record2 = map$1.get(id3); + if (!record2) { + createRecord(id3, instance.type); + record2 = map$1.get(id3); + } + record2.instances.add(instance); +} +__name(registerHMR, "registerHMR"); +function unregisterHMR(instance) { + map$1.get(instance.type.__hmrId).instances.delete(instance); +} +__name(unregisterHMR, "unregisterHMR"); +function createRecord(id3, initialDef) { + if (map$1.has(id3)) { + return false; + } + map$1.set(id3, { + initialDef: normalizeClassComponent(initialDef), + instances: /* @__PURE__ */ new Set() + }); + return true; +} +__name(createRecord, "createRecord"); +function normalizeClassComponent(component) { + return isClassComponent(component) ? component.__vccOpts : component; +} +__name(normalizeClassComponent, "normalizeClassComponent"); +function rerender(id3, newRender) { + const record2 = map$1.get(id3); + if (!record2) { + return; + } + record2.initialDef.render = newRender; + [...record2.instances].forEach((instance) => { + if (newRender) { + instance.render = newRender; + normalizeClassComponent(instance.type).render = newRender; + } + instance.renderCache = []; + isHmrUpdating = true; + instance.update(); + isHmrUpdating = false; + }); +} +__name(rerender, "rerender"); +function reload(id3, newComp) { + const record2 = map$1.get(id3); + if (!record2) return; + newComp = normalizeClassComponent(newComp); + updateComponentDef(record2.initialDef, newComp); + const instances = [...record2.instances]; + for (let i2 = 0; i2 < instances.length; i2++) { + const instance = instances[i2]; + const oldComp = normalizeClassComponent(instance.type); + let dirtyInstances = hmrDirtyComponents.get(oldComp); + if (!dirtyInstances) { + if (oldComp !== record2.initialDef) { + updateComponentDef(oldComp, newComp); + } + hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set()); + } + dirtyInstances.add(instance); + instance.appContext.propsCache.delete(instance.type); + instance.appContext.emitsCache.delete(instance.type); + instance.appContext.optionsCache.delete(instance.type); + if (instance.ceReload) { + dirtyInstances.add(instance); + instance.ceReload(newComp.styles); + dirtyInstances.delete(instance); + } else if (instance.parent) { + queueJob(() => { + isHmrUpdating = true; + instance.parent.update(); + isHmrUpdating = false; + dirtyInstances.delete(instance); + }); + } else if (instance.appContext.reload) { + instance.appContext.reload(); + } else if (typeof window !== "undefined") { + window.location.reload(); + } else { + console.warn( + "[HMR] Root or manually mounted instance modified. Full reload required." + ); + } + if (instance.root.ce && instance !== instance.root) { + instance.root.ce._removeChildStyle(oldComp); + } + } + queuePostFlushCb(() => { + hmrDirtyComponents.clear(); + }); +} +__name(reload, "reload"); +function updateComponentDef(oldComp, newComp) { + extend$1(oldComp, newComp); + for (const key in oldComp) { + if (key !== "__file" && !(key in newComp)) { + delete oldComp[key]; + } + } +} +__name(updateComponentDef, "updateComponentDef"); +function tryWrap(fn) { + return (id3, arg) => { + try { + return fn(id3, arg); + } catch (e2) { + console.error(e2); + console.warn( + `[HMR] Something went wrong during Vue component hot-reload. Full reload required.` + ); + } + }; +} +__name(tryWrap, "tryWrap"); +let devtools$1; +let buffer = []; +let devtoolsNotInstalled = false; +function emit$1(event, ...args) { + if (devtools$1) { + devtools$1.emit(event, ...args); + } else if (!devtoolsNotInstalled) { + buffer.push({ event, args }); + } +} +__name(emit$1, "emit$1"); +function setDevtoolsHook$1(hook, target2) { + var _a2, _b; + devtools$1 = hook; + if (devtools$1) { + devtools$1.enabled = true; + buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args)); + buffer = []; + } else if ( + // handle late devtools injection - only do this if we are in an actual + // browser environment to avoid the timer handle stalling test runner exit + // (#4815) + typeof window !== "undefined" && // some envs mock window but not fully + window.HTMLElement && // also exclude jsdom + // eslint-disable-next-line no-restricted-syntax + !((_b = (_a2 = window.navigator) == null ? void 0 : _a2.userAgent) == null ? void 0 : _b.includes("jsdom")) + ) { + const replay = target2.__VUE_DEVTOOLS_HOOK_REPLAY__ = target2.__VUE_DEVTOOLS_HOOK_REPLAY__ || []; + replay.push((newHook) => { + setDevtoolsHook$1(newHook, target2); + }); + setTimeout(() => { + if (!devtools$1) { + target2.__VUE_DEVTOOLS_HOOK_REPLAY__ = null; + devtoolsNotInstalled = true; + buffer = []; + } + }, 3e3); + } else { + devtoolsNotInstalled = true; + buffer = []; + } +} +__name(setDevtoolsHook$1, "setDevtoolsHook$1"); +function devtoolsInitApp(app2, version2) { + emit$1("app:init", app2, version2, { + Fragment: Fragment$1, + Text: Text$4, + Comment, + Static + }); +} +__name(devtoolsInitApp, "devtoolsInitApp"); +function devtoolsUnmountApp(app2) { + emit$1("app:unmount", app2); +} +__name(devtoolsUnmountApp, "devtoolsUnmountApp"); +const devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook( + "component:added" + /* COMPONENT_ADDED */ +); +const devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook( + "component:updated" + /* COMPONENT_UPDATED */ +); +const _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook( + "component:removed" + /* COMPONENT_REMOVED */ +); +const devtoolsComponentRemoved = /* @__PURE__ */ __name((component) => { + if (devtools$1 && typeof devtools$1.cleanupBuffer === "function" && // remove the component if it wasn't buffered + !devtools$1.cleanupBuffer(component)) { + _devtoolsComponentRemoved(component); + } +}, "devtoolsComponentRemoved"); +/*! #__NO_SIDE_EFFECTS__ */ +// @__NO_SIDE_EFFECTS__ +function createDevtoolsComponentHook(hook) { + return (component) => { + emit$1( + hook, + component.appContext.app, + component.uid, + component.parent ? component.parent.uid : void 0, + component + ); + }; +} +__name(createDevtoolsComponentHook, "createDevtoolsComponentHook"); +const devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook( + "perf:start" + /* PERFORMANCE_START */ +); +const devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook( + "perf:end" + /* PERFORMANCE_END */ +); +function createDevtoolsPerformanceHook(hook) { + return (component, type, time) => { + emit$1(hook, component.appContext.app, component.uid, component, type, time); + }; +} +__name(createDevtoolsPerformanceHook, "createDevtoolsPerformanceHook"); +function devtoolsComponentEmit(component, event, params) { + emit$1( + "component:emit", + component.appContext.app, + component, + event, + params + ); +} +__name(devtoolsComponentEmit, "devtoolsComponentEmit"); +let currentRenderingInstance = null; +let currentScopeId = null; +function setCurrentRenderingInstance(instance) { + const prev2 = currentRenderingInstance; + currentRenderingInstance = instance; + currentScopeId = instance && instance.type.__scopeId || null; + return prev2; +} +__name(setCurrentRenderingInstance, "setCurrentRenderingInstance"); +function pushScopeId(id3) { + currentScopeId = id3; +} +__name(pushScopeId, "pushScopeId"); +function popScopeId() { + currentScopeId = null; +} +__name(popScopeId, "popScopeId"); +const withScopeId = /* @__PURE__ */ __name((_id2) => withCtx, "withScopeId"); +function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { + if (!ctx) return fn; + if (fn._n) { + return fn; + } + const renderFnWithContext = /* @__PURE__ */ __name((...args) => { + if (renderFnWithContext._d) { + setBlockTracking(-1); + } + const prevInstance = setCurrentRenderingInstance(ctx); + let res; + try { + res = fn(...args); + } finally { + setCurrentRenderingInstance(prevInstance); + if (renderFnWithContext._d) { + setBlockTracking(1); + } + } + if (false) { + devtoolsComponentUpdated(ctx); + } + return res; + }, "renderFnWithContext"); + renderFnWithContext._n = true; + renderFnWithContext._c = true; + renderFnWithContext._d = true; + return renderFnWithContext; +} +__name(withCtx, "withCtx"); +function validateDirectiveName(name2) { + if (isBuiltInDirective(name2)) { + warn$1$1("Do not use built-in directive ids as custom directive id: " + name2); + } +} +__name(validateDirectiveName, "validateDirectiveName"); +function withDirectives(vnode, directives) { + if (currentRenderingInstance === null) { + return vnode; + } + const instance = getComponentPublicInstance(currentRenderingInstance); + const bindings = vnode.dirs || (vnode.dirs = []); + for (let i2 = 0; i2 < directives.length; i2++) { + let [dir, value4, arg, modifiers2 = EMPTY_OBJ] = directives[i2]; + if (dir) { + if (isFunction$c(dir)) { + dir = { + mounted: dir, + updated: dir + }; + } + if (dir.deep) { + traverse(value4); + } + bindings.push({ + dir, + instance, + value: value4, + oldValue: void 0, + arg, + modifiers: modifiers2 + }); + } + } + return vnode; +} +__name(withDirectives, "withDirectives"); +function invokeDirectiveHook(vnode, prevVNode, instance, name2) { + const bindings = vnode.dirs; + const oldBindings = prevVNode && prevVNode.dirs; + for (let i2 = 0; i2 < bindings.length; i2++) { + const binding = bindings[i2]; + if (oldBindings) { + binding.oldValue = oldBindings[i2].value; + } + let hook = binding.dir[name2]; + if (hook) { + pauseTracking(); + callWithAsyncErrorHandling(hook, instance, 8, [ + vnode.el, + binding, + vnode, + prevVNode + ]); + resetTracking(); + } + } +} +__name(invokeDirectiveHook, "invokeDirectiveHook"); +const TeleportEndKey = Symbol("_vte"); +const isTeleport = /* @__PURE__ */ __name((type) => type.__isTeleport, "isTeleport"); +const isTeleportDisabled = /* @__PURE__ */ __name((props) => props && (props.disabled || props.disabled === ""), "isTeleportDisabled"); +const isTeleportDeferred = /* @__PURE__ */ __name((props) => props && (props.defer || props.defer === ""), "isTeleportDeferred"); +const isTargetSVG = /* @__PURE__ */ __name((target2) => typeof SVGElement !== "undefined" && target2 instanceof SVGElement, "isTargetSVG"); +const isTargetMathML = /* @__PURE__ */ __name((target2) => typeof MathMLElement === "function" && target2 instanceof MathMLElement, "isTargetMathML"); +const resolveTarget = /* @__PURE__ */ __name((props, select) => { + const targetSelector = props && props.to; + if (isString$9(targetSelector)) { + if (!select) { + return null; + } else { + const target2 = select(targetSelector); + if (false) { + warn$1$1( + `Failed to locate Teleport target with selector "${targetSelector}". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.` + ); + } + return target2; + } + } else { + if (false) { + warn$1$1(`Invalid Teleport target: ${targetSelector}`); + } + return targetSelector; + } +}, "resolveTarget"); +const TeleportImpl = { + name: "Teleport", + __isTeleport: true, + process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) { + const { + mc: mountChildren, + pc: patchChildren, + pbc: patchBlockChildren, + o: { insert: insert2, querySelector, createText, createComment } + } = internals; + const disabled2 = isTeleportDisabled(n2.props); + let { shapeFlag, children, dynamicChildren } = n2; + if (false) { + optimized = false; + dynamicChildren = null; + } + if (n1 == null) { + const placeholder = n2.el = false ? createComment("teleport start") : createText(""); + const mainAnchor = n2.anchor = false ? createComment("teleport end") : createText(""); + insert2(placeholder, container, anchor); + insert2(mainAnchor, container, anchor); + const mount2 = /* @__PURE__ */ __name((container2, anchor2) => { + if (shapeFlag & 16) { + if (parentComponent && parentComponent.isCE) { + parentComponent.ce._teleportTarget = container2; + } + mountChildren( + children, + container2, + anchor2, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized + ); + } + }, "mount"); + const mountToTarget = /* @__PURE__ */ __name(() => { + const target2 = n2.target = resolveTarget(n2.props, querySelector); + const targetAnchor = prepareAnchor(target2, n2, createText, insert2); + if (target2) { + if (namespace !== "svg" && isTargetSVG(target2)) { + namespace = "svg"; + } else if (namespace !== "mathml" && isTargetMathML(target2)) { + namespace = "mathml"; + } + if (!disabled2) { + mount2(target2, targetAnchor); + updateCssVars(n2, false); + } + } else if (false) { + warn$1$1( + "Invalid Teleport target on mount:", + target2, + `(${typeof target2})` + ); + } + }, "mountToTarget"); + if (disabled2) { + mount2(container, mainAnchor); + updateCssVars(n2, true); + } + if (isTeleportDeferred(n2.props)) { + queuePostRenderEffect(() => { + mountToTarget(); + n2.el.__isMounted = true; + }, parentSuspense); + } else { + mountToTarget(); + } + } else { + if (isTeleportDeferred(n2.props) && !n1.el.__isMounted) { + queuePostRenderEffect(() => { + TeleportImpl.process( + n1, + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized, + internals + ); + delete n1.el.__isMounted; + }, parentSuspense); + return; + } + n2.el = n1.el; + n2.targetStart = n1.targetStart; + const mainAnchor = n2.anchor = n1.anchor; + const target2 = n2.target = n1.target; + const targetAnchor = n2.targetAnchor = n1.targetAnchor; + const wasDisabled = isTeleportDisabled(n1.props); + const currentContainer = wasDisabled ? container : target2; + const currentAnchor = wasDisabled ? mainAnchor : targetAnchor; + if (namespace === "svg" || isTargetSVG(target2)) { + namespace = "svg"; + } else if (namespace === "mathml" || isTargetMathML(target2)) { + namespace = "mathml"; + } + if (dynamicChildren) { + patchBlockChildren( + n1.dynamicChildren, + dynamicChildren, + currentContainer, + parentComponent, + parentSuspense, + namespace, + slotScopeIds + ); + traverseStaticChildren(n1, n2, true); + } else if (!optimized) { + patchChildren( + n1, + n2, + currentContainer, + currentAnchor, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + false + ); + } + if (disabled2) { + if (!wasDisabled) { + moveTeleport( + n2, + container, + mainAnchor, + internals, + 1 + ); + } else { + if (n2.props && n1.props && n2.props.to !== n1.props.to) { + n2.props.to = n1.props.to; + } + } + } else { + if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) { + const nextTarget = n2.target = resolveTarget( + n2.props, + querySelector + ); + if (nextTarget) { + moveTeleport( + n2, + nextTarget, + null, + internals, + 0 + ); + } else if (false) { + warn$1$1( + "Invalid Teleport target on update:", + target2, + `(${typeof target2})` + ); + } + } else if (wasDisabled) { + moveTeleport( + n2, + target2, + targetAnchor, + internals, + 1 + ); + } + } + updateCssVars(n2, disabled2); + } + }, + remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) { + const { + shapeFlag, + children, + anchor, + targetStart, + targetAnchor, + target: target2, + props + } = vnode; + if (target2) { + hostRemove(targetStart); + hostRemove(targetAnchor); + } + doRemove && hostRemove(anchor); + if (shapeFlag & 16) { + const shouldRemove = doRemove || !isTeleportDisabled(props); + for (let i2 = 0; i2 < children.length; i2++) { + const child = children[i2]; + unmount( + child, + parentComponent, + parentSuspense, + shouldRemove, + !!child.dynamicChildren + ); + } + } + }, + move: moveTeleport, + hydrate: hydrateTeleport +}; +function moveTeleport(vnode, container, parentAnchor, { o: { insert: insert2 }, m: move }, moveType = 2) { + if (moveType === 0) { + insert2(vnode.targetAnchor, container, parentAnchor); + } + const { el, anchor, shapeFlag, children, props } = vnode; + const isReorder = moveType === 2; + if (isReorder) { + insert2(el, container, parentAnchor); + } + if (!isReorder || isTeleportDisabled(props)) { + if (shapeFlag & 16) { + for (let i2 = 0; i2 < children.length; i2++) { + move( + children[i2], + container, + parentAnchor, + 2 + ); + } + } + } + if (isReorder) { + insert2(anchor, container, parentAnchor); + } +} +__name(moveTeleport, "moveTeleport"); +function hydrateTeleport(node3, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, { + o: { nextSibling, parentNode: parentNode2, querySelector, insert: insert2, createText } +}, hydrateChildren) { + const target2 = vnode.target = resolveTarget( + vnode.props, + querySelector + ); + if (target2) { + const disabled2 = isTeleportDisabled(vnode.props); + const targetNode = target2._lpa || target2.firstChild; + if (vnode.shapeFlag & 16) { + if (disabled2) { + vnode.anchor = hydrateChildren( + nextSibling(node3), + vnode, + parentNode2(node3), + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + vnode.targetStart = targetNode; + vnode.targetAnchor = targetNode && nextSibling(targetNode); + } else { + vnode.anchor = nextSibling(node3); + let targetAnchor = targetNode; + while (targetAnchor) { + if (targetAnchor && targetAnchor.nodeType === 8) { + if (targetAnchor.data === "teleport start anchor") { + vnode.targetStart = targetAnchor; + } else if (targetAnchor.data === "teleport anchor") { + vnode.targetAnchor = targetAnchor; + target2._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor); + break; + } + } + targetAnchor = nextSibling(targetAnchor); + } + if (!vnode.targetAnchor) { + prepareAnchor(target2, vnode, createText, insert2); + } + hydrateChildren( + targetNode && nextSibling(targetNode), + vnode, + target2, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + } + } + updateCssVars(vnode, disabled2); + } + return vnode.anchor && nextSibling(vnode.anchor); +} +__name(hydrateTeleport, "hydrateTeleport"); +const Teleport = TeleportImpl; +function updateCssVars(vnode, isDisabled) { + const ctx = vnode.ctx; + if (ctx && ctx.ut) { + let node3, anchor; + if (isDisabled) { + node3 = vnode.el; + anchor = vnode.anchor; + } else { + node3 = vnode.targetStart; + anchor = vnode.targetAnchor; + } + while (node3 && node3 !== anchor) { + if (node3.nodeType === 1) node3.setAttribute("data-v-owner", ctx.uid); + node3 = node3.nextSibling; + } + ctx.ut(); + } +} +__name(updateCssVars, "updateCssVars"); +function prepareAnchor(target2, vnode, createText, insert2) { + const targetStart = vnode.targetStart = createText(""); + const targetAnchor = vnode.targetAnchor = createText(""); + targetStart[TeleportEndKey] = targetAnchor; + if (target2) { + insert2(targetStart, target2); + insert2(targetAnchor, target2); + } + return targetAnchor; +} +__name(prepareAnchor, "prepareAnchor"); +const leaveCbKey = Symbol("_leaveCb"); +const enterCbKey$1 = Symbol("_enterCb"); +function useTransitionState() { + const state = { + isMounted: false, + isLeaving: false, + isUnmounting: false, + leavingVNodes: /* @__PURE__ */ new Map() + }; + onMounted(() => { + state.isMounted = true; + }); + onBeforeUnmount(() => { + state.isUnmounting = true; + }); + return state; +} +__name(useTransitionState, "useTransitionState"); +const TransitionHookValidator = [Function, Array]; +const BaseTransitionPropsValidators = { + mode: String, + appear: Boolean, + persisted: Boolean, + // enter + onBeforeEnter: TransitionHookValidator, + onEnter: TransitionHookValidator, + onAfterEnter: TransitionHookValidator, + onEnterCancelled: TransitionHookValidator, + // leave + onBeforeLeave: TransitionHookValidator, + onLeave: TransitionHookValidator, + onAfterLeave: TransitionHookValidator, + onLeaveCancelled: TransitionHookValidator, + // appear + onBeforeAppear: TransitionHookValidator, + onAppear: TransitionHookValidator, + onAfterAppear: TransitionHookValidator, + onAppearCancelled: TransitionHookValidator +}; +const recursiveGetSubtree = /* @__PURE__ */ __name((instance) => { + const subTree = instance.subTree; + return subTree.component ? recursiveGetSubtree(subTree.component) : subTree; +}, "recursiveGetSubtree"); +const BaseTransitionImpl = { + name: `BaseTransition`, + props: BaseTransitionPropsValidators, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const state = useTransitionState(); + return () => { + const children = slots.default && getTransitionRawChildren(slots.default(), true); + if (!children || !children.length) { + return; + } + const child = findNonCommentChild(children); + const rawProps = toRaw(props); + const { mode: mode2 } = rawProps; + if (false) { + warn$1$1(`invalid mode: ${mode2}`); + } + if (state.isLeaving) { + return emptyPlaceholder(child); + } + const innerChild = getInnerChild$1(child); + if (!innerChild) { + return emptyPlaceholder(child); + } + let enterHooks = resolveTransitionHooks( + innerChild, + rawProps, + state, + instance, + // #11061, ensure enterHooks is fresh after clone + (hooks2) => enterHooks = hooks2 + ); + if (innerChild.type !== Comment) { + setTransitionHooks(innerChild, enterHooks); + } + let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree); + if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild) && recursiveGetSubtree(instance).type !== Comment) { + let leavingHooks = resolveTransitionHooks( + oldInnerChild, + rawProps, + state, + instance + ); + setTransitionHooks(oldInnerChild, leavingHooks); + if (mode2 === "out-in" && innerChild.type !== Comment) { + state.isLeaving = true; + leavingHooks.afterLeave = () => { + state.isLeaving = false; + if (!(instance.job.flags & 8)) { + instance.update(); + } + delete leavingHooks.afterLeave; + oldInnerChild = void 0; + }; + return emptyPlaceholder(child); + } else if (mode2 === "in-out" && innerChild.type !== Comment) { + leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { + const leavingVNodesCache = getLeavingNodesForType( + state, + oldInnerChild + ); + leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; + el[leaveCbKey] = () => { + earlyRemove(); + el[leaveCbKey] = void 0; + delete enterHooks.delayedLeave; + oldInnerChild = void 0; + }; + enterHooks.delayedLeave = () => { + delayedLeave(); + delete enterHooks.delayedLeave; + oldInnerChild = void 0; + }; + }; + } else { + oldInnerChild = void 0; + } + } else if (oldInnerChild) { + oldInnerChild = void 0; + } + return child; + }; + } +}; +function findNonCommentChild(children) { + let child = children[0]; + if (children.length > 1) { + let hasFound = false; + for (const c2 of children) { + if (c2.type !== Comment) { + if (false) { + warn$1$1( + " can only be used on a single element or component. Use for lists." + ); + break; + } + child = c2; + hasFound = true; + if (true) break; + } + } + } + return child; +} +__name(findNonCommentChild, "findNonCommentChild"); +const BaseTransition = BaseTransitionImpl; +function getLeavingNodesForType(state, vnode) { + const { leavingVNodes } = state; + let leavingVNodesCache = leavingVNodes.get(vnode.type); + if (!leavingVNodesCache) { + leavingVNodesCache = /* @__PURE__ */ Object.create(null); + leavingVNodes.set(vnode.type, leavingVNodesCache); + } + return leavingVNodesCache; +} +__name(getLeavingNodesForType, "getLeavingNodesForType"); +function resolveTransitionHooks(vnode, props, state, instance, postClone) { + const { + appear, + mode: mode2, + persisted = false, + onBeforeEnter: onBeforeEnter2, + onEnter: onEnter7, + onAfterEnter: onAfterEnter4, + onEnterCancelled, + onBeforeLeave: onBeforeLeave3, + onLeave: onLeave5, + onAfterLeave: onAfterLeave6, + onLeaveCancelled, + onBeforeAppear, + onAppear, + onAfterAppear, + onAppearCancelled + } = props; + const key = String(vnode.key); + const leavingVNodesCache = getLeavingNodesForType(state, vnode); + const callHook2 = /* @__PURE__ */ __name((hook, args) => { + hook && callWithAsyncErrorHandling( + hook, + instance, + 9, + args + ); + }, "callHook2"); + const callAsyncHook = /* @__PURE__ */ __name((hook, args) => { + const done = args[1]; + callHook2(hook, args); + if (isArray$b(hook)) { + if (hook.every((hook2) => hook2.length <= 1)) done(); + } else if (hook.length <= 1) { + done(); + } + }, "callAsyncHook"); + const hooks2 = { + mode: mode2, + persisted, + beforeEnter(el) { + let hook = onBeforeEnter2; + if (!state.isMounted) { + if (appear) { + hook = onBeforeAppear || onBeforeEnter2; + } else { + return; + } + } + if (el[leaveCbKey]) { + el[leaveCbKey]( + true + /* cancelled */ + ); + } + const leavingVNode = leavingVNodesCache[key]; + if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) { + leavingVNode.el[leaveCbKey](); + } + callHook2(hook, [el]); + }, + enter(el) { + let hook = onEnter7; + let afterHook = onAfterEnter4; + let cancelHook = onEnterCancelled; + if (!state.isMounted) { + if (appear) { + hook = onAppear || onEnter7; + afterHook = onAfterAppear || onAfterEnter4; + cancelHook = onAppearCancelled || onEnterCancelled; + } else { + return; + } + } + let called = false; + const done = el[enterCbKey$1] = (cancelled) => { + if (called) return; + called = true; + if (cancelled) { + callHook2(cancelHook, [el]); + } else { + callHook2(afterHook, [el]); + } + if (hooks2.delayedLeave) { + hooks2.delayedLeave(); + } + el[enterCbKey$1] = void 0; + }; + if (hook) { + callAsyncHook(hook, [el, done]); + } else { + done(); + } + }, + leave(el, remove22) { + const key2 = String(vnode.key); + if (el[enterCbKey$1]) { + el[enterCbKey$1]( + true + /* cancelled */ + ); + } + if (state.isUnmounting) { + return remove22(); + } + callHook2(onBeforeLeave3, [el]); + let called = false; + const done = el[leaveCbKey] = (cancelled) => { + if (called) return; + called = true; + remove22(); + if (cancelled) { + callHook2(onLeaveCancelled, [el]); + } else { + callHook2(onAfterLeave6, [el]); + } + el[leaveCbKey] = void 0; + if (leavingVNodesCache[key2] === vnode) { + delete leavingVNodesCache[key2]; + } + }; + leavingVNodesCache[key2] = vnode; + if (onLeave5) { + callAsyncHook(onLeave5, [el, done]); + } else { + done(); + } + }, + clone(vnode2) { + const hooks22 = resolveTransitionHooks( + vnode2, + props, + state, + instance, + postClone + ); + if (postClone) postClone(hooks22); + return hooks22; + } + }; + return hooks2; +} +__name(resolveTransitionHooks, "resolveTransitionHooks"); +function emptyPlaceholder(vnode) { + if (isKeepAlive(vnode)) { + vnode = cloneVNode(vnode); + vnode.children = null; + return vnode; + } +} +__name(emptyPlaceholder, "emptyPlaceholder"); +function getInnerChild$1(vnode) { + if (!isKeepAlive(vnode)) { + if (isTeleport(vnode.type) && vnode.children) { + return findNonCommentChild(vnode.children); + } + return vnode; + } + if (false) { + return vnode.component.subTree; + } + const { shapeFlag, children } = vnode; + if (children) { + if (shapeFlag & 16) { + return children[0]; + } + if (shapeFlag & 32 && isFunction$c(children.default)) { + return children.default(); + } + } +} +__name(getInnerChild$1, "getInnerChild$1"); +function setTransitionHooks(vnode, hooks2) { + if (vnode.shapeFlag & 6 && vnode.component) { + vnode.transition = hooks2; + setTransitionHooks(vnode.component.subTree, hooks2); + } else if (vnode.shapeFlag & 128) { + vnode.ssContent.transition = hooks2.clone(vnode.ssContent); + vnode.ssFallback.transition = hooks2.clone(vnode.ssFallback); + } else { + vnode.transition = hooks2; + } +} +__name(setTransitionHooks, "setTransitionHooks"); +function getTransitionRawChildren(children, keepComment = false, parentKey) { + let ret = []; + let keyedFragmentCount = 0; + for (let i2 = 0; i2 < children.length; i2++) { + let child = children[i2]; + const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i2); + if (child.type === Fragment$1) { + if (child.patchFlag & 128) keyedFragmentCount++; + ret = ret.concat( + getTransitionRawChildren(child.children, keepComment, key) + ); + } else if (keepComment || child.type !== Comment) { + ret.push(key != null ? cloneVNode(child, { key }) : child); + } + } + if (keyedFragmentCount > 1) { + for (let i2 = 0; i2 < ret.length; i2++) { + ret[i2].patchFlag = -2; + } + } + return ret; +} +__name(getTransitionRawChildren, "getTransitionRawChildren"); +/*! #__NO_SIDE_EFFECTS__ */ +// @__NO_SIDE_EFFECTS__ +function defineComponent(options4, extraOptions) { + return isFunction$c(options4) ? ( + // #8236: extend call and options.name access are considered side-effects + // by Rollup, so we have to wrap it in a pure-annotated IIFE. + /* @__PURE__ */ (() => extend$1({ name: options4.name }, extraOptions, { setup: options4 }))() + ) : options4; +} +__name(defineComponent, "defineComponent"); +function useId() { + const i2 = getCurrentInstance(); + if (i2) { + return (i2.appContext.config.idPrefix || "v") + "-" + i2.ids[0] + i2.ids[1]++; + } else if (false) { + warn$1$1( + `useId() is called when there is no active component instance to be associated with.` + ); + } + return ""; +} +__name(useId, "useId"); +function markAsyncBoundary(instance) { + instance.ids = [instance.ids[0] + instance.ids[2]++ + "-", 0, 0]; +} +__name(markAsyncBoundary, "markAsyncBoundary"); +const knownTemplateRefs = /* @__PURE__ */ new WeakSet(); +function useTemplateRef(key) { + const i2 = getCurrentInstance(); + const r2 = shallowRef(null); + if (i2) { + const refs = i2.refs === EMPTY_OBJ ? i2.refs = {} : i2.refs; + let desc; + if (false) { + warn$1$1(`useTemplateRef('${key}') already exists.`); + } else { + Object.defineProperty(refs, key, { + enumerable: true, + get: /* @__PURE__ */ __name(() => r2.value, "get"), + set: /* @__PURE__ */ __name((val) => r2.value = val, "set") + }); + } + } else if (false) { + warn$1$1( + `useTemplateRef() is called when there is no active component instance to be associated with.` + ); + } + const ret = false ? readonly(r2) : r2; + if (false) { + knownTemplateRefs.add(ret); + } + return ret; +} +__name(useTemplateRef, "useTemplateRef"); +function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) { + if (isArray$b(rawRef)) { + rawRef.forEach( + (r2, i2) => setRef( + r2, + oldRawRef && (isArray$b(oldRawRef) ? oldRawRef[i2] : oldRawRef), + parentSuspense, + vnode, + isUnmount + ) + ); + return; + } + if (isAsyncWrapper(vnode) && !isUnmount) { + if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) { + setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree); + } + return; + } + const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el; + const value4 = isUnmount ? null : refValue; + const { i: owner, r: ref3 } = rawRef; + if (false) { + warn$1$1( + `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.` + ); + return; + } + const oldRef = oldRawRef && oldRawRef.r; + const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs; + const setupState = owner.setupState; + const rawSetupState = toRaw(setupState); + const canSetSetupRef = setupState === EMPTY_OBJ ? () => false : (key) => { + if (false) { + if (hasOwn$3(rawSetupState, key) && !isRef(rawSetupState[key])) { + warn$1$1( + `Template ref "${key}" used on a non-ref value. It will not work in the production build.` + ); + } + if (knownTemplateRefs.has(rawSetupState[key])) { + return false; + } + } + return hasOwn$3(rawSetupState, key); + }; + if (oldRef != null && oldRef !== ref3) { + if (isString$9(oldRef)) { + refs[oldRef] = null; + if (canSetSetupRef(oldRef)) { + setupState[oldRef] = null; + } + } else if (isRef(oldRef)) { + oldRef.value = null; + } + } + if (isFunction$c(ref3)) { + callWithErrorHandling(ref3, owner, 12, [value4, refs]); + } else { + const _isString = isString$9(ref3); + const _isRef = isRef(ref3); + if (_isString || _isRef) { + const doSet = /* @__PURE__ */ __name(() => { + if (rawRef.f) { + const existing = _isString ? canSetSetupRef(ref3) ? setupState[ref3] : refs[ref3] : ref3.value; + if (isUnmount) { + isArray$b(existing) && remove$2(existing, refValue); + } else { + if (!isArray$b(existing)) { + if (_isString) { + refs[ref3] = [refValue]; + if (canSetSetupRef(ref3)) { + setupState[ref3] = refs[ref3]; + } + } else { + ref3.value = [refValue]; + if (rawRef.k) refs[rawRef.k] = ref3.value; + } + } else if (!existing.includes(refValue)) { + existing.push(refValue); + } + } + } else if (_isString) { + refs[ref3] = value4; + if (canSetSetupRef(ref3)) { + setupState[ref3] = value4; + } + } else if (_isRef) { + ref3.value = value4; + if (rawRef.k) refs[rawRef.k] = value4; + } else if (false) { + warn$1$1("Invalid template ref type:", ref3, `(${typeof ref3})`); + } + }, "doSet"); + if (value4) { + doSet.id = -1; + queuePostRenderEffect(doSet, parentSuspense); + } else { + doSet(); + } + } else if (false) { + warn$1$1("Invalid template ref type:", ref3, `(${typeof ref3})`); + } + } +} +__name(setRef, "setRef"); +let hasLoggedMismatchError = false; +const logMismatchError = /* @__PURE__ */ __name(() => { + if (hasLoggedMismatchError) { + return; + } + console.error("Hydration completed but contains mismatches."); + hasLoggedMismatchError = true; +}, "logMismatchError"); +const isSVGContainer = /* @__PURE__ */ __name((container) => container.namespaceURI.includes("svg") && container.tagName !== "foreignObject", "isSVGContainer"); +const isMathMLContainer = /* @__PURE__ */ __name((container) => container.namespaceURI.includes("MathML"), "isMathMLContainer"); +const getContainerType = /* @__PURE__ */ __name((container) => { + if (container.nodeType !== 1) return void 0; + if (isSVGContainer(container)) return "svg"; + if (isMathMLContainer(container)) return "mathml"; + return void 0; +}, "getContainerType"); +const isComment = /* @__PURE__ */ __name((node3) => node3.nodeType === 8, "isComment"); +function createHydrationFunctions(rendererInternals) { + const { + mt: mountComponent, + p: patch2, + o: { + patchProp: patchProp2, + createText, + nextSibling, + parentNode: parentNode2, + remove: remove22, + insert: insert2, + createComment + } + } = rendererInternals; + const hydrate2 = /* @__PURE__ */ __name((vnode, container) => { + if (!container.hasChildNodes()) { + patch2(null, vnode, container); + flushPostFlushCbs(); + container._vnode = vnode; + return; + } + hydrateNode(container.firstChild, vnode, null, null, null); + flushPostFlushCbs(); + container._vnode = vnode; + }, "hydrate"); + const hydrateNode = /* @__PURE__ */ __name((node3, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => { + optimized = optimized || !!vnode.dynamicChildren; + const isFragmentStart = isComment(node3) && node3.data === "["; + const onMismatch = /* @__PURE__ */ __name(() => handleMismatch( + node3, + vnode, + parentComponent, + parentSuspense, + slotScopeIds, + isFragmentStart + ), "onMismatch"); + const { type, ref: ref3, shapeFlag, patchFlag } = vnode; + let domType = node3.nodeType; + vnode.el = node3; + if (false) { + def(node3, "__vnode", vnode, true); + def(node3, "__vueParentComponent", parentComponent, true); + } + if (patchFlag === -2) { + optimized = false; + vnode.dynamicChildren = null; + } + let nextNode = null; + switch (type) { + case Text$4: + if (domType !== 3) { + if (vnode.children === "") { + insert2(vnode.el = createText(""), parentNode2(node3), node3); + nextNode = node3; + } else { + nextNode = onMismatch(); + } + } else { + if (node3.data !== vnode.children) { + logMismatchError(); + node3.data = vnode.children; + } + nextNode = nextSibling(node3); + } + break; + case Comment: + if (isTemplateNode(node3)) { + nextNode = nextSibling(node3); + replaceNode( + vnode.el = node3.content.firstChild, + node3, + parentComponent + ); + } else if (domType !== 8 || isFragmentStart) { + nextNode = onMismatch(); + } else { + nextNode = nextSibling(node3); + } + break; + case Static: + if (isFragmentStart) { + node3 = nextSibling(node3); + domType = node3.nodeType; + } + if (domType === 1 || domType === 3) { + nextNode = node3; + const needToAdoptContent = !vnode.children.length; + for (let i2 = 0; i2 < vnode.staticCount; i2++) { + if (needToAdoptContent) + vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data; + if (i2 === vnode.staticCount - 1) { + vnode.anchor = nextNode; + } + nextNode = nextSibling(nextNode); + } + return isFragmentStart ? nextSibling(nextNode) : nextNode; + } else { + onMismatch(); + } + break; + case Fragment$1: + if (!isFragmentStart) { + nextNode = onMismatch(); + } else { + nextNode = hydrateFragment( + node3, + vnode, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + } + break; + default: + if (shapeFlag & 1) { + if ((domType !== 1 || vnode.type.toLowerCase() !== node3.tagName.toLowerCase()) && !isTemplateNode(node3)) { + nextNode = onMismatch(); + } else { + nextNode = hydrateElement( + node3, + vnode, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + } + } else if (shapeFlag & 6) { + vnode.slotScopeIds = slotScopeIds; + const container = parentNode2(node3); + if (isFragmentStart) { + nextNode = locateClosingAnchor(node3); + } else if (isComment(node3) && node3.data === "teleport start") { + nextNode = locateClosingAnchor(node3, node3.data, "teleport end"); + } else { + nextNode = nextSibling(node3); + } + mountComponent( + vnode, + container, + null, + parentComponent, + parentSuspense, + getContainerType(container), + optimized + ); + if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) { + let subTree; + if (isFragmentStart) { + subTree = createVNode(Fragment$1); + subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild; + } else { + subTree = node3.nodeType === 3 ? createTextVNode("") : createVNode("div"); + } + subTree.el = node3; + vnode.component.subTree = subTree; + } + } else if (shapeFlag & 64) { + if (domType !== 8) { + nextNode = onMismatch(); + } else { + nextNode = vnode.type.hydrate( + node3, + vnode, + parentComponent, + parentSuspense, + slotScopeIds, + optimized, + rendererInternals, + hydrateChildren + ); + } + } else if (shapeFlag & 128) { + nextNode = vnode.type.hydrate( + node3, + vnode, + parentComponent, + parentSuspense, + getContainerType(parentNode2(node3)), + slotScopeIds, + optimized, + rendererInternals, + hydrateNode + ); + } else if (false) { + warn$1$1("Invalid HostVNode type:", type, `(${typeof type})`); + } + } + if (ref3 != null) { + setRef(ref3, null, parentSuspense, vnode); + } + return nextNode; + }, "hydrateNode"); + const hydrateElement = /* @__PURE__ */ __name((el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { + optimized = optimized || !!vnode.dynamicChildren; + const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode; + const forcePatch = type === "input" || type === "option"; + if (forcePatch || patchFlag !== -1) { + if (dirs) { + invokeDirectiveHook(vnode, null, parentComponent, "created"); + } + let needCallTransitionHooks = false; + if (isTemplateNode(el)) { + needCallTransitionHooks = needTransition( + null, + // no need check parentSuspense in hydration + transition + ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear; + const content2 = el.content.firstChild; + if (needCallTransitionHooks) { + transition.beforeEnter(content2); + } + replaceNode(content2, el, parentComponent); + vnode.el = el = content2; + } + if (shapeFlag & 16 && // skip if element has innerHTML / textContent + !(props && (props.innerHTML || props.textContent))) { + let next2 = hydrateChildren( + el.firstChild, + vnode, + el, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + let hasWarned2 = false; + while (next2) { + if (!isMismatchAllowed( + el, + 1 + /* CHILDREN */ + )) { + if (false) { + warn$1$1( + `Hydration children mismatch on`, + el, + ` +Server rendered element contains more child nodes than client vdom.` + ); + hasWarned2 = true; + } + logMismatchError(); + } + const cur = next2; + next2 = next2.nextSibling; + remove22(cur); + } + } else if (shapeFlag & 8) { + let clientText = vnode.children; + if (clientText[0] === "\n" && (el.tagName === "PRE" || el.tagName === "TEXTAREA")) { + clientText = clientText.slice(1); + } + if (el.textContent !== clientText) { + if (!isMismatchAllowed( + el, + 0 + /* TEXT */ + )) { + logMismatchError(); + } + el.textContent = vnode.children; + } + } + if (props) { + if (forcePatch || !optimized || patchFlag & (16 | 32)) { + const isCustomElement = el.tagName.includes("-"); + for (const key in props) { + if (false) { + logMismatchError(); + } + if (forcePatch && (key.endsWith("value") || key === "indeterminate") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers + key[0] === "." || isCustomElement) { + patchProp2(el, key, null, props[key], void 0, parentComponent); + } + } + } else if (props.onClick) { + patchProp2( + el, + "onClick", + null, + props.onClick, + void 0, + parentComponent + ); + } else if (patchFlag & 4 && isReactive(props.style)) { + for (const key in props.style) props.style[key]; + } + } + let vnodeHooks; + if (vnodeHooks = props && props.onVnodeBeforeMount) { + invokeVNodeHook(vnodeHooks, parentComponent, vnode); + } + if (dirs) { + invokeDirectiveHook(vnode, null, parentComponent, "beforeMount"); + } + if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) { + queueEffectWithSuspense(() => { + vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode); + needCallTransitionHooks && transition.enter(el); + dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted"); + }, parentSuspense); + } + } + return el.nextSibling; + }, "hydrateElement"); + const hydrateChildren = /* @__PURE__ */ __name((node3, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => { + optimized = optimized || !!parentVNode.dynamicChildren; + const children = parentVNode.children; + const l2 = children.length; + let hasWarned2 = false; + for (let i2 = 0; i2 < l2; i2++) { + const vnode = optimized ? children[i2] : children[i2] = normalizeVNode(children[i2]); + const isText = vnode.type === Text$4; + if (node3) { + if (isText && !optimized) { + if (i2 + 1 < l2 && normalizeVNode(children[i2 + 1]).type === Text$4) { + insert2( + createText( + node3.data.slice(vnode.children.length) + ), + container, + nextSibling(node3) + ); + node3.data = vnode.children; + } + } + node3 = hydrateNode( + node3, + vnode, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + } else if (isText && !vnode.children) { + insert2(vnode.el = createText(""), container); + } else { + if (!isMismatchAllowed( + container, + 1 + /* CHILDREN */ + )) { + if (false) { + warn$1$1( + `Hydration children mismatch on`, + container, + ` +Server rendered element contains fewer child nodes than client vdom.` + ); + hasWarned2 = true; + } + logMismatchError(); + } + patch2( + null, + vnode, + container, + null, + parentComponent, + parentSuspense, + getContainerType(container), + slotScopeIds + ); + } + } + return node3; + }, "hydrateChildren"); + const hydrateFragment = /* @__PURE__ */ __name((node3, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { + const { slotScopeIds: fragmentSlotScopeIds } = vnode; + if (fragmentSlotScopeIds) { + slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds; + } + const container = parentNode2(node3); + const next2 = hydrateChildren( + nextSibling(node3), + vnode, + container, + parentComponent, + parentSuspense, + slotScopeIds, + optimized + ); + if (next2 && isComment(next2) && next2.data === "]") { + return nextSibling(vnode.anchor = next2); + } else { + logMismatchError(); + insert2(vnode.anchor = createComment(`]`), container, next2); + return next2; + } + }, "hydrateFragment"); + const handleMismatch = /* @__PURE__ */ __name((node3, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment2) => { + if (!isMismatchAllowed( + node3.parentElement, + 1 + /* CHILDREN */ + )) { + logMismatchError(); + } + vnode.el = null; + if (isFragment2) { + const end = locateClosingAnchor(node3); + while (true) { + const next22 = nextSibling(node3); + if (next22 && next22 !== end) { + remove22(next22); + } else { + break; + } + } + } + const next2 = nextSibling(node3); + const container = parentNode2(node3); + remove22(node3); + patch2( + null, + vnode, + container, + next2, + parentComponent, + parentSuspense, + getContainerType(container), + slotScopeIds + ); + if (parentComponent) { + parentComponent.vnode.el = vnode.el; + updateHOCHostEl(parentComponent, vnode.el); + } + return next2; + }, "handleMismatch"); + const locateClosingAnchor = /* @__PURE__ */ __name((node3, open2 = "[", close5 = "]") => { + let match2 = 0; + while (node3) { + node3 = nextSibling(node3); + if (node3 && isComment(node3)) { + if (node3.data === open2) match2++; + if (node3.data === close5) { + if (match2 === 0) { + return nextSibling(node3); + } else { + match2--; + } + } + } + } + return node3; + }, "locateClosingAnchor"); + const replaceNode = /* @__PURE__ */ __name((newNode, oldNode, parentComponent) => { + const parentNode22 = oldNode.parentNode; + if (parentNode22) { + parentNode22.replaceChild(newNode, oldNode); + } + let parent = parentComponent; + while (parent) { + if (parent.vnode.el === oldNode) { + parent.vnode.el = parent.subTree.el = newNode; + } + parent = parent.parent; + } + }, "replaceNode"); + const isTemplateNode = /* @__PURE__ */ __name((node3) => { + return node3.nodeType === 1 && node3.tagName === "TEMPLATE"; + }, "isTemplateNode"); + return [hydrate2, hydrateNode]; +} +__name(createHydrationFunctions, "createHydrationFunctions"); +function propHasMismatch(el, key, clientValue, vnode, instance) { + let mismatchType; + let mismatchKey; + let actual; + let expected; + if (key === "class") { + actual = el.getAttribute("class"); + expected = normalizeClass(clientValue); + if (!isSetEqual(toClassSet(actual || ""), toClassSet(expected))) { + mismatchType = 2; + mismatchKey = `class`; + } + } else if (key === "style") { + actual = el.getAttribute("style") || ""; + expected = isString$9(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue)); + const actualMap = toStyleMap(actual); + const expectedMap = toStyleMap(expected); + if (vnode.dirs) { + for (const { dir, value: value4 } of vnode.dirs) { + if (dir.name === "show" && !value4) { + expectedMap.set("display", "none"); + } + } + } + if (instance) { + resolveCssVars(instance, vnode, expectedMap); + } + if (!isMapEqual(actualMap, expectedMap)) { + mismatchType = 3; + mismatchKey = "style"; + } + } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) { + if (isBooleanAttr(key)) { + actual = el.hasAttribute(key); + expected = includeBooleanAttr(clientValue); + } else if (clientValue == null) { + actual = el.hasAttribute(key); + expected = false; + } else { + if (el.hasAttribute(key)) { + actual = el.getAttribute(key); + } else if (key === "value" && el.tagName === "TEXTAREA") { + actual = el.value; + } else { + actual = false; + } + expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false; + } + if (actual !== expected) { + mismatchType = 4; + mismatchKey = key; + } + } + if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) { + const format2 = /* @__PURE__ */ __name((v2) => v2 === false ? `(not rendered)` : `${mismatchKey}="${v2}"`, "format"); + const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`; + const postSegment = ` + - rendered on server: ${format2(actual)} + - expected on client: ${format2(expected)} + Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead. + You should fix the source of the mismatch.`; + { + warn$1$1(preSegment, el, postSegment); + } + return true; + } + return false; +} +__name(propHasMismatch, "propHasMismatch"); +function toClassSet(str) { + return new Set(str.trim().split(/\s+/)); +} +__name(toClassSet, "toClassSet"); +function isSetEqual(a2, b2) { + if (a2.size !== b2.size) { + return false; + } + for (const s2 of a2) { + if (!b2.has(s2)) { + return false; + } + } + return true; +} +__name(isSetEqual, "isSetEqual"); +function toStyleMap(str) { + const styleMap = /* @__PURE__ */ new Map(); + for (const item3 of str.split(";")) { + let [key, value4] = item3.split(":"); + key = key.trim(); + value4 = value4 && value4.trim(); + if (key && value4) { + styleMap.set(key, value4); + } + } + return styleMap; +} +__name(toStyleMap, "toStyleMap"); +function isMapEqual(a2, b2) { + if (a2.size !== b2.size) { + return false; + } + for (const [key, value4] of a2) { + if (value4 !== b2.get(key)) { + return false; + } + } + return true; +} +__name(isMapEqual, "isMapEqual"); +function resolveCssVars(instance, vnode, expectedMap) { + const root29 = instance.subTree; + if (instance.getCssVars && (vnode === root29 || root29 && root29.type === Fragment$1 && root29.children.includes(vnode))) { + const cssVars = instance.getCssVars(); + for (const key in cssVars) { + expectedMap.set( + `--${getEscapedCssVarName(key, false)}`, + String(cssVars[key]) + ); + } + } + if (vnode === root29 && instance.parent) { + resolveCssVars(instance.parent, instance.vnode, expectedMap); + } +} +__name(resolveCssVars, "resolveCssVars"); +const allowMismatchAttr = "data-allow-mismatch"; +const MismatchTypeString = { + [ + 0 + /* TEXT */ + ]: "text", + [ + 1 + /* CHILDREN */ + ]: "children", + [ + 2 + /* CLASS */ + ]: "class", + [ + 3 + /* STYLE */ + ]: "style", + [ + 4 + /* ATTRIBUTE */ + ]: "attribute" +}; +function isMismatchAllowed(el, allowedType) { + if (allowedType === 0 || allowedType === 1) { + while (el && !el.hasAttribute(allowMismatchAttr)) { + el = el.parentElement; + } + } + const allowedAttr = el && el.getAttribute(allowMismatchAttr); + if (allowedAttr == null) { + return false; + } else if (allowedAttr === "") { + return true; + } else { + const list2 = allowedAttr.split(","); + if (allowedType === 0 && list2.includes("children")) { + return true; + } + return allowedAttr.split(",").includes(MismatchTypeString[allowedType]); + } +} +__name(isMismatchAllowed, "isMismatchAllowed"); +const requestIdleCallback$1 = getGlobalThis$1().requestIdleCallback || ((cb) => setTimeout(cb, 1)); +const cancelIdleCallback$1 = getGlobalThis$1().cancelIdleCallback || ((id3) => clearTimeout(id3)); +const hydrateOnIdle = /* @__PURE__ */ __name((timeout = 1e4) => (hydrate2) => { + const id3 = requestIdleCallback$1(hydrate2, { timeout }); + return () => cancelIdleCallback$1(id3); +}, "hydrateOnIdle"); +function elementIsVisibleInViewport(el) { + const { top, left, bottom, right } = el.getBoundingClientRect(); + const { innerHeight: innerHeight2, innerWidth } = window; + return (top > 0 && top < innerHeight2 || bottom > 0 && bottom < innerHeight2) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth); +} +__name(elementIsVisibleInViewport, "elementIsVisibleInViewport"); +const hydrateOnVisible = /* @__PURE__ */ __name((opts) => (hydrate2, forEach3) => { + const ob = new IntersectionObserver((entries) => { + for (const e2 of entries) { + if (!e2.isIntersecting) continue; + ob.disconnect(); + hydrate2(); + break; + } + }, opts); + forEach3((el) => { + if (!(el instanceof Element)) return; + if (elementIsVisibleInViewport(el)) { + hydrate2(); + ob.disconnect(); + return false; + } + ob.observe(el); + }); + return () => ob.disconnect(); +}, "hydrateOnVisible"); +const hydrateOnMediaQuery = /* @__PURE__ */ __name((query) => (hydrate2) => { + if (query) { + const mql = matchMedia(query); + if (mql.matches) { + hydrate2(); + } else { + mql.addEventListener("change", hydrate2, { once: true }); + return () => mql.removeEventListener("change", hydrate2); + } + } +}, "hydrateOnMediaQuery"); +const hydrateOnInteraction = /* @__PURE__ */ __name((interactions = []) => (hydrate2, forEach3) => { + if (isString$9(interactions)) interactions = [interactions]; + let hasHydrated = false; + const doHydrate = /* @__PURE__ */ __name((e2) => { + if (!hasHydrated) { + hasHydrated = true; + teardown(); + hydrate2(); + e2.target.dispatchEvent(new e2.constructor(e2.type, e2)); + } + }, "doHydrate"); + const teardown = /* @__PURE__ */ __name(() => { + forEach3((el) => { + for (const i2 of interactions) { + el.removeEventListener(i2, doHydrate); + } + }); + }, "teardown"); + forEach3((el) => { + for (const i2 of interactions) { + el.addEventListener(i2, doHydrate, { once: true }); + } + }); + return teardown; +}, "hydrateOnInteraction"); +function forEachElement(node3, cb) { + if (isComment(node3) && node3.data === "[") { + let depth = 1; + let next2 = node3.nextSibling; + while (next2) { + if (next2.nodeType === 1) { + const result = cb(next2); + if (result === false) { + break; + } + } else if (isComment(next2)) { + if (next2.data === "]") { + if (--depth === 0) break; + } else if (next2.data === "[") { + depth++; + } + } + next2 = next2.nextSibling; + } + } else { + cb(node3); + } +} +__name(forEachElement, "forEachElement"); +const isAsyncWrapper = /* @__PURE__ */ __name((i2) => !!i2.type.__asyncLoader, "isAsyncWrapper"); +/*! #__NO_SIDE_EFFECTS__ */ +// @__NO_SIDE_EFFECTS__ +function defineAsyncComponent(source) { + if (isFunction$c(source)) { + source = { loader: source }; + } + const { + loader, + loadingComponent, + errorComponent, + delay = 200, + hydrate: hydrateStrategy, + timeout, + // undefined = never times out + suspensible = true, + onError: userOnError + } = source; + let pendingRequest = null; + let resolvedComp; + let retries = 0; + const retry = /* @__PURE__ */ __name(() => { + retries++; + pendingRequest = null; + return load3(); + }, "retry"); + const load3 = /* @__PURE__ */ __name(() => { + let thisRequest; + return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => { + err = err instanceof Error ? err : new Error(String(err)); + if (userOnError) { + return new Promise((resolve2, reject3) => { + const userRetry = /* @__PURE__ */ __name(() => resolve2(retry()), "userRetry"); + const userFail = /* @__PURE__ */ __name(() => reject3(err), "userFail"); + userOnError(err, userRetry, userFail, retries + 1); + }); + } else { + throw err; + } + }).then((comp) => { + if (thisRequest !== pendingRequest && pendingRequest) { + return pendingRequest; + } + if (false) { + warn$1$1( + `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.` + ); + } + if (comp && (comp.__esModule || comp[Symbol.toStringTag] === "Module")) { + comp = comp.default; + } + if (false) { + throw new Error(`Invalid async component load result: ${comp}`); + } + resolvedComp = comp; + return comp; + })); + }, "load"); + return /* @__PURE__ */ defineComponent({ + name: "AsyncComponentWrapper", + __asyncLoader: load3, + __asyncHydrate(el, instance, hydrate2) { + const doHydrate = hydrateStrategy ? () => { + const teardown = hydrateStrategy( + hydrate2, + (cb) => forEachElement(el, cb) + ); + if (teardown) { + (instance.bum || (instance.bum = [])).push(teardown); + } + } : hydrate2; + if (resolvedComp) { + doHydrate(); + } else { + load3().then(() => !instance.isUnmounted && doHydrate()); + } + }, + get __asyncResolved() { + return resolvedComp; + }, + setup() { + const instance = currentInstance; + markAsyncBoundary(instance); + if (resolvedComp) { + return () => createInnerComp(resolvedComp, instance); + } + const onError = /* @__PURE__ */ __name((err) => { + pendingRequest = null; + handleError( + err, + instance, + 13, + !errorComponent + ); + }, "onError"); + if (suspensible && instance.suspense || isInSSRComponentSetup) { + return load3().then((comp) => { + return () => createInnerComp(comp, instance); + }).catch((err) => { + onError(err); + return () => errorComponent ? createVNode(errorComponent, { + error: err + }) : null; + }); + } + const loaded = ref(false); + const error2 = ref(); + const delayed = ref(!!delay); + if (delay) { + setTimeout(() => { + delayed.value = false; + }, delay); + } + if (timeout != null) { + setTimeout(() => { + if (!loaded.value && !error2.value) { + const err = new Error( + `Async component timed out after ${timeout}ms.` + ); + onError(err); + error2.value = err; + } + }, timeout); + } + load3().then(() => { + loaded.value = true; + if (instance.parent && isKeepAlive(instance.parent.vnode)) { + instance.parent.update(); + } + }).catch((err) => { + onError(err); + error2.value = err; + }); + return () => { + if (loaded.value && resolvedComp) { + return createInnerComp(resolvedComp, instance); + } else if (error2.value && errorComponent) { + return createVNode(errorComponent, { + error: error2.value + }); + } else if (loadingComponent && !delayed.value) { + return createVNode(loadingComponent); + } + }; + } + }); +} +__name(defineAsyncComponent, "defineAsyncComponent"); +function createInnerComp(comp, parent) { + const { ref: ref22, props, children, ce } = parent.vnode; + const vnode = createVNode(comp, props, children); + vnode.ref = ref22; + vnode.ce = ce; + delete parent.vnode.ce; + return vnode; +} +__name(createInnerComp, "createInnerComp"); +const isKeepAlive = /* @__PURE__ */ __name((vnode) => vnode.type.__isKeepAlive, "isKeepAlive"); +const KeepAliveImpl = { + name: `KeepAlive`, + // Marker for special handling inside the renderer. We are not using a === + // check directly on KeepAlive in the renderer, because importing it directly + // would prevent it from being tree-shaken. + __isKeepAlive: true, + props: { + include: [String, RegExp, Array], + exclude: [String, RegExp, Array], + max: [String, Number] + }, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const sharedContext = instance.ctx; + if (!sharedContext.renderer) { + return () => { + const children = slots.default && slots.default(); + return children && children.length === 1 ? children[0] : children; + }; + } + const cache2 = /* @__PURE__ */ new Map(); + const keys2 = /* @__PURE__ */ new Set(); + let current = null; + if (false) { + instance.__v_cache = cache2; + } + const parentSuspense = instance.suspense; + const { + renderer: { + p: patch2, + m: move, + um: _unmount, + o: { createElement: createElement2 } + } + } = sharedContext; + const storageContainer = createElement2("div"); + sharedContext.activate = (vnode, container, anchor, namespace, optimized) => { + const instance2 = vnode.component; + move(vnode, container, anchor, 0, parentSuspense); + patch2( + instance2.vnode, + vnode, + container, + anchor, + instance2, + parentSuspense, + namespace, + vnode.slotScopeIds, + optimized + ); + queuePostRenderEffect(() => { + instance2.isDeactivated = false; + if (instance2.a) { + invokeArrayFns(instance2.a); + } + const vnodeHook = vnode.props && vnode.props.onVnodeMounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode); + } + }, parentSuspense); + if (false) { + devtoolsComponentAdded(instance2); + } + }; + sharedContext.deactivate = (vnode) => { + const instance2 = vnode.component; + invalidateMount(instance2.m); + invalidateMount(instance2.a); + move(vnode, storageContainer, null, 1, parentSuspense); + queuePostRenderEffect(() => { + if (instance2.da) { + invokeArrayFns(instance2.da); + } + const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode); + } + instance2.isDeactivated = true; + }, parentSuspense); + if (false) { + devtoolsComponentAdded(instance2); + } + }; + function unmount(vnode) { + resetShapeFlag(vnode); + _unmount(vnode, instance, parentSuspense, true); + } + __name(unmount, "unmount"); + function pruneCache(filter4) { + cache2.forEach((vnode, key) => { + const name2 = getComponentName(vnode.type); + if (name2 && !filter4(name2)) { + pruneCacheEntry(key); + } + }); + } + __name(pruneCache, "pruneCache"); + function pruneCacheEntry(key) { + const cached = cache2.get(key); + if (cached && (!current || !isSameVNodeType(cached, current))) { + unmount(cached); + } else if (current) { + resetShapeFlag(current); + } + cache2.delete(key); + keys2.delete(key); + } + __name(pruneCacheEntry, "pruneCacheEntry"); + watch( + () => [props.include, props.exclude], + ([include, exclude]) => { + include && pruneCache((name2) => matches$1(include, name2)); + exclude && pruneCache((name2) => !matches$1(exclude, name2)); + }, + // prune post-render after `current` has been updated + { flush: "post", deep: true } + ); + let pendingCacheKey = null; + const cacheSubtree = /* @__PURE__ */ __name(() => { + if (pendingCacheKey != null) { + if (isSuspense(instance.subTree.type)) { + queuePostRenderEffect(() => { + cache2.set(pendingCacheKey, getInnerChild(instance.subTree)); + }, instance.subTree.suspense); + } else { + cache2.set(pendingCacheKey, getInnerChild(instance.subTree)); + } + } + }, "cacheSubtree"); + onMounted(cacheSubtree); + onUpdated(cacheSubtree); + onBeforeUnmount(() => { + cache2.forEach((cached) => { + const { subTree, suspense } = instance; + const vnode = getInnerChild(subTree); + if (cached.type === vnode.type && cached.key === vnode.key) { + resetShapeFlag(vnode); + const da = vnode.component.da; + da && queuePostRenderEffect(da, suspense); + return; + } + unmount(cached); + }); + }); + return () => { + pendingCacheKey = null; + if (!slots.default) { + return current = null; + } + const children = slots.default(); + const rawVNode = children[0]; + if (children.length > 1) { + if (false) { + warn$1$1(`KeepAlive should contain exactly one component child.`); + } + current = null; + return children; + } else if (!isVNode$1(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) { + current = null; + return rawVNode; + } + let vnode = getInnerChild(rawVNode); + if (vnode.type === Comment) { + current = null; + return vnode; + } + const comp = vnode.type; + const name2 = getComponentName( + isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp + ); + const { include, exclude, max } = props; + if (include && (!name2 || !matches$1(include, name2)) || exclude && name2 && matches$1(exclude, name2)) { + vnode.shapeFlag &= ~256; + current = vnode; + return rawVNode; + } + const key = vnode.key == null ? comp : vnode.key; + const cachedVNode = cache2.get(key); + if (vnode.el) { + vnode = cloneVNode(vnode); + if (rawVNode.shapeFlag & 128) { + rawVNode.ssContent = vnode; + } + } + pendingCacheKey = key; + if (cachedVNode) { + vnode.el = cachedVNode.el; + vnode.component = cachedVNode.component; + if (vnode.transition) { + setTransitionHooks(vnode, vnode.transition); + } + vnode.shapeFlag |= 512; + keys2.delete(key); + keys2.add(key); + } else { + keys2.add(key); + if (max && keys2.size > parseInt(max, 10)) { + pruneCacheEntry(keys2.values().next().value); + } + } + vnode.shapeFlag |= 256; + current = vnode; + return isSuspense(rawVNode.type) ? rawVNode : vnode; + }; + } +}; +const KeepAlive = KeepAliveImpl; +function matches$1(pattern, name2) { + if (isArray$b(pattern)) { + return pattern.some((p2) => matches$1(p2, name2)); + } else if (isString$9(pattern)) { + return pattern.split(",").includes(name2); + } else if (isRegExp$4(pattern)) { + pattern.lastIndex = 0; + return pattern.test(name2); + } + return false; +} +__name(matches$1, "matches$1"); +function onActivated(hook, target2) { + registerKeepAliveHook(hook, "a", target2); +} +__name(onActivated, "onActivated"); +function onDeactivated(hook, target2) { + registerKeepAliveHook(hook, "da", target2); +} +__name(onDeactivated, "onDeactivated"); +function registerKeepAliveHook(hook, type, target2 = currentInstance) { + const wrappedHook = hook.__wdc || (hook.__wdc = () => { + let current = target2; + while (current) { + if (current.isDeactivated) { + return; + } + current = current.parent; + } + return hook(); + }); + injectHook(type, wrappedHook, target2); + if (target2) { + let current = target2.parent; + while (current && current.parent) { + if (isKeepAlive(current.parent.vnode)) { + injectToKeepAliveRoot(wrappedHook, type, target2, current); + } + current = current.parent; + } + } +} +__name(registerKeepAliveHook, "registerKeepAliveHook"); +function injectToKeepAliveRoot(hook, type, target2, keepAliveRoot) { + const injected = injectHook( + type, + hook, + keepAliveRoot, + true + /* prepend */ + ); + onUnmounted(() => { + remove$2(keepAliveRoot[type], injected); + }, target2); +} +__name(injectToKeepAliveRoot, "injectToKeepAliveRoot"); +function resetShapeFlag(vnode) { + vnode.shapeFlag &= ~256; + vnode.shapeFlag &= ~512; +} +__name(resetShapeFlag, "resetShapeFlag"); +function getInnerChild(vnode) { + return vnode.shapeFlag & 128 ? vnode.ssContent : vnode; +} +__name(getInnerChild, "getInnerChild"); +function injectHook(type, hook, target2 = currentInstance, prepend2 = false) { + if (target2) { + const hooks2 = target2[type] || (target2[type] = []); + const wrappedHook = hook.__weh || (hook.__weh = (...args) => { + pauseTracking(); + const reset2 = setCurrentInstance(target2); + const res = callWithAsyncErrorHandling(hook, target2, type, args); + reset2(); + resetTracking(); + return res; + }); + if (prepend2) { + hooks2.unshift(wrappedHook); + } else { + hooks2.push(wrappedHook); + } + return wrappedHook; + } else if (false) { + const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, "")); + warn$1$1( + `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` + ); + } +} +__name(injectHook, "injectHook"); +const createHook = /* @__PURE__ */ __name((lifecycle2) => (hook, target2 = currentInstance) => { + if (!isInSSRComponentSetup || lifecycle2 === "sp") { + injectHook(lifecycle2, (...args) => hook(...args), target2); + } +}, "createHook"); +const onBeforeMount = createHook("bm"); +const onMounted = createHook("m"); +const onBeforeUpdate = createHook( + "bu" +); +const onUpdated = createHook("u"); +const onBeforeUnmount = createHook( + "bum" +); +const onUnmounted = createHook("um"); +const onServerPrefetch = createHook( + "sp" +); +const onRenderTriggered = createHook("rtg"); +const onRenderTracked = createHook("rtc"); +function onErrorCaptured(hook, target2 = currentInstance) { + injectHook("ec", hook, target2); +} +__name(onErrorCaptured, "onErrorCaptured"); +const COMPONENTS = "components"; +const DIRECTIVES = "directives"; +function resolveComponent(name2, maybeSelfReference) { + return resolveAsset(COMPONENTS, name2, true, maybeSelfReference) || name2; +} +__name(resolveComponent, "resolveComponent"); +const NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); +function resolveDynamicComponent(component) { + if (isString$9(component)) { + return resolveAsset(COMPONENTS, component, false) || component; + } else { + return component || NULL_DYNAMIC_COMPONENT; + } +} +__name(resolveDynamicComponent, "resolveDynamicComponent"); +function resolveDirective(name2) { + return resolveAsset(DIRECTIVES, name2); +} +__name(resolveDirective, "resolveDirective"); +function resolveAsset(type, name2, warnMissing = true, maybeSelfReference = false) { + const instance = currentRenderingInstance || currentInstance; + if (instance) { + const Component = instance.type; + if (type === COMPONENTS) { + const selfName = getComponentName( + Component, + false + ); + if (selfName && (selfName === name2 || selfName === camelize$1(name2) || selfName === capitalize$1(camelize$1(name2)))) { + return Component; + } + } + const res = ( + // local registration + // check instance[type] first which is resolved for options API + resolve$2(instance[type] || Component[type], name2) || // global registration + resolve$2(instance.appContext[type], name2) + ); + if (!res && maybeSelfReference) { + return Component; + } + if (false) { + const extra = type === COMPONENTS ? ` +If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``; + warn$1$1(`Failed to resolve ${type.slice(0, -1)}: ${name2}${extra}`); + } + return res; + } else if (false) { + warn$1$1( + `resolve${capitalize$1(type.slice(0, -1))} can only be used in render() or setup().` + ); + } +} +__name(resolveAsset, "resolveAsset"); +function resolve$2(registry, name2) { + return registry && (registry[name2] || registry[camelize$1(name2)] || registry[capitalize$1(camelize$1(name2))]); +} +__name(resolve$2, "resolve$2"); +function renderList(source, renderItem, cache2, index2) { + let ret; + const cached = cache2 && cache2[index2]; + const sourceIsArray = isArray$b(source); + if (sourceIsArray || isString$9(source)) { + const sourceIsReactiveArray = sourceIsArray && isReactive(source); + let needsWrap = false; + if (sourceIsReactiveArray) { + needsWrap = !isShallow(source); + source = shallowReadArray(source); + } + ret = new Array(source.length); + for (let i2 = 0, l2 = source.length; i2 < l2; i2++) { + ret[i2] = renderItem( + needsWrap ? toReactive$1(source[i2]) : source[i2], + i2, + void 0, + cached && cached[i2] + ); + } + } else if (typeof source === "number") { + if (false) { + warn$1$1(`The v-for range expect an integer value but got ${source}.`); + } + ret = new Array(source); + for (let i2 = 0; i2 < source; i2++) { + ret[i2] = renderItem(i2 + 1, i2, void 0, cached && cached[i2]); + } + } else if (isObject$f(source)) { + if (source[Symbol.iterator]) { + ret = Array.from( + source, + (item3, i2) => renderItem(item3, i2, void 0, cached && cached[i2]) + ); + } else { + const keys2 = Object.keys(source); + ret = new Array(keys2.length); + for (let i2 = 0, l2 = keys2.length; i2 < l2; i2++) { + const key = keys2[i2]; + ret[i2] = renderItem(source[key], key, i2, cached && cached[i2]); + } + } + } else { + ret = []; + } + if (cache2) { + cache2[index2] = ret; + } + return ret; +} +__name(renderList, "renderList"); +function createSlots(slots, dynamicSlots) { + for (let i2 = 0; i2 < dynamicSlots.length; i2++) { + const slot = dynamicSlots[i2]; + if (isArray$b(slot)) { + for (let j2 = 0; j2 < slot.length; j2++) { + slots[slot[j2].name] = slot[j2].fn; + } + } else if (slot) { + slots[slot.name] = slot.key ? (...args) => { + const res = slot.fn(...args); + if (res) res.key = slot.key; + return res; + } : slot.fn; + } + } + return slots; +} +__name(createSlots, "createSlots"); +function renderSlot(slots, name2, props = {}, fallback, noSlotted) { + if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) { + if (name2 !== "default") props.name = name2; + return openBlock(), createBlock( + Fragment$1, + null, + [createVNode("slot", props, fallback && fallback())], + 64 + ); + } + let slot = slots[name2]; + if (false) { + warn$1$1( + `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.` + ); + slot = /* @__PURE__ */ __name(() => [], "slot"); + } + if (slot && slot._c) { + slot._d = false; + } + openBlock(); + const validSlotContent = slot && ensureValidVNode(slot(props)); + const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch + // key attached in the `createSlots` helper, respect that + validSlotContent && validSlotContent.key; + const rendered = createBlock( + Fragment$1, + { + key: (slotKey && !isSymbol$1(slotKey) ? slotKey : `_${name2}`) + // #7256 force differentiate fallback content from actual content + (!validSlotContent && fallback ? "_fb" : "") + }, + validSlotContent || (fallback ? fallback() : []), + validSlotContent && slots._ === 1 ? 64 : -2 + ); + if (!noSlotted && rendered.scopeId) { + rendered.slotScopeIds = [rendered.scopeId + "-s"]; + } + if (slot && slot._c) { + slot._d = true; + } + return rendered; +} +__name(renderSlot, "renderSlot"); +function ensureValidVNode(vnodes) { + return vnodes.some((child) => { + if (!isVNode$1(child)) return true; + if (child.type === Comment) return false; + if (child.type === Fragment$1 && !ensureValidVNode(child.children)) + return false; + return true; + }) ? vnodes : null; +} +__name(ensureValidVNode, "ensureValidVNode"); +function toHandlers(obj, preserveCaseIfNecessary) { + const ret = {}; + if (false) { + warn$1$1(`v-on with no argument expects an object value.`); + return ret; + } + for (const key in obj) { + ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key]; + } + return ret; +} +__name(toHandlers, "toHandlers"); +const getPublicInstance = /* @__PURE__ */ __name((i2) => { + if (!i2) return null; + if (isStatefulComponent(i2)) return getComponentPublicInstance(i2); + return getPublicInstance(i2.parent); +}, "getPublicInstance"); +const publicPropertiesMap = ( + // Move PURE marker to new line to workaround compiler discarding it + // due to type annotation + /* @__PURE__ */ extend$1(/* @__PURE__ */ Object.create(null), { + $: /* @__PURE__ */ __name((i2) => i2, "$"), + $el: /* @__PURE__ */ __name((i2) => i2.vnode.el, "$el"), + $data: /* @__PURE__ */ __name((i2) => i2.data, "$data"), + $props: /* @__PURE__ */ __name((i2) => false ? shallowReadonly(i2.props) : i2.props, "$props"), + $attrs: /* @__PURE__ */ __name((i2) => false ? shallowReadonly(i2.attrs) : i2.attrs, "$attrs"), + $slots: /* @__PURE__ */ __name((i2) => false ? shallowReadonly(i2.slots) : i2.slots, "$slots"), + $refs: /* @__PURE__ */ __name((i2) => false ? shallowReadonly(i2.refs) : i2.refs, "$refs"), + $parent: /* @__PURE__ */ __name((i2) => getPublicInstance(i2.parent), "$parent"), + $root: /* @__PURE__ */ __name((i2) => getPublicInstance(i2.root), "$root"), + $host: /* @__PURE__ */ __name((i2) => i2.ce, "$host"), + $emit: /* @__PURE__ */ __name((i2) => i2.emit, "$emit"), + $options: /* @__PURE__ */ __name((i2) => true ? resolveMergedOptions(i2) : i2.type, "$options"), + $forceUpdate: /* @__PURE__ */ __name((i2) => i2.f || (i2.f = () => { + queueJob(i2.update); + }), "$forceUpdate"), + $nextTick: /* @__PURE__ */ __name((i2) => i2.n || (i2.n = nextTick.bind(i2.proxy)), "$nextTick"), + $watch: /* @__PURE__ */ __name((i2) => true ? instanceWatch.bind(i2) : NOOP, "$watch") + }) +); +const isReservedPrefix = /* @__PURE__ */ __name((key) => key === "_" || key === "$", "isReservedPrefix"); +const hasSetupBinding = /* @__PURE__ */ __name((state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn$3(state, key), "hasSetupBinding"); +const PublicInstanceProxyHandlers = { + get({ _: instance }, key) { + if (key === "__v_skip") { + return true; + } + const { ctx, setupState, data: data26, props, accessCache, type, appContext } = instance; + if (false) { + return true; + } + let normalizedProps; + if (key[0] !== "$") { + const n2 = accessCache[key]; + if (n2 !== void 0) { + switch (n2) { + case 1: + return setupState[key]; + case 2: + return data26[key]; + case 4: + return ctx[key]; + case 3: + return props[key]; + } + } else if (hasSetupBinding(setupState, key)) { + accessCache[key] = 1; + return setupState[key]; + } else if (data26 !== EMPTY_OBJ && hasOwn$3(data26, key)) { + accessCache[key] = 2; + return data26[key]; + } else if ( + // only cache other properties when instance has declared (thus stable) + // props + (normalizedProps = instance.propsOptions[0]) && hasOwn$3(normalizedProps, key) + ) { + accessCache[key] = 3; + return props[key]; + } else if (ctx !== EMPTY_OBJ && hasOwn$3(ctx, key)) { + accessCache[key] = 4; + return ctx[key]; + } else if (shouldCacheAccess) { + accessCache[key] = 0; + } + } + const publicGetter = publicPropertiesMap[key]; + let cssModule, globalProperties; + if (publicGetter) { + if (key === "$attrs") { + track(instance.attrs, "get", ""); + } else if (false) { + track(instance, "get", key); + } + return publicGetter(instance); + } else if ( + // css module (injected by vue-loader) + (cssModule = type.__cssModules) && (cssModule = cssModule[key]) + ) { + return cssModule; + } else if (ctx !== EMPTY_OBJ && hasOwn$3(ctx, key)) { + accessCache[key] = 4; + return ctx[key]; + } else if ( + // global properties + globalProperties = appContext.config.globalProperties, hasOwn$3(globalProperties, key) + ) { + { + return globalProperties[key]; + } + } else if (false) { + if (data26 !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn$3(data26, key)) { + warn$1$1( + `Property ${JSON.stringify( + key + )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.` + ); + } else if (instance === currentRenderingInstance) { + warn$1$1( + `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.` + ); + } + } + }, + set({ _: instance }, key, value4) { + const { data: data26, setupState, ctx } = instance; + if (hasSetupBinding(setupState, key)) { + setupState[key] = value4; + return true; + } else if (false) { + warn$1$1(`Cannot mutate + + + +
+ + diff --git a/web/materialdesignicons.min.css b/web/materialdesignicons.min.css new file mode 100644 index 0000000000000000000000000000000000000000..e2ea8930ce0294937024a24f0112bc45ffacb834 --- /dev/null +++ b/web/materialdesignicons.min.css @@ -0,0 +1,3 @@ +@font-face{font-family:"Material Design Icons";src:url("fonts/materialdesignicons-webfont.eot?v=7.4.47");src:url("fonts/materialdesignicons-webfont.eot?#iefix&v=7.4.47") format("embedded-opentype"),url("fonts/materialdesignicons-webfont.woff2?v=7.4.47") format("woff2"),url("fonts/materialdesignicons-webfont.woff?v=7.4.47") format("woff"),url("fonts/materialdesignicons-webfont.ttf?v=7.4.47") format("truetype");font-weight:normal;font-style:normal}.mdi:before,.mdi-set{display:inline-block;font:normal normal normal 24px/1 "Material Design Icons";font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mdi-ab-testing::before{content:"\F01C9"}.mdi-abacus::before{content:"\F16E0"}.mdi-abjad-arabic::before{content:"\F1328"}.mdi-abjad-hebrew::before{content:"\F1329"}.mdi-abugida-devanagari::before{content:"\F132A"}.mdi-abugida-thai::before{content:"\F132B"}.mdi-access-point::before{content:"\F0003"}.mdi-access-point-check::before{content:"\F1538"}.mdi-access-point-minus::before{content:"\F1539"}.mdi-access-point-network::before{content:"\F0002"}.mdi-access-point-network-off::before{content:"\F0BE1"}.mdi-access-point-off::before{content:"\F1511"}.mdi-access-point-plus::before{content:"\F153A"}.mdi-access-point-remove::before{content:"\F153B"}.mdi-account::before{content:"\F0004"}.mdi-account-alert::before{content:"\F0005"}.mdi-account-alert-outline::before{content:"\F0B50"}.mdi-account-arrow-down::before{content:"\F1868"}.mdi-account-arrow-down-outline::before{content:"\F1869"}.mdi-account-arrow-left::before{content:"\F0B51"}.mdi-account-arrow-left-outline::before{content:"\F0B52"}.mdi-account-arrow-right::before{content:"\F0B53"}.mdi-account-arrow-right-outline::before{content:"\F0B54"}.mdi-account-arrow-up::before{content:"\F1867"}.mdi-account-arrow-up-outline::before{content:"\F186A"}.mdi-account-badge::before{content:"\F1B0A"}.mdi-account-badge-outline::before{content:"\F1B0B"}.mdi-account-box::before{content:"\F0006"}.mdi-account-box-edit-outline::before{content:"\F1CC8"}.mdi-account-box-minus-outline::before{content:"\F1CC9"}.mdi-account-box-multiple::before{content:"\F0934"}.mdi-account-box-multiple-outline::before{content:"\F100A"}.mdi-account-box-outline::before{content:"\F0007"}.mdi-account-box-plus-outline::before{content:"\F1CCA"}.mdi-account-cancel::before{content:"\F12DF"}.mdi-account-cancel-outline::before{content:"\F12E0"}.mdi-account-card::before{content:"\F1BA4"}.mdi-account-card-outline::before{content:"\F1BA5"}.mdi-account-cash::before{content:"\F1097"}.mdi-account-cash-outline::before{content:"\F1098"}.mdi-account-check::before{content:"\F0008"}.mdi-account-check-outline::before{content:"\F0BE2"}.mdi-account-child::before{content:"\F0A89"}.mdi-account-child-circle::before{content:"\F0A8A"}.mdi-account-child-outline::before{content:"\F10C8"}.mdi-account-circle::before{content:"\F0009"}.mdi-account-circle-outline::before{content:"\F0B55"}.mdi-account-clock::before{content:"\F0B56"}.mdi-account-clock-outline::before{content:"\F0B57"}.mdi-account-cog::before{content:"\F1370"}.mdi-account-cog-outline::before{content:"\F1371"}.mdi-account-convert::before{content:"\F000A"}.mdi-account-convert-outline::before{content:"\F1301"}.mdi-account-cowboy-hat::before{content:"\F0E9B"}.mdi-account-cowboy-hat-outline::before{content:"\F17F3"}.mdi-account-credit-card::before{content:"\F1BA6"}.mdi-account-credit-card-outline::before{content:"\F1BA7"}.mdi-account-details::before{content:"\F0631"}.mdi-account-details-outline::before{content:"\F1372"}.mdi-account-edit::before{content:"\F06BC"}.mdi-account-edit-outline::before{content:"\F0FFB"}.mdi-account-eye::before{content:"\F0420"}.mdi-account-eye-outline::before{content:"\F127B"}.mdi-account-file::before{content:"\F1CA7"}.mdi-account-file-outline::before{content:"\F1CA8"}.mdi-account-file-text::before{content:"\F1CA9"}.mdi-account-file-text-outline::before{content:"\F1CAA"}.mdi-account-filter::before{content:"\F0936"}.mdi-account-filter-outline::before{content:"\F0F9D"}.mdi-account-group::before{content:"\F0849"}.mdi-account-group-outline::before{content:"\F0B58"}.mdi-account-hard-hat::before{content:"\F05B5"}.mdi-account-hard-hat-outline::before{content:"\F1A1F"}.mdi-account-heart::before{content:"\F0899"}.mdi-account-heart-outline::before{content:"\F0BE3"}.mdi-account-injury::before{content:"\F1815"}.mdi-account-injury-outline::before{content:"\F1816"}.mdi-account-key::before{content:"\F000B"}.mdi-account-key-outline::before{content:"\F0BE4"}.mdi-account-lock::before{content:"\F115E"}.mdi-account-lock-open::before{content:"\F1960"}.mdi-account-lock-open-outline::before{content:"\F1961"}.mdi-account-lock-outline::before{content:"\F115F"}.mdi-account-minus::before{content:"\F000D"}.mdi-account-minus-outline::before{content:"\F0AEC"}.mdi-account-multiple::before{content:"\F000E"}.mdi-account-multiple-check::before{content:"\F08C5"}.mdi-account-multiple-check-outline::before{content:"\F11FE"}.mdi-account-multiple-minus::before{content:"\F05D3"}.mdi-account-multiple-minus-outline::before{content:"\F0BE5"}.mdi-account-multiple-outline::before{content:"\F000F"}.mdi-account-multiple-plus::before{content:"\F0010"}.mdi-account-multiple-plus-outline::before{content:"\F0800"}.mdi-account-multiple-remove::before{content:"\F120A"}.mdi-account-multiple-remove-outline::before{content:"\F120B"}.mdi-account-music::before{content:"\F0803"}.mdi-account-music-outline::before{content:"\F0CE9"}.mdi-account-network::before{content:"\F0011"}.mdi-account-network-off::before{content:"\F1AF1"}.mdi-account-network-off-outline::before{content:"\F1AF2"}.mdi-account-network-outline::before{content:"\F0BE6"}.mdi-account-off::before{content:"\F0012"}.mdi-account-off-outline::before{content:"\F0BE7"}.mdi-account-outline::before{content:"\F0013"}.mdi-account-plus::before{content:"\F0014"}.mdi-account-plus-outline::before{content:"\F0801"}.mdi-account-question::before{content:"\F0B59"}.mdi-account-question-outline::before{content:"\F0B5A"}.mdi-account-reactivate::before{content:"\F152B"}.mdi-account-reactivate-outline::before{content:"\F152C"}.mdi-account-remove::before{content:"\F0015"}.mdi-account-remove-outline::before{content:"\F0AED"}.mdi-account-school::before{content:"\F1A20"}.mdi-account-school-outline::before{content:"\F1A21"}.mdi-account-search::before{content:"\F0016"}.mdi-account-search-outline::before{content:"\F0935"}.mdi-account-settings::before{content:"\F0630"}.mdi-account-settings-outline::before{content:"\F10C9"}.mdi-account-star::before{content:"\F0017"}.mdi-account-star-outline::before{content:"\F0BE8"}.mdi-account-supervisor::before{content:"\F0A8B"}.mdi-account-supervisor-circle::before{content:"\F0A8C"}.mdi-account-supervisor-circle-outline::before{content:"\F14EC"}.mdi-account-supervisor-outline::before{content:"\F112D"}.mdi-account-switch::before{content:"\F0019"}.mdi-account-switch-outline::before{content:"\F04CB"}.mdi-account-sync::before{content:"\F191B"}.mdi-account-sync-outline::before{content:"\F191C"}.mdi-account-tag::before{content:"\F1C1B"}.mdi-account-tag-outline::before{content:"\F1C1C"}.mdi-account-tie::before{content:"\F0CE3"}.mdi-account-tie-hat::before{content:"\F1898"}.mdi-account-tie-hat-outline::before{content:"\F1899"}.mdi-account-tie-outline::before{content:"\F10CA"}.mdi-account-tie-voice::before{content:"\F1308"}.mdi-account-tie-voice-off::before{content:"\F130A"}.mdi-account-tie-voice-off-outline::before{content:"\F130B"}.mdi-account-tie-voice-outline::before{content:"\F1309"}.mdi-account-tie-woman::before{content:"\F1A8C"}.mdi-account-voice::before{content:"\F05CB"}.mdi-account-voice-off::before{content:"\F0ED4"}.mdi-account-wrench::before{content:"\F189A"}.mdi-account-wrench-outline::before{content:"\F189B"}.mdi-adjust::before{content:"\F001A"}.mdi-advertisements::before{content:"\F192A"}.mdi-advertisements-off::before{content:"\F192B"}.mdi-air-conditioner::before{content:"\F001B"}.mdi-air-filter::before{content:"\F0D43"}.mdi-air-horn::before{content:"\F0DAC"}.mdi-air-humidifier::before{content:"\F1099"}.mdi-air-humidifier-off::before{content:"\F1466"}.mdi-air-purifier::before{content:"\F0D44"}.mdi-air-purifier-off::before{content:"\F1B57"}.mdi-airbag::before{content:"\F0BE9"}.mdi-airballoon::before{content:"\F001C"}.mdi-airballoon-outline::before{content:"\F100B"}.mdi-airplane::before{content:"\F001D"}.mdi-airplane-alert::before{content:"\F187A"}.mdi-airplane-check::before{content:"\F187B"}.mdi-airplane-clock::before{content:"\F187C"}.mdi-airplane-cog::before{content:"\F187D"}.mdi-airplane-edit::before{content:"\F187E"}.mdi-airplane-landing::before{content:"\F05D4"}.mdi-airplane-marker::before{content:"\F187F"}.mdi-airplane-minus::before{content:"\F1880"}.mdi-airplane-off::before{content:"\F001E"}.mdi-airplane-plus::before{content:"\F1881"}.mdi-airplane-remove::before{content:"\F1882"}.mdi-airplane-search::before{content:"\F1883"}.mdi-airplane-settings::before{content:"\F1884"}.mdi-airplane-takeoff::before{content:"\F05D5"}.mdi-airport::before{content:"\F084B"}.mdi-alarm::before{content:"\F0020"}.mdi-alarm-bell::before{content:"\F078E"}.mdi-alarm-check::before{content:"\F0021"}.mdi-alarm-light::before{content:"\F078F"}.mdi-alarm-light-off::before{content:"\F171E"}.mdi-alarm-light-off-outline::before{content:"\F171F"}.mdi-alarm-light-outline::before{content:"\F0BEA"}.mdi-alarm-multiple::before{content:"\F0022"}.mdi-alarm-note::before{content:"\F0E71"}.mdi-alarm-note-off::before{content:"\F0E72"}.mdi-alarm-off::before{content:"\F0023"}.mdi-alarm-panel::before{content:"\F15C4"}.mdi-alarm-panel-outline::before{content:"\F15C5"}.mdi-alarm-plus::before{content:"\F0024"}.mdi-alarm-snooze::before{content:"\F068E"}.mdi-album::before{content:"\F0025"}.mdi-alert::before{content:"\F0026"}.mdi-alert-box::before{content:"\F0027"}.mdi-alert-box-outline::before{content:"\F0CE4"}.mdi-alert-circle::before{content:"\F0028"}.mdi-alert-circle-check::before{content:"\F11ED"}.mdi-alert-circle-check-outline::before{content:"\F11EE"}.mdi-alert-circle-outline::before{content:"\F05D6"}.mdi-alert-decagram::before{content:"\F06BD"}.mdi-alert-decagram-outline::before{content:"\F0CE5"}.mdi-alert-minus::before{content:"\F14BB"}.mdi-alert-minus-outline::before{content:"\F14BE"}.mdi-alert-octagon::before{content:"\F0029"}.mdi-alert-octagon-outline::before{content:"\F0CE6"}.mdi-alert-octagram::before{content:"\F0767"}.mdi-alert-octagram-outline::before{content:"\F0CE7"}.mdi-alert-outline::before{content:"\F002A"}.mdi-alert-plus::before{content:"\F14BA"}.mdi-alert-plus-outline::before{content:"\F14BD"}.mdi-alert-remove::before{content:"\F14BC"}.mdi-alert-remove-outline::before{content:"\F14BF"}.mdi-alert-rhombus::before{content:"\F11CE"}.mdi-alert-rhombus-outline::before{content:"\F11CF"}.mdi-alien::before{content:"\F089A"}.mdi-alien-outline::before{content:"\F10CB"}.mdi-align-horizontal-center::before{content:"\F11C3"}.mdi-align-horizontal-distribute::before{content:"\F1962"}.mdi-align-horizontal-left::before{content:"\F11C2"}.mdi-align-horizontal-right::before{content:"\F11C4"}.mdi-align-vertical-bottom::before{content:"\F11C5"}.mdi-align-vertical-center::before{content:"\F11C6"}.mdi-align-vertical-distribute::before{content:"\F1963"}.mdi-align-vertical-top::before{content:"\F11C7"}.mdi-all-inclusive::before{content:"\F06BE"}.mdi-all-inclusive-box::before{content:"\F188D"}.mdi-all-inclusive-box-outline::before{content:"\F188E"}.mdi-allergy::before{content:"\F1258"}.mdi-alpha::before{content:"\F002B"}.mdi-alpha-a::before{content:"\F0AEE"}.mdi-alpha-a-box::before{content:"\F0B08"}.mdi-alpha-a-box-outline::before{content:"\F0BEB"}.mdi-alpha-a-circle::before{content:"\F0BEC"}.mdi-alpha-a-circle-outline::before{content:"\F0BED"}.mdi-alpha-b::before{content:"\F0AEF"}.mdi-alpha-b-box::before{content:"\F0B09"}.mdi-alpha-b-box-outline::before{content:"\F0BEE"}.mdi-alpha-b-circle::before{content:"\F0BEF"}.mdi-alpha-b-circle-outline::before{content:"\F0BF0"}.mdi-alpha-c::before{content:"\F0AF0"}.mdi-alpha-c-box::before{content:"\F0B0A"}.mdi-alpha-c-box-outline::before{content:"\F0BF1"}.mdi-alpha-c-circle::before{content:"\F0BF2"}.mdi-alpha-c-circle-outline::before{content:"\F0BF3"}.mdi-alpha-d::before{content:"\F0AF1"}.mdi-alpha-d-box::before{content:"\F0B0B"}.mdi-alpha-d-box-outline::before{content:"\F0BF4"}.mdi-alpha-d-circle::before{content:"\F0BF5"}.mdi-alpha-d-circle-outline::before{content:"\F0BF6"}.mdi-alpha-e::before{content:"\F0AF2"}.mdi-alpha-e-box::before{content:"\F0B0C"}.mdi-alpha-e-box-outline::before{content:"\F0BF7"}.mdi-alpha-e-circle::before{content:"\F0BF8"}.mdi-alpha-e-circle-outline::before{content:"\F0BF9"}.mdi-alpha-f::before{content:"\F0AF3"}.mdi-alpha-f-box::before{content:"\F0B0D"}.mdi-alpha-f-box-outline::before{content:"\F0BFA"}.mdi-alpha-f-circle::before{content:"\F0BFB"}.mdi-alpha-f-circle-outline::before{content:"\F0BFC"}.mdi-alpha-g::before{content:"\F0AF4"}.mdi-alpha-g-box::before{content:"\F0B0E"}.mdi-alpha-g-box-outline::before{content:"\F0BFD"}.mdi-alpha-g-circle::before{content:"\F0BFE"}.mdi-alpha-g-circle-outline::before{content:"\F0BFF"}.mdi-alpha-h::before{content:"\F0AF5"}.mdi-alpha-h-box::before{content:"\F0B0F"}.mdi-alpha-h-box-outline::before{content:"\F0C00"}.mdi-alpha-h-circle::before{content:"\F0C01"}.mdi-alpha-h-circle-outline::before{content:"\F0C02"}.mdi-alpha-i::before{content:"\F0AF6"}.mdi-alpha-i-box::before{content:"\F0B10"}.mdi-alpha-i-box-outline::before{content:"\F0C03"}.mdi-alpha-i-circle::before{content:"\F0C04"}.mdi-alpha-i-circle-outline::before{content:"\F0C05"}.mdi-alpha-j::before{content:"\F0AF7"}.mdi-alpha-j-box::before{content:"\F0B11"}.mdi-alpha-j-box-outline::before{content:"\F0C06"}.mdi-alpha-j-circle::before{content:"\F0C07"}.mdi-alpha-j-circle-outline::before{content:"\F0C08"}.mdi-alpha-k::before{content:"\F0AF8"}.mdi-alpha-k-box::before{content:"\F0B12"}.mdi-alpha-k-box-outline::before{content:"\F0C09"}.mdi-alpha-k-circle::before{content:"\F0C0A"}.mdi-alpha-k-circle-outline::before{content:"\F0C0B"}.mdi-alpha-l::before{content:"\F0AF9"}.mdi-alpha-l-box::before{content:"\F0B13"}.mdi-alpha-l-box-outline::before{content:"\F0C0C"}.mdi-alpha-l-circle::before{content:"\F0C0D"}.mdi-alpha-l-circle-outline::before{content:"\F0C0E"}.mdi-alpha-m::before{content:"\F0AFA"}.mdi-alpha-m-box::before{content:"\F0B14"}.mdi-alpha-m-box-outline::before{content:"\F0C0F"}.mdi-alpha-m-circle::before{content:"\F0C10"}.mdi-alpha-m-circle-outline::before{content:"\F0C11"}.mdi-alpha-n::before{content:"\F0AFB"}.mdi-alpha-n-box::before{content:"\F0B15"}.mdi-alpha-n-box-outline::before{content:"\F0C12"}.mdi-alpha-n-circle::before{content:"\F0C13"}.mdi-alpha-n-circle-outline::before{content:"\F0C14"}.mdi-alpha-o::before{content:"\F0AFC"}.mdi-alpha-o-box::before{content:"\F0B16"}.mdi-alpha-o-box-outline::before{content:"\F0C15"}.mdi-alpha-o-circle::before{content:"\F0C16"}.mdi-alpha-o-circle-outline::before{content:"\F0C17"}.mdi-alpha-p::before{content:"\F0AFD"}.mdi-alpha-p-box::before{content:"\F0B17"}.mdi-alpha-p-box-outline::before{content:"\F0C18"}.mdi-alpha-p-circle::before{content:"\F0C19"}.mdi-alpha-p-circle-outline::before{content:"\F0C1A"}.mdi-alpha-q::before{content:"\F0AFE"}.mdi-alpha-q-box::before{content:"\F0B18"}.mdi-alpha-q-box-outline::before{content:"\F0C1B"}.mdi-alpha-q-circle::before{content:"\F0C1C"}.mdi-alpha-q-circle-outline::before{content:"\F0C1D"}.mdi-alpha-r::before{content:"\F0AFF"}.mdi-alpha-r-box::before{content:"\F0B19"}.mdi-alpha-r-box-outline::before{content:"\F0C1E"}.mdi-alpha-r-circle::before{content:"\F0C1F"}.mdi-alpha-r-circle-outline::before{content:"\F0C20"}.mdi-alpha-s::before{content:"\F0B00"}.mdi-alpha-s-box::before{content:"\F0B1A"}.mdi-alpha-s-box-outline::before{content:"\F0C21"}.mdi-alpha-s-circle::before{content:"\F0C22"}.mdi-alpha-s-circle-outline::before{content:"\F0C23"}.mdi-alpha-t::before{content:"\F0B01"}.mdi-alpha-t-box::before{content:"\F0B1B"}.mdi-alpha-t-box-outline::before{content:"\F0C24"}.mdi-alpha-t-circle::before{content:"\F0C25"}.mdi-alpha-t-circle-outline::before{content:"\F0C26"}.mdi-alpha-u::before{content:"\F0B02"}.mdi-alpha-u-box::before{content:"\F0B1C"}.mdi-alpha-u-box-outline::before{content:"\F0C27"}.mdi-alpha-u-circle::before{content:"\F0C28"}.mdi-alpha-u-circle-outline::before{content:"\F0C29"}.mdi-alpha-v::before{content:"\F0B03"}.mdi-alpha-v-box::before{content:"\F0B1D"}.mdi-alpha-v-box-outline::before{content:"\F0C2A"}.mdi-alpha-v-circle::before{content:"\F0C2B"}.mdi-alpha-v-circle-outline::before{content:"\F0C2C"}.mdi-alpha-w::before{content:"\F0B04"}.mdi-alpha-w-box::before{content:"\F0B1E"}.mdi-alpha-w-box-outline::before{content:"\F0C2D"}.mdi-alpha-w-circle::before{content:"\F0C2E"}.mdi-alpha-w-circle-outline::before{content:"\F0C2F"}.mdi-alpha-x::before{content:"\F0B05"}.mdi-alpha-x-box::before{content:"\F0B1F"}.mdi-alpha-x-box-outline::before{content:"\F0C30"}.mdi-alpha-x-circle::before{content:"\F0C31"}.mdi-alpha-x-circle-outline::before{content:"\F0C32"}.mdi-alpha-y::before{content:"\F0B06"}.mdi-alpha-y-box::before{content:"\F0B20"}.mdi-alpha-y-box-outline::before{content:"\F0C33"}.mdi-alpha-y-circle::before{content:"\F0C34"}.mdi-alpha-y-circle-outline::before{content:"\F0C35"}.mdi-alpha-z::before{content:"\F0B07"}.mdi-alpha-z-box::before{content:"\F0B21"}.mdi-alpha-z-box-outline::before{content:"\F0C36"}.mdi-alpha-z-circle::before{content:"\F0C37"}.mdi-alpha-z-circle-outline::before{content:"\F0C38"}.mdi-alphabet-aurebesh::before{content:"\F132C"}.mdi-alphabet-cyrillic::before{content:"\F132D"}.mdi-alphabet-greek::before{content:"\F132E"}.mdi-alphabet-latin::before{content:"\F132F"}.mdi-alphabet-piqad::before{content:"\F1330"}.mdi-alphabet-tengwar::before{content:"\F1337"}.mdi-alphabetical::before{content:"\F002C"}.mdi-alphabetical-off::before{content:"\F100C"}.mdi-alphabetical-variant::before{content:"\F100D"}.mdi-alphabetical-variant-off::before{content:"\F100E"}.mdi-altimeter::before{content:"\F05D7"}.mdi-ambulance::before{content:"\F002F"}.mdi-ammunition::before{content:"\F0CE8"}.mdi-ampersand::before{content:"\F0A8D"}.mdi-amplifier::before{content:"\F0030"}.mdi-amplifier-off::before{content:"\F11B5"}.mdi-anchor::before{content:"\F0031"}.mdi-android::before{content:"\F0032"}.mdi-android-studio::before{content:"\F0034"}.mdi-angle-acute::before{content:"\F0937"}.mdi-angle-obtuse::before{content:"\F0938"}.mdi-angle-right::before{content:"\F0939"}.mdi-angular::before{content:"\F06B2"}.mdi-angularjs::before{content:"\F06BF"}.mdi-animation::before{content:"\F05D8"}.mdi-animation-outline::before{content:"\F0A8F"}.mdi-animation-play::before{content:"\F093A"}.mdi-animation-play-outline::before{content:"\F0A90"}.mdi-ansible::before{content:"\F109A"}.mdi-antenna::before{content:"\F1119"}.mdi-anvil::before{content:"\F089B"}.mdi-apache-kafka::before{content:"\F100F"}.mdi-api::before{content:"\F109B"}.mdi-api-off::before{content:"\F1257"}.mdi-apple::before{content:"\F0035"}.mdi-apple-finder::before{content:"\F0036"}.mdi-apple-icloud::before{content:"\F0038"}.mdi-apple-ios::before{content:"\F0037"}.mdi-apple-keyboard-caps::before{content:"\F0632"}.mdi-apple-keyboard-command::before{content:"\F0633"}.mdi-apple-keyboard-control::before{content:"\F0634"}.mdi-apple-keyboard-option::before{content:"\F0635"}.mdi-apple-keyboard-shift::before{content:"\F0636"}.mdi-apple-safari::before{content:"\F0039"}.mdi-application::before{content:"\F08C6"}.mdi-application-array::before{content:"\F10F5"}.mdi-application-array-outline::before{content:"\F10F6"}.mdi-application-braces::before{content:"\F10F7"}.mdi-application-braces-outline::before{content:"\F10F8"}.mdi-application-brackets::before{content:"\F0C8B"}.mdi-application-brackets-outline::before{content:"\F0C8C"}.mdi-application-cog::before{content:"\F0675"}.mdi-application-cog-outline::before{content:"\F1577"}.mdi-application-edit::before{content:"\F00AE"}.mdi-application-edit-outline::before{content:"\F0619"}.mdi-application-export::before{content:"\F0DAD"}.mdi-application-import::before{content:"\F0DAE"}.mdi-application-outline::before{content:"\F0614"}.mdi-application-parentheses::before{content:"\F10F9"}.mdi-application-parentheses-outline::before{content:"\F10FA"}.mdi-application-settings::before{content:"\F0B60"}.mdi-application-settings-outline::before{content:"\F1555"}.mdi-application-variable::before{content:"\F10FB"}.mdi-application-variable-outline::before{content:"\F10FC"}.mdi-approximately-equal::before{content:"\F0F9E"}.mdi-approximately-equal-box::before{content:"\F0F9F"}.mdi-apps::before{content:"\F003B"}.mdi-apps-box::before{content:"\F0D46"}.mdi-arch::before{content:"\F08C7"}.mdi-archive::before{content:"\F003C"}.mdi-archive-alert::before{content:"\F14FD"}.mdi-archive-alert-outline::before{content:"\F14FE"}.mdi-archive-arrow-down::before{content:"\F1259"}.mdi-archive-arrow-down-outline::before{content:"\F125A"}.mdi-archive-arrow-up::before{content:"\F125B"}.mdi-archive-arrow-up-outline::before{content:"\F125C"}.mdi-archive-cancel::before{content:"\F174B"}.mdi-archive-cancel-outline::before{content:"\F174C"}.mdi-archive-check::before{content:"\F174D"}.mdi-archive-check-outline::before{content:"\F174E"}.mdi-archive-clock::before{content:"\F174F"}.mdi-archive-clock-outline::before{content:"\F1750"}.mdi-archive-cog::before{content:"\F1751"}.mdi-archive-cog-outline::before{content:"\F1752"}.mdi-archive-edit::before{content:"\F1753"}.mdi-archive-edit-outline::before{content:"\F1754"}.mdi-archive-eye::before{content:"\F1755"}.mdi-archive-eye-outline::before{content:"\F1756"}.mdi-archive-lock::before{content:"\F1757"}.mdi-archive-lock-open::before{content:"\F1758"}.mdi-archive-lock-open-outline::before{content:"\F1759"}.mdi-archive-lock-outline::before{content:"\F175A"}.mdi-archive-marker::before{content:"\F175B"}.mdi-archive-marker-outline::before{content:"\F175C"}.mdi-archive-minus::before{content:"\F175D"}.mdi-archive-minus-outline::before{content:"\F175E"}.mdi-archive-music::before{content:"\F175F"}.mdi-archive-music-outline::before{content:"\F1760"}.mdi-archive-off::before{content:"\F1761"}.mdi-archive-off-outline::before{content:"\F1762"}.mdi-archive-outline::before{content:"\F120E"}.mdi-archive-plus::before{content:"\F1763"}.mdi-archive-plus-outline::before{content:"\F1764"}.mdi-archive-refresh::before{content:"\F1765"}.mdi-archive-refresh-outline::before{content:"\F1766"}.mdi-archive-remove::before{content:"\F1767"}.mdi-archive-remove-outline::before{content:"\F1768"}.mdi-archive-search::before{content:"\F1769"}.mdi-archive-search-outline::before{content:"\F176A"}.mdi-archive-settings::before{content:"\F176B"}.mdi-archive-settings-outline::before{content:"\F176C"}.mdi-archive-star::before{content:"\F176D"}.mdi-archive-star-outline::before{content:"\F176E"}.mdi-archive-sync::before{content:"\F176F"}.mdi-archive-sync-outline::before{content:"\F1770"}.mdi-arm-flex::before{content:"\F0FD7"}.mdi-arm-flex-outline::before{content:"\F0FD6"}.mdi-arrange-bring-forward::before{content:"\F003D"}.mdi-arrange-bring-to-front::before{content:"\F003E"}.mdi-arrange-send-backward::before{content:"\F003F"}.mdi-arrange-send-to-back::before{content:"\F0040"}.mdi-arrow-all::before{content:"\F0041"}.mdi-arrow-bottom-left::before{content:"\F0042"}.mdi-arrow-bottom-left-bold-box::before{content:"\F1964"}.mdi-arrow-bottom-left-bold-box-outline::before{content:"\F1965"}.mdi-arrow-bottom-left-bold-outline::before{content:"\F09B7"}.mdi-arrow-bottom-left-thick::before{content:"\F09B8"}.mdi-arrow-bottom-left-thin::before{content:"\F19B6"}.mdi-arrow-bottom-left-thin-circle-outline::before{content:"\F1596"}.mdi-arrow-bottom-right::before{content:"\F0043"}.mdi-arrow-bottom-right-bold-box::before{content:"\F1966"}.mdi-arrow-bottom-right-bold-box-outline::before{content:"\F1967"}.mdi-arrow-bottom-right-bold-outline::before{content:"\F09B9"}.mdi-arrow-bottom-right-thick::before{content:"\F09BA"}.mdi-arrow-bottom-right-thin::before{content:"\F19B7"}.mdi-arrow-bottom-right-thin-circle-outline::before{content:"\F1595"}.mdi-arrow-collapse::before{content:"\F0615"}.mdi-arrow-collapse-all::before{content:"\F0044"}.mdi-arrow-collapse-down::before{content:"\F0792"}.mdi-arrow-collapse-horizontal::before{content:"\F084C"}.mdi-arrow-collapse-left::before{content:"\F0793"}.mdi-arrow-collapse-right::before{content:"\F0794"}.mdi-arrow-collapse-up::before{content:"\F0795"}.mdi-arrow-collapse-vertical::before{content:"\F084D"}.mdi-arrow-decision::before{content:"\F09BB"}.mdi-arrow-decision-auto::before{content:"\F09BC"}.mdi-arrow-decision-auto-outline::before{content:"\F09BD"}.mdi-arrow-decision-outline::before{content:"\F09BE"}.mdi-arrow-down::before{content:"\F0045"}.mdi-arrow-down-bold::before{content:"\F072E"}.mdi-arrow-down-bold-box::before{content:"\F072F"}.mdi-arrow-down-bold-box-outline::before{content:"\F0730"}.mdi-arrow-down-bold-circle::before{content:"\F0047"}.mdi-arrow-down-bold-circle-outline::before{content:"\F0048"}.mdi-arrow-down-bold-hexagon-outline::before{content:"\F0049"}.mdi-arrow-down-bold-outline::before{content:"\F09BF"}.mdi-arrow-down-box::before{content:"\F06C0"}.mdi-arrow-down-circle::before{content:"\F0CDB"}.mdi-arrow-down-circle-outline::before{content:"\F0CDC"}.mdi-arrow-down-drop-circle::before{content:"\F004A"}.mdi-arrow-down-drop-circle-outline::before{content:"\F004B"}.mdi-arrow-down-left::before{content:"\F17A1"}.mdi-arrow-down-left-bold::before{content:"\F17A2"}.mdi-arrow-down-right::before{content:"\F17A3"}.mdi-arrow-down-right-bold::before{content:"\F17A4"}.mdi-arrow-down-thick::before{content:"\F0046"}.mdi-arrow-down-thin::before{content:"\F19B3"}.mdi-arrow-down-thin-circle-outline::before{content:"\F1599"}.mdi-arrow-expand::before{content:"\F0616"}.mdi-arrow-expand-all::before{content:"\F004C"}.mdi-arrow-expand-down::before{content:"\F0796"}.mdi-arrow-expand-horizontal::before{content:"\F084E"}.mdi-arrow-expand-left::before{content:"\F0797"}.mdi-arrow-expand-right::before{content:"\F0798"}.mdi-arrow-expand-up::before{content:"\F0799"}.mdi-arrow-expand-vertical::before{content:"\F084F"}.mdi-arrow-horizontal-lock::before{content:"\F115B"}.mdi-arrow-left::before{content:"\F004D"}.mdi-arrow-left-bold::before{content:"\F0731"}.mdi-arrow-left-bold-box::before{content:"\F0732"}.mdi-arrow-left-bold-box-outline::before{content:"\F0733"}.mdi-arrow-left-bold-circle::before{content:"\F004F"}.mdi-arrow-left-bold-circle-outline::before{content:"\F0050"}.mdi-arrow-left-bold-hexagon-outline::before{content:"\F0051"}.mdi-arrow-left-bold-outline::before{content:"\F09C0"}.mdi-arrow-left-bottom::before{content:"\F17A5"}.mdi-arrow-left-bottom-bold::before{content:"\F17A6"}.mdi-arrow-left-box::before{content:"\F06C1"}.mdi-arrow-left-circle::before{content:"\F0CDD"}.mdi-arrow-left-circle-outline::before{content:"\F0CDE"}.mdi-arrow-left-drop-circle::before{content:"\F0052"}.mdi-arrow-left-drop-circle-outline::before{content:"\F0053"}.mdi-arrow-left-right::before{content:"\F0E73"}.mdi-arrow-left-right-bold::before{content:"\F0E74"}.mdi-arrow-left-right-bold-outline::before{content:"\F09C1"}.mdi-arrow-left-thick::before{content:"\F004E"}.mdi-arrow-left-thin::before{content:"\F19B1"}.mdi-arrow-left-thin-circle-outline::before{content:"\F159A"}.mdi-arrow-left-top::before{content:"\F17A7"}.mdi-arrow-left-top-bold::before{content:"\F17A8"}.mdi-arrow-oscillating::before{content:"\F1C91"}.mdi-arrow-oscillating-off::before{content:"\F1C92"}.mdi-arrow-projectile::before{content:"\F1840"}.mdi-arrow-projectile-multiple::before{content:"\F183F"}.mdi-arrow-right::before{content:"\F0054"}.mdi-arrow-right-bold::before{content:"\F0734"}.mdi-arrow-right-bold-box::before{content:"\F0735"}.mdi-arrow-right-bold-box-outline::before{content:"\F0736"}.mdi-arrow-right-bold-circle::before{content:"\F0056"}.mdi-arrow-right-bold-circle-outline::before{content:"\F0057"}.mdi-arrow-right-bold-hexagon-outline::before{content:"\F0058"}.mdi-arrow-right-bold-outline::before{content:"\F09C2"}.mdi-arrow-right-bottom::before{content:"\F17A9"}.mdi-arrow-right-bottom-bold::before{content:"\F17AA"}.mdi-arrow-right-box::before{content:"\F06C2"}.mdi-arrow-right-circle::before{content:"\F0CDF"}.mdi-arrow-right-circle-outline::before{content:"\F0CE0"}.mdi-arrow-right-drop-circle::before{content:"\F0059"}.mdi-arrow-right-drop-circle-outline::before{content:"\F005A"}.mdi-arrow-right-thick::before{content:"\F0055"}.mdi-arrow-right-thin::before{content:"\F19B0"}.mdi-arrow-right-thin-circle-outline::before{content:"\F1598"}.mdi-arrow-right-top::before{content:"\F17AB"}.mdi-arrow-right-top-bold::before{content:"\F17AC"}.mdi-arrow-split-horizontal::before{content:"\F093B"}.mdi-arrow-split-vertical::before{content:"\F093C"}.mdi-arrow-top-left::before{content:"\F005B"}.mdi-arrow-top-left-bold-box::before{content:"\F1968"}.mdi-arrow-top-left-bold-box-outline::before{content:"\F1969"}.mdi-arrow-top-left-bold-outline::before{content:"\F09C3"}.mdi-arrow-top-left-bottom-right::before{content:"\F0E75"}.mdi-arrow-top-left-bottom-right-bold::before{content:"\F0E76"}.mdi-arrow-top-left-thick::before{content:"\F09C4"}.mdi-arrow-top-left-thin::before{content:"\F19B5"}.mdi-arrow-top-left-thin-circle-outline::before{content:"\F1593"}.mdi-arrow-top-right::before{content:"\F005C"}.mdi-arrow-top-right-bold-box::before{content:"\F196A"}.mdi-arrow-top-right-bold-box-outline::before{content:"\F196B"}.mdi-arrow-top-right-bold-outline::before{content:"\F09C5"}.mdi-arrow-top-right-bottom-left::before{content:"\F0E77"}.mdi-arrow-top-right-bottom-left-bold::before{content:"\F0E78"}.mdi-arrow-top-right-thick::before{content:"\F09C6"}.mdi-arrow-top-right-thin::before{content:"\F19B4"}.mdi-arrow-top-right-thin-circle-outline::before{content:"\F1594"}.mdi-arrow-u-down-left::before{content:"\F17AD"}.mdi-arrow-u-down-left-bold::before{content:"\F17AE"}.mdi-arrow-u-down-right::before{content:"\F17AF"}.mdi-arrow-u-down-right-bold::before{content:"\F17B0"}.mdi-arrow-u-left-bottom::before{content:"\F17B1"}.mdi-arrow-u-left-bottom-bold::before{content:"\F17B2"}.mdi-arrow-u-left-top::before{content:"\F17B3"}.mdi-arrow-u-left-top-bold::before{content:"\F17B4"}.mdi-arrow-u-right-bottom::before{content:"\F17B5"}.mdi-arrow-u-right-bottom-bold::before{content:"\F17B6"}.mdi-arrow-u-right-top::before{content:"\F17B7"}.mdi-arrow-u-right-top-bold::before{content:"\F17B8"}.mdi-arrow-u-up-left::before{content:"\F17B9"}.mdi-arrow-u-up-left-bold::before{content:"\F17BA"}.mdi-arrow-u-up-right::before{content:"\F17BB"}.mdi-arrow-u-up-right-bold::before{content:"\F17BC"}.mdi-arrow-up::before{content:"\F005D"}.mdi-arrow-up-bold::before{content:"\F0737"}.mdi-arrow-up-bold-box::before{content:"\F0738"}.mdi-arrow-up-bold-box-outline::before{content:"\F0739"}.mdi-arrow-up-bold-circle::before{content:"\F005F"}.mdi-arrow-up-bold-circle-outline::before{content:"\F0060"}.mdi-arrow-up-bold-hexagon-outline::before{content:"\F0061"}.mdi-arrow-up-bold-outline::before{content:"\F09C7"}.mdi-arrow-up-box::before{content:"\F06C3"}.mdi-arrow-up-circle::before{content:"\F0CE1"}.mdi-arrow-up-circle-outline::before{content:"\F0CE2"}.mdi-arrow-up-down::before{content:"\F0E79"}.mdi-arrow-up-down-bold::before{content:"\F0E7A"}.mdi-arrow-up-down-bold-outline::before{content:"\F09C8"}.mdi-arrow-up-drop-circle::before{content:"\F0062"}.mdi-arrow-up-drop-circle-outline::before{content:"\F0063"}.mdi-arrow-up-left::before{content:"\F17BD"}.mdi-arrow-up-left-bold::before{content:"\F17BE"}.mdi-arrow-up-right::before{content:"\F17BF"}.mdi-arrow-up-right-bold::before{content:"\F17C0"}.mdi-arrow-up-thick::before{content:"\F005E"}.mdi-arrow-up-thin::before{content:"\F19B2"}.mdi-arrow-up-thin-circle-outline::before{content:"\F1597"}.mdi-arrow-vertical-lock::before{content:"\F115C"}.mdi-artboard::before{content:"\F1B9A"}.mdi-artstation::before{content:"\F0B5B"}.mdi-aspect-ratio::before{content:"\F0A24"}.mdi-assistant::before{content:"\F0064"}.mdi-asterisk::before{content:"\F06C4"}.mdi-asterisk-circle-outline::before{content:"\F1A27"}.mdi-at::before{content:"\F0065"}.mdi-atlassian::before{content:"\F0804"}.mdi-atm::before{content:"\F0D47"}.mdi-atom::before{content:"\F0768"}.mdi-atom-variant::before{content:"\F0E7B"}.mdi-attachment::before{content:"\F0066"}.mdi-attachment-check::before{content:"\F1AC1"}.mdi-attachment-lock::before{content:"\F19C4"}.mdi-attachment-minus::before{content:"\F1AC2"}.mdi-attachment-off::before{content:"\F1AC3"}.mdi-attachment-plus::before{content:"\F1AC4"}.mdi-attachment-remove::before{content:"\F1AC5"}.mdi-atv::before{content:"\F1B70"}.mdi-audio-input-rca::before{content:"\F186B"}.mdi-audio-input-stereo-minijack::before{content:"\F186C"}.mdi-audio-input-xlr::before{content:"\F186D"}.mdi-audio-video::before{content:"\F093D"}.mdi-audio-video-off::before{content:"\F11B6"}.mdi-augmented-reality::before{content:"\F0850"}.mdi-aurora::before{content:"\F1BB9"}.mdi-auto-download::before{content:"\F137E"}.mdi-auto-fix::before{content:"\F0068"}.mdi-auto-mode::before{content:"\F1C20"}.mdi-auto-upload::before{content:"\F0069"}.mdi-autorenew::before{content:"\F006A"}.mdi-autorenew-off::before{content:"\F19E7"}.mdi-av-timer::before{content:"\F006B"}.mdi-awning::before{content:"\F1B87"}.mdi-awning-outline::before{content:"\F1B88"}.mdi-aws::before{content:"\F0E0F"}.mdi-axe::before{content:"\F08C8"}.mdi-axe-battle::before{content:"\F1842"}.mdi-axis::before{content:"\F0D48"}.mdi-axis-arrow::before{content:"\F0D49"}.mdi-axis-arrow-info::before{content:"\F140E"}.mdi-axis-arrow-lock::before{content:"\F0D4A"}.mdi-axis-lock::before{content:"\F0D4B"}.mdi-axis-x-arrow::before{content:"\F0D4C"}.mdi-axis-x-arrow-lock::before{content:"\F0D4D"}.mdi-axis-x-rotate-clockwise::before{content:"\F0D4E"}.mdi-axis-x-rotate-counterclockwise::before{content:"\F0D4F"}.mdi-axis-x-y-arrow-lock::before{content:"\F0D50"}.mdi-axis-y-arrow::before{content:"\F0D51"}.mdi-axis-y-arrow-lock::before{content:"\F0D52"}.mdi-axis-y-rotate-clockwise::before{content:"\F0D53"}.mdi-axis-y-rotate-counterclockwise::before{content:"\F0D54"}.mdi-axis-z-arrow::before{content:"\F0D55"}.mdi-axis-z-arrow-lock::before{content:"\F0D56"}.mdi-axis-z-rotate-clockwise::before{content:"\F0D57"}.mdi-axis-z-rotate-counterclockwise::before{content:"\F0D58"}.mdi-babel::before{content:"\F0A25"}.mdi-baby::before{content:"\F006C"}.mdi-baby-bottle::before{content:"\F0F39"}.mdi-baby-bottle-outline::before{content:"\F0F3A"}.mdi-baby-buggy::before{content:"\F13E0"}.mdi-baby-buggy-off::before{content:"\F1AF3"}.mdi-baby-carriage::before{content:"\F068F"}.mdi-baby-carriage-off::before{content:"\F0FA0"}.mdi-baby-face::before{content:"\F0E7C"}.mdi-baby-face-outline::before{content:"\F0E7D"}.mdi-backburger::before{content:"\F006D"}.mdi-backspace::before{content:"\F006E"}.mdi-backspace-outline::before{content:"\F0B5C"}.mdi-backspace-reverse::before{content:"\F0E7E"}.mdi-backspace-reverse-outline::before{content:"\F0E7F"}.mdi-backup-restore::before{content:"\F006F"}.mdi-bacteria::before{content:"\F0ED5"}.mdi-bacteria-outline::before{content:"\F0ED6"}.mdi-badge-account::before{content:"\F0DA7"}.mdi-badge-account-alert::before{content:"\F0DA8"}.mdi-badge-account-alert-outline::before{content:"\F0DA9"}.mdi-badge-account-horizontal::before{content:"\F0E0D"}.mdi-badge-account-horizontal-outline::before{content:"\F0E0E"}.mdi-badge-account-outline::before{content:"\F0DAA"}.mdi-badminton::before{content:"\F0851"}.mdi-bag-carry-on::before{content:"\F0F3B"}.mdi-bag-carry-on-check::before{content:"\F0D65"}.mdi-bag-carry-on-off::before{content:"\F0F3C"}.mdi-bag-checked::before{content:"\F0F3D"}.mdi-bag-personal::before{content:"\F0E10"}.mdi-bag-personal-off::before{content:"\F0E11"}.mdi-bag-personal-off-outline::before{content:"\F0E12"}.mdi-bag-personal-outline::before{content:"\F0E13"}.mdi-bag-personal-plus::before{content:"\F1CA4"}.mdi-bag-personal-plus-outline::before{content:"\F1CA5"}.mdi-bag-personal-tag::before{content:"\F1B0C"}.mdi-bag-personal-tag-outline::before{content:"\F1B0D"}.mdi-bag-suitcase::before{content:"\F158B"}.mdi-bag-suitcase-off::before{content:"\F158D"}.mdi-bag-suitcase-off-outline::before{content:"\F158E"}.mdi-bag-suitcase-outline::before{content:"\F158C"}.mdi-baguette::before{content:"\F0F3E"}.mdi-balcony::before{content:"\F1817"}.mdi-balloon::before{content:"\F0A26"}.mdi-ballot::before{content:"\F09C9"}.mdi-ballot-outline::before{content:"\F09CA"}.mdi-ballot-recount::before{content:"\F0C39"}.mdi-ballot-recount-outline::before{content:"\F0C3A"}.mdi-bandage::before{content:"\F0DAF"}.mdi-bank::before{content:"\F0070"}.mdi-bank-check::before{content:"\F1655"}.mdi-bank-circle::before{content:"\F1C03"}.mdi-bank-circle-outline::before{content:"\F1C04"}.mdi-bank-minus::before{content:"\F0DB0"}.mdi-bank-off::before{content:"\F1656"}.mdi-bank-off-outline::before{content:"\F1657"}.mdi-bank-outline::before{content:"\F0E80"}.mdi-bank-plus::before{content:"\F0DB1"}.mdi-bank-remove::before{content:"\F0DB2"}.mdi-bank-transfer::before{content:"\F0A27"}.mdi-bank-transfer-in::before{content:"\F0A28"}.mdi-bank-transfer-out::before{content:"\F0A29"}.mdi-barcode::before{content:"\F0071"}.mdi-barcode-off::before{content:"\F1236"}.mdi-barcode-scan::before{content:"\F0072"}.mdi-barley::before{content:"\F0073"}.mdi-barley-off::before{content:"\F0B5D"}.mdi-barn::before{content:"\F0B5E"}.mdi-barrel::before{content:"\F0074"}.mdi-barrel-outline::before{content:"\F1A28"}.mdi-baseball::before{content:"\F0852"}.mdi-baseball-bat::before{content:"\F0853"}.mdi-baseball-diamond::before{content:"\F15EC"}.mdi-baseball-diamond-outline::before{content:"\F15ED"}.mdi-baseball-outline::before{content:"\F1C5A"}.mdi-bash::before{content:"\F1183"}.mdi-basket::before{content:"\F0076"}.mdi-basket-check::before{content:"\F18E5"}.mdi-basket-check-outline::before{content:"\F18E6"}.mdi-basket-fill::before{content:"\F0077"}.mdi-basket-minus::before{content:"\F1523"}.mdi-basket-minus-outline::before{content:"\F1524"}.mdi-basket-off::before{content:"\F1525"}.mdi-basket-off-outline::before{content:"\F1526"}.mdi-basket-outline::before{content:"\F1181"}.mdi-basket-plus::before{content:"\F1527"}.mdi-basket-plus-outline::before{content:"\F1528"}.mdi-basket-remove::before{content:"\F1529"}.mdi-basket-remove-outline::before{content:"\F152A"}.mdi-basket-unfill::before{content:"\F0078"}.mdi-basketball::before{content:"\F0806"}.mdi-basketball-hoop::before{content:"\F0C3B"}.mdi-basketball-hoop-outline::before{content:"\F0C3C"}.mdi-bat::before{content:"\F0B5F"}.mdi-bathtub::before{content:"\F1818"}.mdi-bathtub-outline::before{content:"\F1819"}.mdi-battery::before{content:"\F0079"}.mdi-battery-10::before{content:"\F007A"}.mdi-battery-10-bluetooth::before{content:"\F093E"}.mdi-battery-20::before{content:"\F007B"}.mdi-battery-20-bluetooth::before{content:"\F093F"}.mdi-battery-30::before{content:"\F007C"}.mdi-battery-30-bluetooth::before{content:"\F0940"}.mdi-battery-40::before{content:"\F007D"}.mdi-battery-40-bluetooth::before{content:"\F0941"}.mdi-battery-50::before{content:"\F007E"}.mdi-battery-50-bluetooth::before{content:"\F0942"}.mdi-battery-60::before{content:"\F007F"}.mdi-battery-60-bluetooth::before{content:"\F0943"}.mdi-battery-70::before{content:"\F0080"}.mdi-battery-70-bluetooth::before{content:"\F0944"}.mdi-battery-80::before{content:"\F0081"}.mdi-battery-80-bluetooth::before{content:"\F0945"}.mdi-battery-90::before{content:"\F0082"}.mdi-battery-90-bluetooth::before{content:"\F0946"}.mdi-battery-alert::before{content:"\F0083"}.mdi-battery-alert-bluetooth::before{content:"\F0947"}.mdi-battery-alert-variant::before{content:"\F10CC"}.mdi-battery-alert-variant-outline::before{content:"\F10CD"}.mdi-battery-arrow-down::before{content:"\F17DE"}.mdi-battery-arrow-down-outline::before{content:"\F17DF"}.mdi-battery-arrow-up::before{content:"\F17E0"}.mdi-battery-arrow-up-outline::before{content:"\F17E1"}.mdi-battery-bluetooth::before{content:"\F0948"}.mdi-battery-bluetooth-variant::before{content:"\F0949"}.mdi-battery-charging::before{content:"\F0084"}.mdi-battery-charging-10::before{content:"\F089C"}.mdi-battery-charging-100::before{content:"\F0085"}.mdi-battery-charging-20::before{content:"\F0086"}.mdi-battery-charging-30::before{content:"\F0087"}.mdi-battery-charging-40::before{content:"\F0088"}.mdi-battery-charging-50::before{content:"\F089D"}.mdi-battery-charging-60::before{content:"\F0089"}.mdi-battery-charging-70::before{content:"\F089E"}.mdi-battery-charging-80::before{content:"\F008A"}.mdi-battery-charging-90::before{content:"\F008B"}.mdi-battery-charging-high::before{content:"\F12A6"}.mdi-battery-charging-low::before{content:"\F12A4"}.mdi-battery-charging-medium::before{content:"\F12A5"}.mdi-battery-charging-outline::before{content:"\F089F"}.mdi-battery-charging-wireless::before{content:"\F0807"}.mdi-battery-charging-wireless-10::before{content:"\F0808"}.mdi-battery-charging-wireless-20::before{content:"\F0809"}.mdi-battery-charging-wireless-30::before{content:"\F080A"}.mdi-battery-charging-wireless-40::before{content:"\F080B"}.mdi-battery-charging-wireless-50::before{content:"\F080C"}.mdi-battery-charging-wireless-60::before{content:"\F080D"}.mdi-battery-charging-wireless-70::before{content:"\F080E"}.mdi-battery-charging-wireless-80::before{content:"\F080F"}.mdi-battery-charging-wireless-90::before{content:"\F0810"}.mdi-battery-charging-wireless-alert::before{content:"\F0811"}.mdi-battery-charging-wireless-outline::before{content:"\F0812"}.mdi-battery-check::before{content:"\F17E2"}.mdi-battery-check-outline::before{content:"\F17E3"}.mdi-battery-clock::before{content:"\F19E5"}.mdi-battery-clock-outline::before{content:"\F19E6"}.mdi-battery-heart::before{content:"\F120F"}.mdi-battery-heart-outline::before{content:"\F1210"}.mdi-battery-heart-variant::before{content:"\F1211"}.mdi-battery-high::before{content:"\F12A3"}.mdi-battery-lock::before{content:"\F179C"}.mdi-battery-lock-open::before{content:"\F179D"}.mdi-battery-low::before{content:"\F12A1"}.mdi-battery-medium::before{content:"\F12A2"}.mdi-battery-minus::before{content:"\F17E4"}.mdi-battery-minus-outline::before{content:"\F17E5"}.mdi-battery-minus-variant::before{content:"\F008C"}.mdi-battery-negative::before{content:"\F008D"}.mdi-battery-off::before{content:"\F125D"}.mdi-battery-off-outline::before{content:"\F125E"}.mdi-battery-outline::before{content:"\F008E"}.mdi-battery-plus::before{content:"\F17E6"}.mdi-battery-plus-outline::before{content:"\F17E7"}.mdi-battery-plus-variant::before{content:"\F008F"}.mdi-battery-positive::before{content:"\F0090"}.mdi-battery-remove::before{content:"\F17E8"}.mdi-battery-remove-outline::before{content:"\F17E9"}.mdi-battery-sync::before{content:"\F1834"}.mdi-battery-sync-outline::before{content:"\F1835"}.mdi-battery-unknown::before{content:"\F0091"}.mdi-battery-unknown-bluetooth::before{content:"\F094A"}.mdi-beach::before{content:"\F0092"}.mdi-beaker::before{content:"\F0CEA"}.mdi-beaker-alert::before{content:"\F1229"}.mdi-beaker-alert-outline::before{content:"\F122A"}.mdi-beaker-check::before{content:"\F122B"}.mdi-beaker-check-outline::before{content:"\F122C"}.mdi-beaker-minus::before{content:"\F122D"}.mdi-beaker-minus-outline::before{content:"\F122E"}.mdi-beaker-outline::before{content:"\F0690"}.mdi-beaker-plus::before{content:"\F122F"}.mdi-beaker-plus-outline::before{content:"\F1230"}.mdi-beaker-question::before{content:"\F1231"}.mdi-beaker-question-outline::before{content:"\F1232"}.mdi-beaker-remove::before{content:"\F1233"}.mdi-beaker-remove-outline::before{content:"\F1234"}.mdi-bed::before{content:"\F02E3"}.mdi-bed-clock::before{content:"\F1B94"}.mdi-bed-double::before{content:"\F0FD4"}.mdi-bed-double-outline::before{content:"\F0FD3"}.mdi-bed-empty::before{content:"\F08A0"}.mdi-bed-king::before{content:"\F0FD2"}.mdi-bed-king-outline::before{content:"\F0FD1"}.mdi-bed-outline::before{content:"\F0099"}.mdi-bed-queen::before{content:"\F0FD0"}.mdi-bed-queen-outline::before{content:"\F0FDB"}.mdi-bed-single::before{content:"\F106D"}.mdi-bed-single-outline::before{content:"\F106E"}.mdi-bee::before{content:"\F0FA1"}.mdi-bee-flower::before{content:"\F0FA2"}.mdi-beehive-off-outline::before{content:"\F13ED"}.mdi-beehive-outline::before{content:"\F10CE"}.mdi-beekeeper::before{content:"\F14E2"}.mdi-beer::before{content:"\F0098"}.mdi-beer-outline::before{content:"\F130C"}.mdi-bell::before{content:"\F009A"}.mdi-bell-alert::before{content:"\F0D59"}.mdi-bell-alert-outline::before{content:"\F0E81"}.mdi-bell-badge::before{content:"\F116B"}.mdi-bell-badge-outline::before{content:"\F0178"}.mdi-bell-cancel::before{content:"\F13E7"}.mdi-bell-cancel-outline::before{content:"\F13E8"}.mdi-bell-check::before{content:"\F11E5"}.mdi-bell-check-outline::before{content:"\F11E6"}.mdi-bell-circle::before{content:"\F0D5A"}.mdi-bell-circle-outline::before{content:"\F0D5B"}.mdi-bell-cog::before{content:"\F1A29"}.mdi-bell-cog-outline::before{content:"\F1A2A"}.mdi-bell-minus::before{content:"\F13E9"}.mdi-bell-minus-outline::before{content:"\F13EA"}.mdi-bell-off::before{content:"\F009B"}.mdi-bell-off-outline::before{content:"\F0A91"}.mdi-bell-outline::before{content:"\F009C"}.mdi-bell-plus::before{content:"\F009D"}.mdi-bell-plus-outline::before{content:"\F0A92"}.mdi-bell-remove::before{content:"\F13EB"}.mdi-bell-remove-outline::before{content:"\F13EC"}.mdi-bell-ring::before{content:"\F009E"}.mdi-bell-ring-outline::before{content:"\F009F"}.mdi-bell-sleep::before{content:"\F00A0"}.mdi-bell-sleep-outline::before{content:"\F0A93"}.mdi-bench::before{content:"\F1C21"}.mdi-bench-back::before{content:"\F1C22"}.mdi-beta::before{content:"\F00A1"}.mdi-betamax::before{content:"\F09CB"}.mdi-biathlon::before{content:"\F0E14"}.mdi-bicycle::before{content:"\F109C"}.mdi-bicycle-basket::before{content:"\F1235"}.mdi-bicycle-cargo::before{content:"\F189C"}.mdi-bicycle-electric::before{content:"\F15B4"}.mdi-bicycle-penny-farthing::before{content:"\F15E9"}.mdi-bike::before{content:"\F00A3"}.mdi-bike-fast::before{content:"\F111F"}.mdi-bike-pedal::before{content:"\F1C23"}.mdi-bike-pedal-clipless::before{content:"\F1C24"}.mdi-bike-pedal-mountain::before{content:"\F1C25"}.mdi-billboard::before{content:"\F1010"}.mdi-billiards::before{content:"\F0B61"}.mdi-billiards-rack::before{content:"\F0B62"}.mdi-binoculars::before{content:"\F00A5"}.mdi-bio::before{content:"\F00A6"}.mdi-biohazard::before{content:"\F00A7"}.mdi-bird::before{content:"\F15C6"}.mdi-bitbucket::before{content:"\F00A8"}.mdi-bitcoin::before{content:"\F0813"}.mdi-black-mesa::before{content:"\F00A9"}.mdi-blender::before{content:"\F0CEB"}.mdi-blender-outline::before{content:"\F181A"}.mdi-blender-software::before{content:"\F00AB"}.mdi-blinds::before{content:"\F00AC"}.mdi-blinds-horizontal::before{content:"\F1A2B"}.mdi-blinds-horizontal-closed::before{content:"\F1A2C"}.mdi-blinds-open::before{content:"\F1011"}.mdi-blinds-vertical::before{content:"\F1A2D"}.mdi-blinds-vertical-closed::before{content:"\F1A2E"}.mdi-block-helper::before{content:"\F00AD"}.mdi-blood-bag::before{content:"\F0CEC"}.mdi-bluetooth::before{content:"\F00AF"}.mdi-bluetooth-audio::before{content:"\F00B0"}.mdi-bluetooth-connect::before{content:"\F00B1"}.mdi-bluetooth-off::before{content:"\F00B2"}.mdi-bluetooth-settings::before{content:"\F00B3"}.mdi-bluetooth-transfer::before{content:"\F00B4"}.mdi-blur::before{content:"\F00B5"}.mdi-blur-linear::before{content:"\F00B6"}.mdi-blur-off::before{content:"\F00B7"}.mdi-blur-radial::before{content:"\F00B8"}.mdi-bolt::before{content:"\F0DB3"}.mdi-bomb::before{content:"\F0691"}.mdi-bomb-off::before{content:"\F06C5"}.mdi-bone::before{content:"\F00B9"}.mdi-bone-off::before{content:"\F19E0"}.mdi-book::before{content:"\F00BA"}.mdi-book-account::before{content:"\F13AD"}.mdi-book-account-outline::before{content:"\F13AE"}.mdi-book-alert::before{content:"\F167C"}.mdi-book-alert-outline::before{content:"\F167D"}.mdi-book-alphabet::before{content:"\F061D"}.mdi-book-arrow-down::before{content:"\F167E"}.mdi-book-arrow-down-outline::before{content:"\F167F"}.mdi-book-arrow-left::before{content:"\F1680"}.mdi-book-arrow-left-outline::before{content:"\F1681"}.mdi-book-arrow-right::before{content:"\F1682"}.mdi-book-arrow-right-outline::before{content:"\F1683"}.mdi-book-arrow-up::before{content:"\F1684"}.mdi-book-arrow-up-outline::before{content:"\F1685"}.mdi-book-cancel::before{content:"\F1686"}.mdi-book-cancel-outline::before{content:"\F1687"}.mdi-book-check::before{content:"\F14F3"}.mdi-book-check-outline::before{content:"\F14F4"}.mdi-book-clock::before{content:"\F1688"}.mdi-book-clock-outline::before{content:"\F1689"}.mdi-book-cog::before{content:"\F168A"}.mdi-book-cog-outline::before{content:"\F168B"}.mdi-book-cross::before{content:"\F00A2"}.mdi-book-edit::before{content:"\F168C"}.mdi-book-edit-outline::before{content:"\F168D"}.mdi-book-education::before{content:"\F16C9"}.mdi-book-education-outline::before{content:"\F16CA"}.mdi-book-heart::before{content:"\F1A1D"}.mdi-book-heart-outline::before{content:"\F1A1E"}.mdi-book-information-variant::before{content:"\F106F"}.mdi-book-lock::before{content:"\F079A"}.mdi-book-lock-open::before{content:"\F079B"}.mdi-book-lock-open-outline::before{content:"\F168E"}.mdi-book-lock-outline::before{content:"\F168F"}.mdi-book-marker::before{content:"\F1690"}.mdi-book-marker-outline::before{content:"\F1691"}.mdi-book-minus::before{content:"\F05D9"}.mdi-book-minus-multiple::before{content:"\F0A94"}.mdi-book-minus-multiple-outline::before{content:"\F090B"}.mdi-book-minus-outline::before{content:"\F1692"}.mdi-book-multiple::before{content:"\F00BB"}.mdi-book-multiple-outline::before{content:"\F0436"}.mdi-book-music::before{content:"\F0067"}.mdi-book-music-outline::before{content:"\F1693"}.mdi-book-off::before{content:"\F1694"}.mdi-book-off-outline::before{content:"\F1695"}.mdi-book-open::before{content:"\F00BD"}.mdi-book-open-blank-variant::before{content:"\F00BE"}.mdi-book-open-blank-variant-outline::before{content:"\F1CCB"}.mdi-book-open-outline::before{content:"\F0B63"}.mdi-book-open-page-variant::before{content:"\F05DA"}.mdi-book-open-page-variant-outline::before{content:"\F15D6"}.mdi-book-open-variant::before{content:"\F14F7"}.mdi-book-open-variant-outline::before{content:"\F1CCC"}.mdi-book-outline::before{content:"\F0B64"}.mdi-book-play::before{content:"\F0E82"}.mdi-book-play-outline::before{content:"\F0E83"}.mdi-book-plus::before{content:"\F05DB"}.mdi-book-plus-multiple::before{content:"\F0A95"}.mdi-book-plus-multiple-outline::before{content:"\F0ADE"}.mdi-book-plus-outline::before{content:"\F1696"}.mdi-book-refresh::before{content:"\F1697"}.mdi-book-refresh-outline::before{content:"\F1698"}.mdi-book-remove::before{content:"\F0A97"}.mdi-book-remove-multiple::before{content:"\F0A96"}.mdi-book-remove-multiple-outline::before{content:"\F04CA"}.mdi-book-remove-outline::before{content:"\F1699"}.mdi-book-search::before{content:"\F0E84"}.mdi-book-search-outline::before{content:"\F0E85"}.mdi-book-settings::before{content:"\F169A"}.mdi-book-settings-outline::before{content:"\F169B"}.mdi-book-sync::before{content:"\F169C"}.mdi-book-sync-outline::before{content:"\F16C8"}.mdi-book-variant::before{content:"\F00BF"}.mdi-bookmark::before{content:"\F00C0"}.mdi-bookmark-box::before{content:"\F1B75"}.mdi-bookmark-box-multiple::before{content:"\F196C"}.mdi-bookmark-box-multiple-outline::before{content:"\F196D"}.mdi-bookmark-box-outline::before{content:"\F1B76"}.mdi-bookmark-check::before{content:"\F00C1"}.mdi-bookmark-check-outline::before{content:"\F137B"}.mdi-bookmark-minus::before{content:"\F09CC"}.mdi-bookmark-minus-outline::before{content:"\F09CD"}.mdi-bookmark-multiple::before{content:"\F0E15"}.mdi-bookmark-multiple-outline::before{content:"\F0E16"}.mdi-bookmark-music::before{content:"\F00C2"}.mdi-bookmark-music-outline::before{content:"\F1379"}.mdi-bookmark-off::before{content:"\F09CE"}.mdi-bookmark-off-outline::before{content:"\F09CF"}.mdi-bookmark-outline::before{content:"\F00C3"}.mdi-bookmark-plus::before{content:"\F00C5"}.mdi-bookmark-plus-outline::before{content:"\F00C4"}.mdi-bookmark-remove::before{content:"\F00C6"}.mdi-bookmark-remove-outline::before{content:"\F137A"}.mdi-bookshelf::before{content:"\F125F"}.mdi-boom-gate::before{content:"\F0E86"}.mdi-boom-gate-alert::before{content:"\F0E87"}.mdi-boom-gate-alert-outline::before{content:"\F0E88"}.mdi-boom-gate-arrow-down::before{content:"\F0E89"}.mdi-boom-gate-arrow-down-outline::before{content:"\F0E8A"}.mdi-boom-gate-arrow-up::before{content:"\F0E8C"}.mdi-boom-gate-arrow-up-outline::before{content:"\F0E8D"}.mdi-boom-gate-outline::before{content:"\F0E8B"}.mdi-boom-gate-up::before{content:"\F17F9"}.mdi-boom-gate-up-outline::before{content:"\F17FA"}.mdi-boombox::before{content:"\F05DC"}.mdi-boomerang::before{content:"\F10CF"}.mdi-bootstrap::before{content:"\F06C6"}.mdi-border-all::before{content:"\F00C7"}.mdi-border-all-variant::before{content:"\F08A1"}.mdi-border-bottom::before{content:"\F00C8"}.mdi-border-bottom-variant::before{content:"\F08A2"}.mdi-border-color::before{content:"\F00C9"}.mdi-border-horizontal::before{content:"\F00CA"}.mdi-border-inside::before{content:"\F00CB"}.mdi-border-left::before{content:"\F00CC"}.mdi-border-left-variant::before{content:"\F08A3"}.mdi-border-none::before{content:"\F00CD"}.mdi-border-none-variant::before{content:"\F08A4"}.mdi-border-outside::before{content:"\F00CE"}.mdi-border-radius::before{content:"\F1AF4"}.mdi-border-right::before{content:"\F00CF"}.mdi-border-right-variant::before{content:"\F08A5"}.mdi-border-style::before{content:"\F00D0"}.mdi-border-top::before{content:"\F00D1"}.mdi-border-top-variant::before{content:"\F08A6"}.mdi-border-vertical::before{content:"\F00D2"}.mdi-bottle-soda::before{content:"\F1070"}.mdi-bottle-soda-classic::before{content:"\F1071"}.mdi-bottle-soda-classic-outline::before{content:"\F1363"}.mdi-bottle-soda-outline::before{content:"\F1072"}.mdi-bottle-tonic::before{content:"\F112E"}.mdi-bottle-tonic-outline::before{content:"\F112F"}.mdi-bottle-tonic-plus::before{content:"\F1130"}.mdi-bottle-tonic-plus-outline::before{content:"\F1131"}.mdi-bottle-tonic-skull::before{content:"\F1132"}.mdi-bottle-tonic-skull-outline::before{content:"\F1133"}.mdi-bottle-wine::before{content:"\F0854"}.mdi-bottle-wine-outline::before{content:"\F1310"}.mdi-bow-arrow::before{content:"\F1841"}.mdi-bow-tie::before{content:"\F0678"}.mdi-bowl::before{content:"\F028E"}.mdi-bowl-mix::before{content:"\F0617"}.mdi-bowl-mix-outline::before{content:"\F02E4"}.mdi-bowl-outline::before{content:"\F02A9"}.mdi-bowling::before{content:"\F00D3"}.mdi-box::before{content:"\F00D4"}.mdi-box-cutter::before{content:"\F00D5"}.mdi-box-cutter-off::before{content:"\F0B4A"}.mdi-box-shadow::before{content:"\F0637"}.mdi-boxing-glove::before{content:"\F0B65"}.mdi-braille::before{content:"\F09D0"}.mdi-brain::before{content:"\F09D1"}.mdi-bread-slice::before{content:"\F0CEE"}.mdi-bread-slice-outline::before{content:"\F0CEF"}.mdi-bridge::before{content:"\F0618"}.mdi-briefcase::before{content:"\F00D6"}.mdi-briefcase-account::before{content:"\F0CF0"}.mdi-briefcase-account-outline::before{content:"\F0CF1"}.mdi-briefcase-arrow-left-right::before{content:"\F1A8D"}.mdi-briefcase-arrow-left-right-outline::before{content:"\F1A8E"}.mdi-briefcase-arrow-up-down::before{content:"\F1A8F"}.mdi-briefcase-arrow-up-down-outline::before{content:"\F1A90"}.mdi-briefcase-check::before{content:"\F00D7"}.mdi-briefcase-check-outline::before{content:"\F131E"}.mdi-briefcase-clock::before{content:"\F10D0"}.mdi-briefcase-clock-outline::before{content:"\F10D1"}.mdi-briefcase-download::before{content:"\F00D8"}.mdi-briefcase-download-outline::before{content:"\F0C3D"}.mdi-briefcase-edit::before{content:"\F0A98"}.mdi-briefcase-edit-outline::before{content:"\F0C3E"}.mdi-briefcase-eye::before{content:"\F17D9"}.mdi-briefcase-eye-outline::before{content:"\F17DA"}.mdi-briefcase-minus::before{content:"\F0A2A"}.mdi-briefcase-minus-outline::before{content:"\F0C3F"}.mdi-briefcase-off::before{content:"\F1658"}.mdi-briefcase-off-outline::before{content:"\F1659"}.mdi-briefcase-outline::before{content:"\F0814"}.mdi-briefcase-plus::before{content:"\F0A2B"}.mdi-briefcase-plus-outline::before{content:"\F0C40"}.mdi-briefcase-remove::before{content:"\F0A2C"}.mdi-briefcase-remove-outline::before{content:"\F0C41"}.mdi-briefcase-search::before{content:"\F0A2D"}.mdi-briefcase-search-outline::before{content:"\F0C42"}.mdi-briefcase-upload::before{content:"\F00D9"}.mdi-briefcase-upload-outline::before{content:"\F0C43"}.mdi-briefcase-variant::before{content:"\F1494"}.mdi-briefcase-variant-off::before{content:"\F165A"}.mdi-briefcase-variant-off-outline::before{content:"\F165B"}.mdi-briefcase-variant-outline::before{content:"\F1495"}.mdi-brightness-1::before{content:"\F00DA"}.mdi-brightness-2::before{content:"\F00DB"}.mdi-brightness-3::before{content:"\F00DC"}.mdi-brightness-4::before{content:"\F00DD"}.mdi-brightness-5::before{content:"\F00DE"}.mdi-brightness-6::before{content:"\F00DF"}.mdi-brightness-7::before{content:"\F00E0"}.mdi-brightness-auto::before{content:"\F00E1"}.mdi-brightness-percent::before{content:"\F0CF2"}.mdi-broadcast::before{content:"\F1720"}.mdi-broadcast-off::before{content:"\F1721"}.mdi-broom::before{content:"\F00E2"}.mdi-brush::before{content:"\F00E3"}.mdi-brush-off::before{content:"\F1771"}.mdi-brush-outline::before{content:"\F1A0D"}.mdi-brush-variant::before{content:"\F1813"}.mdi-bucket::before{content:"\F1415"}.mdi-bucket-outline::before{content:"\F1416"}.mdi-buffet::before{content:"\F0578"}.mdi-bug::before{content:"\F00E4"}.mdi-bug-check::before{content:"\F0A2E"}.mdi-bug-check-outline::before{content:"\F0A2F"}.mdi-bug-outline::before{content:"\F0A30"}.mdi-bug-pause::before{content:"\F1AF5"}.mdi-bug-pause-outline::before{content:"\F1AF6"}.mdi-bug-play::before{content:"\F1AF7"}.mdi-bug-play-outline::before{content:"\F1AF8"}.mdi-bug-stop::before{content:"\F1AF9"}.mdi-bug-stop-outline::before{content:"\F1AFA"}.mdi-bugle::before{content:"\F0DB4"}.mdi-bulkhead-light::before{content:"\F1A2F"}.mdi-bulldozer::before{content:"\F0B22"}.mdi-bullet::before{content:"\F0CF3"}.mdi-bulletin-board::before{content:"\F00E5"}.mdi-bullhorn::before{content:"\F00E6"}.mdi-bullhorn-outline::before{content:"\F0B23"}.mdi-bullhorn-variant::before{content:"\F196E"}.mdi-bullhorn-variant-outline::before{content:"\F196F"}.mdi-bullseye::before{content:"\F05DD"}.mdi-bullseye-arrow::before{content:"\F08C9"}.mdi-bulma::before{content:"\F12E7"}.mdi-bunk-bed::before{content:"\F1302"}.mdi-bunk-bed-outline::before{content:"\F0097"}.mdi-bus::before{content:"\F00E7"}.mdi-bus-alert::before{content:"\F0A99"}.mdi-bus-articulated-end::before{content:"\F079C"}.mdi-bus-articulated-front::before{content:"\F079D"}.mdi-bus-clock::before{content:"\F08CA"}.mdi-bus-double-decker::before{content:"\F079E"}.mdi-bus-electric::before{content:"\F191D"}.mdi-bus-marker::before{content:"\F1212"}.mdi-bus-multiple::before{content:"\F0F3F"}.mdi-bus-school::before{content:"\F079F"}.mdi-bus-side::before{content:"\F07A0"}.mdi-bus-sign::before{content:"\F1CC1"}.mdi-bus-stop::before{content:"\F1012"}.mdi-bus-stop-covered::before{content:"\F1013"}.mdi-bus-stop-uncovered::before{content:"\F1014"}.mdi-bus-wrench::before{content:"\F1CC2"}.mdi-butterfly::before{content:"\F1589"}.mdi-butterfly-outline::before{content:"\F158A"}.mdi-button-cursor::before{content:"\F1B4F"}.mdi-button-pointer::before{content:"\F1B50"}.mdi-cabin-a-frame::before{content:"\F188C"}.mdi-cable-data::before{content:"\F1394"}.mdi-cached::before{content:"\F00E8"}.mdi-cactus::before{content:"\F0DB5"}.mdi-cake::before{content:"\F00E9"}.mdi-cake-layered::before{content:"\F00EA"}.mdi-cake-variant::before{content:"\F00EB"}.mdi-cake-variant-outline::before{content:"\F17F0"}.mdi-calculator::before{content:"\F00EC"}.mdi-calculator-variant::before{content:"\F0A9A"}.mdi-calculator-variant-outline::before{content:"\F15A6"}.mdi-calendar::before{content:"\F00ED"}.mdi-calendar-account::before{content:"\F0ED7"}.mdi-calendar-account-outline::before{content:"\F0ED8"}.mdi-calendar-alert::before{content:"\F0A31"}.mdi-calendar-alert-outline::before{content:"\F1B62"}.mdi-calendar-arrow-left::before{content:"\F1134"}.mdi-calendar-arrow-right::before{content:"\F1135"}.mdi-calendar-badge::before{content:"\F1B9D"}.mdi-calendar-badge-outline::before{content:"\F1B9E"}.mdi-calendar-blank::before{content:"\F00EE"}.mdi-calendar-blank-multiple::before{content:"\F1073"}.mdi-calendar-blank-outline::before{content:"\F0B66"}.mdi-calendar-check::before{content:"\F00EF"}.mdi-calendar-check-outline::before{content:"\F0C44"}.mdi-calendar-clock::before{content:"\F00F0"}.mdi-calendar-clock-outline::before{content:"\F16E1"}.mdi-calendar-collapse-horizontal::before{content:"\F189D"}.mdi-calendar-collapse-horizontal-outline::before{content:"\F1B63"}.mdi-calendar-cursor::before{content:"\F157B"}.mdi-calendar-cursor-outline::before{content:"\F1B64"}.mdi-calendar-edit::before{content:"\F08A7"}.mdi-calendar-edit-outline::before{content:"\F1B65"}.mdi-calendar-end::before{content:"\F166C"}.mdi-calendar-end-outline::before{content:"\F1B66"}.mdi-calendar-expand-horizontal::before{content:"\F189E"}.mdi-calendar-expand-horizontal-outline::before{content:"\F1B67"}.mdi-calendar-export::before{content:"\F0B24"}.mdi-calendar-export-outline::before{content:"\F1B68"}.mdi-calendar-filter::before{content:"\F1A32"}.mdi-calendar-filter-outline::before{content:"\F1A33"}.mdi-calendar-heart::before{content:"\F09D2"}.mdi-calendar-heart-outline::before{content:"\F1B69"}.mdi-calendar-import::before{content:"\F0B25"}.mdi-calendar-import-outline::before{content:"\F1B6A"}.mdi-calendar-lock::before{content:"\F1641"}.mdi-calendar-lock-open::before{content:"\F1B5B"}.mdi-calendar-lock-open-outline::before{content:"\F1B5C"}.mdi-calendar-lock-outline::before{content:"\F1642"}.mdi-calendar-minus::before{content:"\F0D5C"}.mdi-calendar-minus-outline::before{content:"\F1B6B"}.mdi-calendar-month::before{content:"\F0E17"}.mdi-calendar-month-outline::before{content:"\F0E18"}.mdi-calendar-multiple::before{content:"\F00F1"}.mdi-calendar-multiple-check::before{content:"\F00F2"}.mdi-calendar-multiselect::before{content:"\F0A32"}.mdi-calendar-multiselect-outline::before{content:"\F1B55"}.mdi-calendar-outline::before{content:"\F0B67"}.mdi-calendar-plus::before{content:"\F00F3"}.mdi-calendar-plus-outline::before{content:"\F1B6C"}.mdi-calendar-question::before{content:"\F0692"}.mdi-calendar-question-outline::before{content:"\F1B6D"}.mdi-calendar-range::before{content:"\F0679"}.mdi-calendar-range-outline::before{content:"\F0B68"}.mdi-calendar-refresh::before{content:"\F01E1"}.mdi-calendar-refresh-outline::before{content:"\F0203"}.mdi-calendar-remove::before{content:"\F00F4"}.mdi-calendar-remove-outline::before{content:"\F0C45"}.mdi-calendar-search::before{content:"\F094C"}.mdi-calendar-search-outline::before{content:"\F1B6E"}.mdi-calendar-star::before{content:"\F09D3"}.mdi-calendar-star-four-points::before{content:"\F1C1F"}.mdi-calendar-star-outline::before{content:"\F1B53"}.mdi-calendar-start::before{content:"\F166D"}.mdi-calendar-start-outline::before{content:"\F1B6F"}.mdi-calendar-sync::before{content:"\F0E8E"}.mdi-calendar-sync-outline::before{content:"\F0E8F"}.mdi-calendar-text::before{content:"\F00F5"}.mdi-calendar-text-outline::before{content:"\F0C46"}.mdi-calendar-today::before{content:"\F00F6"}.mdi-calendar-today-outline::before{content:"\F1A30"}.mdi-calendar-week::before{content:"\F0A33"}.mdi-calendar-week-begin::before{content:"\F0A34"}.mdi-calendar-week-begin-outline::before{content:"\F1A31"}.mdi-calendar-week-outline::before{content:"\F1A34"}.mdi-calendar-weekend::before{content:"\F0ED9"}.mdi-calendar-weekend-outline::before{content:"\F0EDA"}.mdi-call-made::before{content:"\F00F7"}.mdi-call-merge::before{content:"\F00F8"}.mdi-call-missed::before{content:"\F00F9"}.mdi-call-received::before{content:"\F00FA"}.mdi-call-split::before{content:"\F00FB"}.mdi-camcorder::before{content:"\F00FC"}.mdi-camcorder-off::before{content:"\F00FF"}.mdi-camera::before{content:"\F0100"}.mdi-camera-account::before{content:"\F08CB"}.mdi-camera-burst::before{content:"\F0693"}.mdi-camera-control::before{content:"\F0B69"}.mdi-camera-document::before{content:"\F1871"}.mdi-camera-document-off::before{content:"\F1872"}.mdi-camera-enhance::before{content:"\F0101"}.mdi-camera-enhance-outline::before{content:"\F0B6A"}.mdi-camera-flip::before{content:"\F15D9"}.mdi-camera-flip-outline::before{content:"\F15DA"}.mdi-camera-front::before{content:"\F0102"}.mdi-camera-front-variant::before{content:"\F0103"}.mdi-camera-gopro::before{content:"\F07A1"}.mdi-camera-image::before{content:"\F08CC"}.mdi-camera-iris::before{content:"\F0104"}.mdi-camera-lock::before{content:"\F1A14"}.mdi-camera-lock-open::before{content:"\F1C0D"}.mdi-camera-lock-open-outline::before{content:"\F1C0E"}.mdi-camera-lock-outline::before{content:"\F1A15"}.mdi-camera-marker::before{content:"\F19A7"}.mdi-camera-marker-outline::before{content:"\F19A8"}.mdi-camera-metering-center::before{content:"\F07A2"}.mdi-camera-metering-matrix::before{content:"\F07A3"}.mdi-camera-metering-partial::before{content:"\F07A4"}.mdi-camera-metering-spot::before{content:"\F07A5"}.mdi-camera-off::before{content:"\F05DF"}.mdi-camera-off-outline::before{content:"\F19BF"}.mdi-camera-outline::before{content:"\F0D5D"}.mdi-camera-party-mode::before{content:"\F0105"}.mdi-camera-plus::before{content:"\F0EDB"}.mdi-camera-plus-outline::before{content:"\F0EDC"}.mdi-camera-rear::before{content:"\F0106"}.mdi-camera-rear-variant::before{content:"\F0107"}.mdi-camera-retake::before{content:"\F0E19"}.mdi-camera-retake-outline::before{content:"\F0E1A"}.mdi-camera-switch::before{content:"\F0108"}.mdi-camera-switch-outline::before{content:"\F084A"}.mdi-camera-timer::before{content:"\F0109"}.mdi-camera-wireless::before{content:"\F0DB6"}.mdi-camera-wireless-outline::before{content:"\F0DB7"}.mdi-campfire::before{content:"\F0EDD"}.mdi-cancel::before{content:"\F073A"}.mdi-candelabra::before{content:"\F17D2"}.mdi-candelabra-fire::before{content:"\F17D3"}.mdi-candle::before{content:"\F05E2"}.mdi-candy::before{content:"\F1970"}.mdi-candy-off::before{content:"\F1971"}.mdi-candy-off-outline::before{content:"\F1972"}.mdi-candy-outline::before{content:"\F1973"}.mdi-candycane::before{content:"\F010A"}.mdi-cannabis::before{content:"\F07A6"}.mdi-cannabis-off::before{content:"\F166E"}.mdi-caps-lock::before{content:"\F0A9B"}.mdi-car::before{content:"\F010B"}.mdi-car-2-plus::before{content:"\F1015"}.mdi-car-3-plus::before{content:"\F1016"}.mdi-car-arrow-left::before{content:"\F13B2"}.mdi-car-arrow-right::before{content:"\F13B3"}.mdi-car-back::before{content:"\F0E1B"}.mdi-car-battery::before{content:"\F010C"}.mdi-car-brake-abs::before{content:"\F0C47"}.mdi-car-brake-alert::before{content:"\F0C48"}.mdi-car-brake-fluid-level::before{content:"\F1909"}.mdi-car-brake-hold::before{content:"\F0D5E"}.mdi-car-brake-low-pressure::before{content:"\F190A"}.mdi-car-brake-parking::before{content:"\F0D5F"}.mdi-car-brake-retarder::before{content:"\F1017"}.mdi-car-brake-temperature::before{content:"\F190B"}.mdi-car-brake-worn-linings::before{content:"\F190C"}.mdi-car-child-seat::before{content:"\F0FA3"}.mdi-car-clock::before{content:"\F1974"}.mdi-car-clutch::before{content:"\F1018"}.mdi-car-cog::before{content:"\F13CC"}.mdi-car-connected::before{content:"\F010D"}.mdi-car-convertible::before{content:"\F07A7"}.mdi-car-coolant-level::before{content:"\F1019"}.mdi-car-cruise-control::before{content:"\F0D60"}.mdi-car-defrost-front::before{content:"\F0D61"}.mdi-car-defrost-rear::before{content:"\F0D62"}.mdi-car-door::before{content:"\F0B6B"}.mdi-car-door-lock::before{content:"\F109D"}.mdi-car-door-lock-open::before{content:"\F1C81"}.mdi-car-electric::before{content:"\F0B6C"}.mdi-car-electric-outline::before{content:"\F15B5"}.mdi-car-emergency::before{content:"\F160F"}.mdi-car-esp::before{content:"\F0C49"}.mdi-car-estate::before{content:"\F07A8"}.mdi-car-hatchback::before{content:"\F07A9"}.mdi-car-info::before{content:"\F11BE"}.mdi-car-key::before{content:"\F0B6D"}.mdi-car-lifted-pickup::before{content:"\F152D"}.mdi-car-light-alert::before{content:"\F190D"}.mdi-car-light-dimmed::before{content:"\F0C4A"}.mdi-car-light-fog::before{content:"\F0C4B"}.mdi-car-light-high::before{content:"\F0C4C"}.mdi-car-limousine::before{content:"\F08CD"}.mdi-car-multiple::before{content:"\F0B6E"}.mdi-car-off::before{content:"\F0E1C"}.mdi-car-outline::before{content:"\F14ED"}.mdi-car-parking-lights::before{content:"\F0D63"}.mdi-car-pickup::before{content:"\F07AA"}.mdi-car-search::before{content:"\F1B8D"}.mdi-car-search-outline::before{content:"\F1B8E"}.mdi-car-seat::before{content:"\F0FA4"}.mdi-car-seat-cooler::before{content:"\F0FA5"}.mdi-car-seat-heater::before{content:"\F0FA6"}.mdi-car-select::before{content:"\F1879"}.mdi-car-settings::before{content:"\F13CD"}.mdi-car-shift-pattern::before{content:"\F0F40"}.mdi-car-side::before{content:"\F07AB"}.mdi-car-speed-limiter::before{content:"\F190E"}.mdi-car-sports::before{content:"\F07AC"}.mdi-car-tire-alert::before{content:"\F0C4D"}.mdi-car-traction-control::before{content:"\F0D64"}.mdi-car-turbocharger::before{content:"\F101A"}.mdi-car-wash::before{content:"\F010E"}.mdi-car-windshield::before{content:"\F101B"}.mdi-car-windshield-outline::before{content:"\F101C"}.mdi-car-wireless::before{content:"\F1878"}.mdi-car-wrench::before{content:"\F1814"}.mdi-carabiner::before{content:"\F14C0"}.mdi-caravan::before{content:"\F07AD"}.mdi-card::before{content:"\F0B6F"}.mdi-card-account-details::before{content:"\F05D2"}.mdi-card-account-details-outline::before{content:"\F0DAB"}.mdi-card-account-details-star::before{content:"\F02A3"}.mdi-card-account-details-star-outline::before{content:"\F06DB"}.mdi-card-account-mail::before{content:"\F018E"}.mdi-card-account-mail-outline::before{content:"\F0E98"}.mdi-card-account-phone::before{content:"\F0E99"}.mdi-card-account-phone-outline::before{content:"\F0E9A"}.mdi-card-bulleted::before{content:"\F0B70"}.mdi-card-bulleted-off::before{content:"\F0B71"}.mdi-card-bulleted-off-outline::before{content:"\F0B72"}.mdi-card-bulleted-outline::before{content:"\F0B73"}.mdi-card-bulleted-settings::before{content:"\F0B74"}.mdi-card-bulleted-settings-outline::before{content:"\F0B75"}.mdi-card-minus::before{content:"\F1600"}.mdi-card-minus-outline::before{content:"\F1601"}.mdi-card-multiple::before{content:"\F17F1"}.mdi-card-multiple-outline::before{content:"\F17F2"}.mdi-card-off::before{content:"\F1602"}.mdi-card-off-outline::before{content:"\F1603"}.mdi-card-outline::before{content:"\F0B76"}.mdi-card-plus::before{content:"\F11FF"}.mdi-card-plus-outline::before{content:"\F1200"}.mdi-card-remove::before{content:"\F1604"}.mdi-card-remove-outline::before{content:"\F1605"}.mdi-card-search::before{content:"\F1074"}.mdi-card-search-outline::before{content:"\F1075"}.mdi-card-text::before{content:"\F0B77"}.mdi-card-text-outline::before{content:"\F0B78"}.mdi-cards::before{content:"\F0638"}.mdi-cards-club::before{content:"\F08CE"}.mdi-cards-club-outline::before{content:"\F189F"}.mdi-cards-diamond::before{content:"\F08CF"}.mdi-cards-diamond-outline::before{content:"\F101D"}.mdi-cards-heart::before{content:"\F08D0"}.mdi-cards-heart-outline::before{content:"\F18A0"}.mdi-cards-outline::before{content:"\F0639"}.mdi-cards-playing::before{content:"\F18A1"}.mdi-cards-playing-club::before{content:"\F18A2"}.mdi-cards-playing-club-multiple::before{content:"\F18A3"}.mdi-cards-playing-club-multiple-outline::before{content:"\F18A4"}.mdi-cards-playing-club-outline::before{content:"\F18A5"}.mdi-cards-playing-diamond::before{content:"\F18A6"}.mdi-cards-playing-diamond-multiple::before{content:"\F18A7"}.mdi-cards-playing-diamond-multiple-outline::before{content:"\F18A8"}.mdi-cards-playing-diamond-outline::before{content:"\F18A9"}.mdi-cards-playing-heart::before{content:"\F18AA"}.mdi-cards-playing-heart-multiple::before{content:"\F18AB"}.mdi-cards-playing-heart-multiple-outline::before{content:"\F18AC"}.mdi-cards-playing-heart-outline::before{content:"\F18AD"}.mdi-cards-playing-outline::before{content:"\F063A"}.mdi-cards-playing-spade::before{content:"\F18AE"}.mdi-cards-playing-spade-multiple::before{content:"\F18AF"}.mdi-cards-playing-spade-multiple-outline::before{content:"\F18B0"}.mdi-cards-playing-spade-outline::before{content:"\F18B1"}.mdi-cards-spade::before{content:"\F08D1"}.mdi-cards-spade-outline::before{content:"\F18B2"}.mdi-cards-variant::before{content:"\F06C7"}.mdi-carrot::before{content:"\F010F"}.mdi-cart::before{content:"\F0110"}.mdi-cart-arrow-down::before{content:"\F0D66"}.mdi-cart-arrow-right::before{content:"\F0C4E"}.mdi-cart-arrow-up::before{content:"\F0D67"}.mdi-cart-check::before{content:"\F15EA"}.mdi-cart-heart::before{content:"\F18E0"}.mdi-cart-minus::before{content:"\F0D68"}.mdi-cart-off::before{content:"\F066B"}.mdi-cart-outline::before{content:"\F0111"}.mdi-cart-percent::before{content:"\F1BAE"}.mdi-cart-plus::before{content:"\F0112"}.mdi-cart-remove::before{content:"\F0D69"}.mdi-cart-variant::before{content:"\F15EB"}.mdi-case-sensitive-alt::before{content:"\F0113"}.mdi-cash::before{content:"\F0114"}.mdi-cash-100::before{content:"\F0115"}.mdi-cash-check::before{content:"\F14EE"}.mdi-cash-clock::before{content:"\F1A91"}.mdi-cash-edit::before{content:"\F1CAB"}.mdi-cash-fast::before{content:"\F185C"}.mdi-cash-lock::before{content:"\F14EA"}.mdi-cash-lock-open::before{content:"\F14EB"}.mdi-cash-marker::before{content:"\F0DB8"}.mdi-cash-minus::before{content:"\F1260"}.mdi-cash-multiple::before{content:"\F0116"}.mdi-cash-off::before{content:"\F1C79"}.mdi-cash-plus::before{content:"\F1261"}.mdi-cash-refund::before{content:"\F0A9C"}.mdi-cash-register::before{content:"\F0CF4"}.mdi-cash-remove::before{content:"\F1262"}.mdi-cash-sync::before{content:"\F1A92"}.mdi-cassette::before{content:"\F09D4"}.mdi-cast::before{content:"\F0118"}.mdi-cast-audio::before{content:"\F101E"}.mdi-cast-audio-variant::before{content:"\F1749"}.mdi-cast-connected::before{content:"\F0119"}.mdi-cast-education::before{content:"\F0E1D"}.mdi-cast-off::before{content:"\F078A"}.mdi-cast-variant::before{content:"\F001F"}.mdi-castle::before{content:"\F011A"}.mdi-cat::before{content:"\F011B"}.mdi-cctv::before{content:"\F07AE"}.mdi-cctv-off::before{content:"\F185F"}.mdi-ceiling-fan::before{content:"\F1797"}.mdi-ceiling-fan-light::before{content:"\F1798"}.mdi-ceiling-light::before{content:"\F0769"}.mdi-ceiling-light-multiple::before{content:"\F18DD"}.mdi-ceiling-light-multiple-outline::before{content:"\F18DE"}.mdi-ceiling-light-outline::before{content:"\F17C7"}.mdi-cellphone::before{content:"\F011C"}.mdi-cellphone-arrow-down::before{content:"\F09D5"}.mdi-cellphone-arrow-down-variant::before{content:"\F19C5"}.mdi-cellphone-basic::before{content:"\F011E"}.mdi-cellphone-charging::before{content:"\F1397"}.mdi-cellphone-check::before{content:"\F17FD"}.mdi-cellphone-cog::before{content:"\F0951"}.mdi-cellphone-dock::before{content:"\F011F"}.mdi-cellphone-information::before{content:"\F0F41"}.mdi-cellphone-key::before{content:"\F094E"}.mdi-cellphone-link::before{content:"\F0121"}.mdi-cellphone-link-off::before{content:"\F0122"}.mdi-cellphone-lock::before{content:"\F094F"}.mdi-cellphone-marker::before{content:"\F183A"}.mdi-cellphone-message::before{content:"\F08D3"}.mdi-cellphone-message-off::before{content:"\F10D2"}.mdi-cellphone-nfc::before{content:"\F0E90"}.mdi-cellphone-nfc-off::before{content:"\F12D8"}.mdi-cellphone-off::before{content:"\F0950"}.mdi-cellphone-play::before{content:"\F101F"}.mdi-cellphone-remove::before{content:"\F094D"}.mdi-cellphone-screenshot::before{content:"\F0A35"}.mdi-cellphone-settings::before{content:"\F0123"}.mdi-cellphone-sound::before{content:"\F0952"}.mdi-cellphone-text::before{content:"\F08D2"}.mdi-cellphone-wireless::before{content:"\F0815"}.mdi-centos::before{content:"\F111A"}.mdi-certificate::before{content:"\F0124"}.mdi-certificate-outline::before{content:"\F1188"}.mdi-chair-rolling::before{content:"\F0F48"}.mdi-chair-school::before{content:"\F0125"}.mdi-chandelier::before{content:"\F1793"}.mdi-charity::before{content:"\F0C4F"}.mdi-charity-search::before{content:"\F1C82"}.mdi-chart-arc::before{content:"\F0126"}.mdi-chart-areaspline::before{content:"\F0127"}.mdi-chart-areaspline-variant::before{content:"\F0E91"}.mdi-chart-bar::before{content:"\F0128"}.mdi-chart-bar-stacked::before{content:"\F076A"}.mdi-chart-bell-curve::before{content:"\F0C50"}.mdi-chart-bell-curve-cumulative::before{content:"\F0FA7"}.mdi-chart-box::before{content:"\F154D"}.mdi-chart-box-multiple::before{content:"\F1CCD"}.mdi-chart-box-multiple-outline::before{content:"\F1CCE"}.mdi-chart-box-outline::before{content:"\F154E"}.mdi-chart-box-plus-outline::before{content:"\F154F"}.mdi-chart-bubble::before{content:"\F05E3"}.mdi-chart-donut::before{content:"\F07AF"}.mdi-chart-donut-variant::before{content:"\F07B0"}.mdi-chart-gantt::before{content:"\F066C"}.mdi-chart-histogram::before{content:"\F0129"}.mdi-chart-line::before{content:"\F012A"}.mdi-chart-line-stacked::before{content:"\F076B"}.mdi-chart-line-variant::before{content:"\F07B1"}.mdi-chart-multiline::before{content:"\F08D4"}.mdi-chart-multiple::before{content:"\F1213"}.mdi-chart-pie::before{content:"\F012B"}.mdi-chart-pie-outline::before{content:"\F1BDF"}.mdi-chart-ppf::before{content:"\F1380"}.mdi-chart-sankey::before{content:"\F11DF"}.mdi-chart-sankey-variant::before{content:"\F11E0"}.mdi-chart-scatter-plot::before{content:"\F0E92"}.mdi-chart-scatter-plot-hexbin::before{content:"\F066D"}.mdi-chart-timeline::before{content:"\F066E"}.mdi-chart-timeline-variant::before{content:"\F0E93"}.mdi-chart-timeline-variant-shimmer::before{content:"\F15B6"}.mdi-chart-tree::before{content:"\F0E94"}.mdi-chart-waterfall::before{content:"\F1918"}.mdi-chat::before{content:"\F0B79"}.mdi-chat-alert::before{content:"\F0B7A"}.mdi-chat-alert-outline::before{content:"\F12C9"}.mdi-chat-minus::before{content:"\F1410"}.mdi-chat-minus-outline::before{content:"\F1413"}.mdi-chat-outline::before{content:"\F0EDE"}.mdi-chat-plus::before{content:"\F140F"}.mdi-chat-plus-outline::before{content:"\F1412"}.mdi-chat-processing::before{content:"\F0B7B"}.mdi-chat-processing-outline::before{content:"\F12CA"}.mdi-chat-question::before{content:"\F1738"}.mdi-chat-question-outline::before{content:"\F1739"}.mdi-chat-remove::before{content:"\F1411"}.mdi-chat-remove-outline::before{content:"\F1414"}.mdi-chat-sleep::before{content:"\F12D1"}.mdi-chat-sleep-outline::before{content:"\F12D2"}.mdi-check::before{content:"\F012C"}.mdi-check-all::before{content:"\F012D"}.mdi-check-bold::before{content:"\F0E1E"}.mdi-check-circle::before{content:"\F05E0"}.mdi-check-circle-outline::before{content:"\F05E1"}.mdi-check-decagram::before{content:"\F0791"}.mdi-check-decagram-outline::before{content:"\F1740"}.mdi-check-network::before{content:"\F0C53"}.mdi-check-network-outline::before{content:"\F0C54"}.mdi-check-outline::before{content:"\F0855"}.mdi-check-underline::before{content:"\F0E1F"}.mdi-check-underline-circle::before{content:"\F0E20"}.mdi-check-underline-circle-outline::before{content:"\F0E21"}.mdi-checkbook::before{content:"\F0A9D"}.mdi-checkbook-arrow-left::before{content:"\F1C1D"}.mdi-checkbook-arrow-right::before{content:"\F1C1E"}.mdi-checkbox-blank::before{content:"\F012E"}.mdi-checkbox-blank-badge::before{content:"\F1176"}.mdi-checkbox-blank-badge-outline::before{content:"\F0117"}.mdi-checkbox-blank-circle::before{content:"\F012F"}.mdi-checkbox-blank-circle-outline::before{content:"\F0130"}.mdi-checkbox-blank-off::before{content:"\F12EC"}.mdi-checkbox-blank-off-outline::before{content:"\F12ED"}.mdi-checkbox-blank-outline::before{content:"\F0131"}.mdi-checkbox-intermediate::before{content:"\F0856"}.mdi-checkbox-intermediate-variant::before{content:"\F1B54"}.mdi-checkbox-marked::before{content:"\F0132"}.mdi-checkbox-marked-circle::before{content:"\F0133"}.mdi-checkbox-marked-circle-auto-outline::before{content:"\F1C26"}.mdi-checkbox-marked-circle-minus-outline::before{content:"\F1C27"}.mdi-checkbox-marked-circle-outline::before{content:"\F0134"}.mdi-checkbox-marked-circle-plus-outline::before{content:"\F1927"}.mdi-checkbox-marked-outline::before{content:"\F0135"}.mdi-checkbox-multiple-blank::before{content:"\F0136"}.mdi-checkbox-multiple-blank-circle::before{content:"\F063B"}.mdi-checkbox-multiple-blank-circle-outline::before{content:"\F063C"}.mdi-checkbox-multiple-blank-outline::before{content:"\F0137"}.mdi-checkbox-multiple-marked::before{content:"\F0138"}.mdi-checkbox-multiple-marked-circle::before{content:"\F063D"}.mdi-checkbox-multiple-marked-circle-outline::before{content:"\F063E"}.mdi-checkbox-multiple-marked-outline::before{content:"\F0139"}.mdi-checkbox-multiple-outline::before{content:"\F0C51"}.mdi-checkbox-outline::before{content:"\F0C52"}.mdi-checkerboard::before{content:"\F013A"}.mdi-checkerboard-minus::before{content:"\F1202"}.mdi-checkerboard-plus::before{content:"\F1201"}.mdi-checkerboard-remove::before{content:"\F1203"}.mdi-cheese::before{content:"\F12B9"}.mdi-cheese-off::before{content:"\F13EE"}.mdi-chef-hat::before{content:"\F0B7C"}.mdi-chemical-weapon::before{content:"\F013B"}.mdi-chess-bishop::before{content:"\F085C"}.mdi-chess-king::before{content:"\F0857"}.mdi-chess-knight::before{content:"\F0858"}.mdi-chess-pawn::before{content:"\F0859"}.mdi-chess-queen::before{content:"\F085A"}.mdi-chess-rook::before{content:"\F085B"}.mdi-chevron-double-down::before{content:"\F013C"}.mdi-chevron-double-left::before{content:"\F013D"}.mdi-chevron-double-right::before{content:"\F013E"}.mdi-chevron-double-up::before{content:"\F013F"}.mdi-chevron-down::before{content:"\F0140"}.mdi-chevron-down-box::before{content:"\F09D6"}.mdi-chevron-down-box-outline::before{content:"\F09D7"}.mdi-chevron-down-circle::before{content:"\F0B26"}.mdi-chevron-down-circle-outline::before{content:"\F0B27"}.mdi-chevron-left::before{content:"\F0141"}.mdi-chevron-left-box::before{content:"\F09D8"}.mdi-chevron-left-box-outline::before{content:"\F09D9"}.mdi-chevron-left-circle::before{content:"\F0B28"}.mdi-chevron-left-circle-outline::before{content:"\F0B29"}.mdi-chevron-right::before{content:"\F0142"}.mdi-chevron-right-box::before{content:"\F09DA"}.mdi-chevron-right-box-outline::before{content:"\F09DB"}.mdi-chevron-right-circle::before{content:"\F0B2A"}.mdi-chevron-right-circle-outline::before{content:"\F0B2B"}.mdi-chevron-triple-down::before{content:"\F0DB9"}.mdi-chevron-triple-left::before{content:"\F0DBA"}.mdi-chevron-triple-right::before{content:"\F0DBB"}.mdi-chevron-triple-up::before{content:"\F0DBC"}.mdi-chevron-up::before{content:"\F0143"}.mdi-chevron-up-box::before{content:"\F09DC"}.mdi-chevron-up-box-outline::before{content:"\F09DD"}.mdi-chevron-up-circle::before{content:"\F0B2C"}.mdi-chevron-up-circle-outline::before{content:"\F0B2D"}.mdi-chili-alert::before{content:"\F17EA"}.mdi-chili-alert-outline::before{content:"\F17EB"}.mdi-chili-hot::before{content:"\F07B2"}.mdi-chili-hot-outline::before{content:"\F17EC"}.mdi-chili-medium::before{content:"\F07B3"}.mdi-chili-medium-outline::before{content:"\F17ED"}.mdi-chili-mild::before{content:"\F07B4"}.mdi-chili-mild-outline::before{content:"\F17EE"}.mdi-chili-off::before{content:"\F1467"}.mdi-chili-off-outline::before{content:"\F17EF"}.mdi-chip::before{content:"\F061A"}.mdi-church::before{content:"\F0144"}.mdi-church-outline::before{content:"\F1B02"}.mdi-cigar::before{content:"\F1189"}.mdi-cigar-off::before{content:"\F141B"}.mdi-circle::before{content:"\F0765"}.mdi-circle-box::before{content:"\F15DC"}.mdi-circle-box-outline::before{content:"\F15DD"}.mdi-circle-double::before{content:"\F0E95"}.mdi-circle-edit-outline::before{content:"\F08D5"}.mdi-circle-expand::before{content:"\F0E96"}.mdi-circle-half::before{content:"\F1395"}.mdi-circle-half-full::before{content:"\F1396"}.mdi-circle-medium::before{content:"\F09DE"}.mdi-circle-multiple::before{content:"\F0B38"}.mdi-circle-multiple-outline::before{content:"\F0695"}.mdi-circle-off-outline::before{content:"\F10D3"}.mdi-circle-opacity::before{content:"\F1853"}.mdi-circle-outline::before{content:"\F0766"}.mdi-circle-slice-1::before{content:"\F0A9E"}.mdi-circle-slice-2::before{content:"\F0A9F"}.mdi-circle-slice-3::before{content:"\F0AA0"}.mdi-circle-slice-4::before{content:"\F0AA1"}.mdi-circle-slice-5::before{content:"\F0AA2"}.mdi-circle-slice-6::before{content:"\F0AA3"}.mdi-circle-slice-7::before{content:"\F0AA4"}.mdi-circle-slice-8::before{content:"\F0AA5"}.mdi-circle-small::before{content:"\F09DF"}.mdi-circular-saw::before{content:"\F0E22"}.mdi-city::before{content:"\F0146"}.mdi-city-switch::before{content:"\F1C28"}.mdi-city-variant::before{content:"\F0A36"}.mdi-city-variant-outline::before{content:"\F0A37"}.mdi-clipboard::before{content:"\F0147"}.mdi-clipboard-account::before{content:"\F0148"}.mdi-clipboard-account-outline::before{content:"\F0C55"}.mdi-clipboard-alert::before{content:"\F0149"}.mdi-clipboard-alert-outline::before{content:"\F0CF7"}.mdi-clipboard-arrow-down::before{content:"\F014A"}.mdi-clipboard-arrow-down-outline::before{content:"\F0C56"}.mdi-clipboard-arrow-left::before{content:"\F014B"}.mdi-clipboard-arrow-left-outline::before{content:"\F0CF8"}.mdi-clipboard-arrow-right::before{content:"\F0CF9"}.mdi-clipboard-arrow-right-outline::before{content:"\F0CFA"}.mdi-clipboard-arrow-up::before{content:"\F0C57"}.mdi-clipboard-arrow-up-outline::before{content:"\F0C58"}.mdi-clipboard-check::before{content:"\F014E"}.mdi-clipboard-check-multiple::before{content:"\F1263"}.mdi-clipboard-check-multiple-outline::before{content:"\F1264"}.mdi-clipboard-check-outline::before{content:"\F08A8"}.mdi-clipboard-clock::before{content:"\F16E2"}.mdi-clipboard-clock-outline::before{content:"\F16E3"}.mdi-clipboard-edit::before{content:"\F14E5"}.mdi-clipboard-edit-outline::before{content:"\F14E6"}.mdi-clipboard-file::before{content:"\F1265"}.mdi-clipboard-file-outline::before{content:"\F1266"}.mdi-clipboard-flow::before{content:"\F06C8"}.mdi-clipboard-flow-outline::before{content:"\F1117"}.mdi-clipboard-list::before{content:"\F10D4"}.mdi-clipboard-list-outline::before{content:"\F10D5"}.mdi-clipboard-minus::before{content:"\F1618"}.mdi-clipboard-minus-outline::before{content:"\F1619"}.mdi-clipboard-multiple::before{content:"\F1267"}.mdi-clipboard-multiple-outline::before{content:"\F1268"}.mdi-clipboard-off::before{content:"\F161A"}.mdi-clipboard-off-outline::before{content:"\F161B"}.mdi-clipboard-outline::before{content:"\F014C"}.mdi-clipboard-play::before{content:"\F0C59"}.mdi-clipboard-play-multiple::before{content:"\F1269"}.mdi-clipboard-play-multiple-outline::before{content:"\F126A"}.mdi-clipboard-play-outline::before{content:"\F0C5A"}.mdi-clipboard-plus::before{content:"\F0751"}.mdi-clipboard-plus-outline::before{content:"\F131F"}.mdi-clipboard-pulse::before{content:"\F085D"}.mdi-clipboard-pulse-outline::before{content:"\F085E"}.mdi-clipboard-remove::before{content:"\F161C"}.mdi-clipboard-remove-outline::before{content:"\F161D"}.mdi-clipboard-search::before{content:"\F161E"}.mdi-clipboard-search-outline::before{content:"\F161F"}.mdi-clipboard-text::before{content:"\F014D"}.mdi-clipboard-text-clock::before{content:"\F18F9"}.mdi-clipboard-text-clock-outline::before{content:"\F18FA"}.mdi-clipboard-text-multiple::before{content:"\F126B"}.mdi-clipboard-text-multiple-outline::before{content:"\F126C"}.mdi-clipboard-text-off::before{content:"\F1620"}.mdi-clipboard-text-off-outline::before{content:"\F1621"}.mdi-clipboard-text-outline::before{content:"\F0A38"}.mdi-clipboard-text-play::before{content:"\F0C5B"}.mdi-clipboard-text-play-outline::before{content:"\F0C5C"}.mdi-clipboard-text-search::before{content:"\F1622"}.mdi-clipboard-text-search-outline::before{content:"\F1623"}.mdi-clippy::before{content:"\F014F"}.mdi-clock::before{content:"\F0954"}.mdi-clock-alert::before{content:"\F0955"}.mdi-clock-alert-outline::before{content:"\F05CE"}.mdi-clock-check::before{content:"\F0FA8"}.mdi-clock-check-outline::before{content:"\F0FA9"}.mdi-clock-digital::before{content:"\F0E97"}.mdi-clock-edit::before{content:"\F19BA"}.mdi-clock-edit-outline::before{content:"\F19BB"}.mdi-clock-end::before{content:"\F0151"}.mdi-clock-fast::before{content:"\F0152"}.mdi-clock-in::before{content:"\F0153"}.mdi-clock-minus::before{content:"\F1863"}.mdi-clock-minus-outline::before{content:"\F1864"}.mdi-clock-out::before{content:"\F0154"}.mdi-clock-outline::before{content:"\F0150"}.mdi-clock-plus::before{content:"\F1861"}.mdi-clock-plus-outline::before{content:"\F1862"}.mdi-clock-remove::before{content:"\F1865"}.mdi-clock-remove-outline::before{content:"\F1866"}.mdi-clock-star-four-points::before{content:"\F1C29"}.mdi-clock-star-four-points-outline::before{content:"\F1C2A"}.mdi-clock-start::before{content:"\F0155"}.mdi-clock-time-eight::before{content:"\F1446"}.mdi-clock-time-eight-outline::before{content:"\F1452"}.mdi-clock-time-eleven::before{content:"\F1449"}.mdi-clock-time-eleven-outline::before{content:"\F1455"}.mdi-clock-time-five::before{content:"\F1443"}.mdi-clock-time-five-outline::before{content:"\F144F"}.mdi-clock-time-four::before{content:"\F1442"}.mdi-clock-time-four-outline::before{content:"\F144E"}.mdi-clock-time-nine::before{content:"\F1447"}.mdi-clock-time-nine-outline::before{content:"\F1453"}.mdi-clock-time-one::before{content:"\F143F"}.mdi-clock-time-one-outline::before{content:"\F144B"}.mdi-clock-time-seven::before{content:"\F1445"}.mdi-clock-time-seven-outline::before{content:"\F1451"}.mdi-clock-time-six::before{content:"\F1444"}.mdi-clock-time-six-outline::before{content:"\F1450"}.mdi-clock-time-ten::before{content:"\F1448"}.mdi-clock-time-ten-outline::before{content:"\F1454"}.mdi-clock-time-three::before{content:"\F1441"}.mdi-clock-time-three-outline::before{content:"\F144D"}.mdi-clock-time-twelve::before{content:"\F144A"}.mdi-clock-time-twelve-outline::before{content:"\F1456"}.mdi-clock-time-two::before{content:"\F1440"}.mdi-clock-time-two-outline::before{content:"\F144C"}.mdi-close::before{content:"\F0156"}.mdi-close-box::before{content:"\F0157"}.mdi-close-box-multiple::before{content:"\F0C5D"}.mdi-close-box-multiple-outline::before{content:"\F0C5E"}.mdi-close-box-outline::before{content:"\F0158"}.mdi-close-circle::before{content:"\F0159"}.mdi-close-circle-multiple::before{content:"\F062A"}.mdi-close-circle-multiple-outline::before{content:"\F0883"}.mdi-close-circle-outline::before{content:"\F015A"}.mdi-close-network::before{content:"\F015B"}.mdi-close-network-outline::before{content:"\F0C5F"}.mdi-close-octagon::before{content:"\F015C"}.mdi-close-octagon-outline::before{content:"\F015D"}.mdi-close-outline::before{content:"\F06C9"}.mdi-close-thick::before{content:"\F1398"}.mdi-closed-caption::before{content:"\F015E"}.mdi-closed-caption-outline::before{content:"\F0DBD"}.mdi-cloud::before{content:"\F015F"}.mdi-cloud-alert::before{content:"\F09E0"}.mdi-cloud-alert-outline::before{content:"\F1BE0"}.mdi-cloud-arrow-down::before{content:"\F1BE1"}.mdi-cloud-arrow-down-outline::before{content:"\F1BE2"}.mdi-cloud-arrow-left::before{content:"\F1BE3"}.mdi-cloud-arrow-left-outline::before{content:"\F1BE4"}.mdi-cloud-arrow-right::before{content:"\F1BE5"}.mdi-cloud-arrow-right-outline::before{content:"\F1BE6"}.mdi-cloud-arrow-up::before{content:"\F1BE7"}.mdi-cloud-arrow-up-outline::before{content:"\F1BE8"}.mdi-cloud-braces::before{content:"\F07B5"}.mdi-cloud-cancel::before{content:"\F1BE9"}.mdi-cloud-cancel-outline::before{content:"\F1BEA"}.mdi-cloud-check::before{content:"\F1BEB"}.mdi-cloud-check-outline::before{content:"\F1BEC"}.mdi-cloud-check-variant::before{content:"\F0160"}.mdi-cloud-check-variant-outline::before{content:"\F12CC"}.mdi-cloud-circle::before{content:"\F0161"}.mdi-cloud-circle-outline::before{content:"\F1BED"}.mdi-cloud-clock::before{content:"\F1BEE"}.mdi-cloud-clock-outline::before{content:"\F1BEF"}.mdi-cloud-cog::before{content:"\F1BF0"}.mdi-cloud-cog-outline::before{content:"\F1BF1"}.mdi-cloud-download::before{content:"\F0162"}.mdi-cloud-download-outline::before{content:"\F0B7D"}.mdi-cloud-key::before{content:"\F1CA1"}.mdi-cloud-key-outline::before{content:"\F1CA2"}.mdi-cloud-lock::before{content:"\F11F1"}.mdi-cloud-lock-open::before{content:"\F1BF2"}.mdi-cloud-lock-open-outline::before{content:"\F1BF3"}.mdi-cloud-lock-outline::before{content:"\F11F2"}.mdi-cloud-minus::before{content:"\F1BF4"}.mdi-cloud-minus-outline::before{content:"\F1BF5"}.mdi-cloud-off::before{content:"\F1BF6"}.mdi-cloud-off-outline::before{content:"\F0164"}.mdi-cloud-outline::before{content:"\F0163"}.mdi-cloud-percent::before{content:"\F1A35"}.mdi-cloud-percent-outline::before{content:"\F1A36"}.mdi-cloud-plus::before{content:"\F1BF7"}.mdi-cloud-plus-outline::before{content:"\F1BF8"}.mdi-cloud-print::before{content:"\F0165"}.mdi-cloud-print-outline::before{content:"\F0166"}.mdi-cloud-question::before{content:"\F0A39"}.mdi-cloud-question-outline::before{content:"\F1BF9"}.mdi-cloud-refresh::before{content:"\F1BFA"}.mdi-cloud-refresh-outline::before{content:"\F1BFB"}.mdi-cloud-refresh-variant::before{content:"\F052A"}.mdi-cloud-refresh-variant-outline::before{content:"\F1BFC"}.mdi-cloud-remove::before{content:"\F1BFD"}.mdi-cloud-remove-outline::before{content:"\F1BFE"}.mdi-cloud-search::before{content:"\F0956"}.mdi-cloud-search-outline::before{content:"\F0957"}.mdi-cloud-sync::before{content:"\F063F"}.mdi-cloud-sync-outline::before{content:"\F12D6"}.mdi-cloud-tags::before{content:"\F07B6"}.mdi-cloud-upload::before{content:"\F0167"}.mdi-cloud-upload-outline::before{content:"\F0B7E"}.mdi-clouds::before{content:"\F1B95"}.mdi-clover::before{content:"\F0816"}.mdi-clover-outline::before{content:"\F1C62"}.mdi-coach-lamp::before{content:"\F1020"}.mdi-coach-lamp-variant::before{content:"\F1A37"}.mdi-coat-rack::before{content:"\F109E"}.mdi-code-array::before{content:"\F0168"}.mdi-code-block-braces::before{content:"\F1C83"}.mdi-code-block-brackets::before{content:"\F1C84"}.mdi-code-block-parentheses::before{content:"\F1C85"}.mdi-code-block-tags::before{content:"\F1C86"}.mdi-code-braces::before{content:"\F0169"}.mdi-code-braces-box::before{content:"\F10D6"}.mdi-code-brackets::before{content:"\F016A"}.mdi-code-equal::before{content:"\F016B"}.mdi-code-greater-than::before{content:"\F016C"}.mdi-code-greater-than-or-equal::before{content:"\F016D"}.mdi-code-json::before{content:"\F0626"}.mdi-code-less-than::before{content:"\F016E"}.mdi-code-less-than-or-equal::before{content:"\F016F"}.mdi-code-not-equal::before{content:"\F0170"}.mdi-code-not-equal-variant::before{content:"\F0171"}.mdi-code-parentheses::before{content:"\F0172"}.mdi-code-parentheses-box::before{content:"\F10D7"}.mdi-code-string::before{content:"\F0173"}.mdi-code-tags::before{content:"\F0174"}.mdi-code-tags-check::before{content:"\F0694"}.mdi-codepen::before{content:"\F0175"}.mdi-coffee::before{content:"\F0176"}.mdi-coffee-maker::before{content:"\F109F"}.mdi-coffee-maker-check::before{content:"\F1931"}.mdi-coffee-maker-check-outline::before{content:"\F1932"}.mdi-coffee-maker-outline::before{content:"\F181B"}.mdi-coffee-off::before{content:"\F0FAA"}.mdi-coffee-off-outline::before{content:"\F0FAB"}.mdi-coffee-outline::before{content:"\F06CA"}.mdi-coffee-to-go::before{content:"\F0177"}.mdi-coffee-to-go-outline::before{content:"\F130E"}.mdi-coffin::before{content:"\F0B7F"}.mdi-cog::before{content:"\F0493"}.mdi-cog-box::before{content:"\F0494"}.mdi-cog-clockwise::before{content:"\F11DD"}.mdi-cog-counterclockwise::before{content:"\F11DE"}.mdi-cog-off::before{content:"\F13CE"}.mdi-cog-off-outline::before{content:"\F13CF"}.mdi-cog-outline::before{content:"\F08BB"}.mdi-cog-pause::before{content:"\F1933"}.mdi-cog-pause-outline::before{content:"\F1934"}.mdi-cog-play::before{content:"\F1935"}.mdi-cog-play-outline::before{content:"\F1936"}.mdi-cog-refresh::before{content:"\F145E"}.mdi-cog-refresh-outline::before{content:"\F145F"}.mdi-cog-stop::before{content:"\F1937"}.mdi-cog-stop-outline::before{content:"\F1938"}.mdi-cog-sync::before{content:"\F1460"}.mdi-cog-sync-outline::before{content:"\F1461"}.mdi-cog-transfer::before{content:"\F105B"}.mdi-cog-transfer-outline::before{content:"\F105C"}.mdi-cogs::before{content:"\F08D6"}.mdi-collage::before{content:"\F0640"}.mdi-collapse-all::before{content:"\F0AA6"}.mdi-collapse-all-outline::before{content:"\F0AA7"}.mdi-color-helper::before{content:"\F0179"}.mdi-comma::before{content:"\F0E23"}.mdi-comma-box::before{content:"\F0E2B"}.mdi-comma-box-outline::before{content:"\F0E24"}.mdi-comma-circle::before{content:"\F0E25"}.mdi-comma-circle-outline::before{content:"\F0E26"}.mdi-comment::before{content:"\F017A"}.mdi-comment-account::before{content:"\F017B"}.mdi-comment-account-outline::before{content:"\F017C"}.mdi-comment-alert::before{content:"\F017D"}.mdi-comment-alert-outline::before{content:"\F017E"}.mdi-comment-arrow-left::before{content:"\F09E1"}.mdi-comment-arrow-left-outline::before{content:"\F09E2"}.mdi-comment-arrow-right::before{content:"\F09E3"}.mdi-comment-arrow-right-outline::before{content:"\F09E4"}.mdi-comment-bookmark::before{content:"\F15AE"}.mdi-comment-bookmark-outline::before{content:"\F15AF"}.mdi-comment-check::before{content:"\F017F"}.mdi-comment-check-outline::before{content:"\F0180"}.mdi-comment-edit::before{content:"\F11BF"}.mdi-comment-edit-outline::before{content:"\F12C4"}.mdi-comment-eye::before{content:"\F0A3A"}.mdi-comment-eye-outline::before{content:"\F0A3B"}.mdi-comment-flash::before{content:"\F15B0"}.mdi-comment-flash-outline::before{content:"\F15B1"}.mdi-comment-minus::before{content:"\F15DF"}.mdi-comment-minus-outline::before{content:"\F15E0"}.mdi-comment-multiple::before{content:"\F085F"}.mdi-comment-multiple-outline::before{content:"\F0181"}.mdi-comment-off::before{content:"\F15E1"}.mdi-comment-off-outline::before{content:"\F15E2"}.mdi-comment-outline::before{content:"\F0182"}.mdi-comment-plus::before{content:"\F09E5"}.mdi-comment-plus-outline::before{content:"\F0183"}.mdi-comment-processing::before{content:"\F0184"}.mdi-comment-processing-outline::before{content:"\F0185"}.mdi-comment-question::before{content:"\F0817"}.mdi-comment-question-outline::before{content:"\F0186"}.mdi-comment-quote::before{content:"\F1021"}.mdi-comment-quote-outline::before{content:"\F1022"}.mdi-comment-remove::before{content:"\F05DE"}.mdi-comment-remove-outline::before{content:"\F0187"}.mdi-comment-search::before{content:"\F0A3C"}.mdi-comment-search-outline::before{content:"\F0A3D"}.mdi-comment-text::before{content:"\F0188"}.mdi-comment-text-multiple::before{content:"\F0860"}.mdi-comment-text-multiple-outline::before{content:"\F0861"}.mdi-comment-text-outline::before{content:"\F0189"}.mdi-compare::before{content:"\F018A"}.mdi-compare-horizontal::before{content:"\F1492"}.mdi-compare-remove::before{content:"\F18B3"}.mdi-compare-vertical::before{content:"\F1493"}.mdi-compass::before{content:"\F018B"}.mdi-compass-off::before{content:"\F0B80"}.mdi-compass-off-outline::before{content:"\F0B81"}.mdi-compass-outline::before{content:"\F018C"}.mdi-compass-rose::before{content:"\F1382"}.mdi-compost::before{content:"\F1A38"}.mdi-cone::before{content:"\F194C"}.mdi-cone-off::before{content:"\F194D"}.mdi-connection::before{content:"\F1616"}.mdi-console::before{content:"\F018D"}.mdi-console-line::before{content:"\F07B7"}.mdi-console-network::before{content:"\F08A9"}.mdi-console-network-outline::before{content:"\F0C60"}.mdi-consolidate::before{content:"\F10D8"}.mdi-contactless-payment::before{content:"\F0D6A"}.mdi-contactless-payment-circle::before{content:"\F0321"}.mdi-contactless-payment-circle-outline::before{content:"\F0408"}.mdi-contacts::before{content:"\F06CB"}.mdi-contacts-outline::before{content:"\F05B8"}.mdi-contain::before{content:"\F0A3E"}.mdi-contain-end::before{content:"\F0A3F"}.mdi-contain-start::before{content:"\F0A40"}.mdi-content-copy::before{content:"\F018F"}.mdi-content-cut::before{content:"\F0190"}.mdi-content-duplicate::before{content:"\F0191"}.mdi-content-paste::before{content:"\F0192"}.mdi-content-save::before{content:"\F0193"}.mdi-content-save-alert::before{content:"\F0F42"}.mdi-content-save-alert-outline::before{content:"\F0F43"}.mdi-content-save-all::before{content:"\F0194"}.mdi-content-save-all-outline::before{content:"\F0F44"}.mdi-content-save-check::before{content:"\F18EA"}.mdi-content-save-check-outline::before{content:"\F18EB"}.mdi-content-save-cog::before{content:"\F145B"}.mdi-content-save-cog-outline::before{content:"\F145C"}.mdi-content-save-edit::before{content:"\F0CFB"}.mdi-content-save-edit-outline::before{content:"\F0CFC"}.mdi-content-save-minus::before{content:"\F1B43"}.mdi-content-save-minus-outline::before{content:"\F1B44"}.mdi-content-save-move::before{content:"\F0E27"}.mdi-content-save-move-outline::before{content:"\F0E28"}.mdi-content-save-off::before{content:"\F1643"}.mdi-content-save-off-outline::before{content:"\F1644"}.mdi-content-save-outline::before{content:"\F0818"}.mdi-content-save-plus::before{content:"\F1B41"}.mdi-content-save-plus-outline::before{content:"\F1B42"}.mdi-content-save-settings::before{content:"\F061B"}.mdi-content-save-settings-outline::before{content:"\F0B2E"}.mdi-contrast::before{content:"\F0195"}.mdi-contrast-box::before{content:"\F0196"}.mdi-contrast-circle::before{content:"\F0197"}.mdi-controller::before{content:"\F02B4"}.mdi-controller-classic::before{content:"\F0B82"}.mdi-controller-classic-outline::before{content:"\F0B83"}.mdi-controller-off::before{content:"\F02B5"}.mdi-cookie::before{content:"\F0198"}.mdi-cookie-alert::before{content:"\F16D0"}.mdi-cookie-alert-outline::before{content:"\F16D1"}.mdi-cookie-check::before{content:"\F16D2"}.mdi-cookie-check-outline::before{content:"\F16D3"}.mdi-cookie-clock::before{content:"\F16E4"}.mdi-cookie-clock-outline::before{content:"\F16E5"}.mdi-cookie-cog::before{content:"\F16D4"}.mdi-cookie-cog-outline::before{content:"\F16D5"}.mdi-cookie-edit::before{content:"\F16E6"}.mdi-cookie-edit-outline::before{content:"\F16E7"}.mdi-cookie-lock::before{content:"\F16E8"}.mdi-cookie-lock-outline::before{content:"\F16E9"}.mdi-cookie-minus::before{content:"\F16DA"}.mdi-cookie-minus-outline::before{content:"\F16DB"}.mdi-cookie-off::before{content:"\F16EA"}.mdi-cookie-off-outline::before{content:"\F16EB"}.mdi-cookie-outline::before{content:"\F16DE"}.mdi-cookie-plus::before{content:"\F16D6"}.mdi-cookie-plus-outline::before{content:"\F16D7"}.mdi-cookie-refresh::before{content:"\F16EC"}.mdi-cookie-refresh-outline::before{content:"\F16ED"}.mdi-cookie-remove::before{content:"\F16D8"}.mdi-cookie-remove-outline::before{content:"\F16D9"}.mdi-cookie-settings::before{content:"\F16DC"}.mdi-cookie-settings-outline::before{content:"\F16DD"}.mdi-coolant-temperature::before{content:"\F03C8"}.mdi-copyleft::before{content:"\F1939"}.mdi-copyright::before{content:"\F05E6"}.mdi-cordova::before{content:"\F0958"}.mdi-corn::before{content:"\F07B8"}.mdi-corn-off::before{content:"\F13EF"}.mdi-cosine-wave::before{content:"\F1479"}.mdi-counter::before{content:"\F0199"}.mdi-countertop::before{content:"\F181C"}.mdi-countertop-outline::before{content:"\F181D"}.mdi-cow::before{content:"\F019A"}.mdi-cow-off::before{content:"\F18FC"}.mdi-cpu-32-bit::before{content:"\F0EDF"}.mdi-cpu-64-bit::before{content:"\F0EE0"}.mdi-cradle::before{content:"\F198B"}.mdi-cradle-outline::before{content:"\F1991"}.mdi-crane::before{content:"\F0862"}.mdi-creation::before{content:"\F0674"}.mdi-creation-outline::before{content:"\F1C2B"}.mdi-creative-commons::before{content:"\F0D6B"}.mdi-credit-card::before{content:"\F0FEF"}.mdi-credit-card-check::before{content:"\F13D0"}.mdi-credit-card-check-outline::before{content:"\F13D1"}.mdi-credit-card-chip::before{content:"\F190F"}.mdi-credit-card-chip-outline::before{content:"\F1910"}.mdi-credit-card-clock::before{content:"\F0EE1"}.mdi-credit-card-clock-outline::before{content:"\F0EE2"}.mdi-credit-card-edit::before{content:"\F17D7"}.mdi-credit-card-edit-outline::before{content:"\F17D8"}.mdi-credit-card-fast::before{content:"\F1911"}.mdi-credit-card-fast-outline::before{content:"\F1912"}.mdi-credit-card-lock::before{content:"\F18E7"}.mdi-credit-card-lock-outline::before{content:"\F18E8"}.mdi-credit-card-marker::before{content:"\F06A8"}.mdi-credit-card-marker-outline::before{content:"\F0DBE"}.mdi-credit-card-minus::before{content:"\F0FAC"}.mdi-credit-card-minus-outline::before{content:"\F0FAD"}.mdi-credit-card-multiple::before{content:"\F0FF0"}.mdi-credit-card-multiple-outline::before{content:"\F019C"}.mdi-credit-card-off::before{content:"\F0FF1"}.mdi-credit-card-off-outline::before{content:"\F05E4"}.mdi-credit-card-outline::before{content:"\F019B"}.mdi-credit-card-plus::before{content:"\F0FF2"}.mdi-credit-card-plus-outline::before{content:"\F0676"}.mdi-credit-card-refresh::before{content:"\F1645"}.mdi-credit-card-refresh-outline::before{content:"\F1646"}.mdi-credit-card-refund::before{content:"\F0FF3"}.mdi-credit-card-refund-outline::before{content:"\F0AA8"}.mdi-credit-card-remove::before{content:"\F0FAE"}.mdi-credit-card-remove-outline::before{content:"\F0FAF"}.mdi-credit-card-scan::before{content:"\F0FF4"}.mdi-credit-card-scan-outline::before{content:"\F019D"}.mdi-credit-card-search::before{content:"\F1647"}.mdi-credit-card-search-outline::before{content:"\F1648"}.mdi-credit-card-settings::before{content:"\F0FF5"}.mdi-credit-card-settings-outline::before{content:"\F08D7"}.mdi-credit-card-sync::before{content:"\F1649"}.mdi-credit-card-sync-outline::before{content:"\F164A"}.mdi-credit-card-wireless::before{content:"\F0802"}.mdi-credit-card-wireless-off::before{content:"\F057A"}.mdi-credit-card-wireless-off-outline::before{content:"\F057B"}.mdi-credit-card-wireless-outline::before{content:"\F0D6C"}.mdi-cricket::before{content:"\F0D6D"}.mdi-crop::before{content:"\F019E"}.mdi-crop-free::before{content:"\F019F"}.mdi-crop-landscape::before{content:"\F01A0"}.mdi-crop-portrait::before{content:"\F01A1"}.mdi-crop-rotate::before{content:"\F0696"}.mdi-crop-square::before{content:"\F01A2"}.mdi-cross::before{content:"\F0953"}.mdi-cross-bolnisi::before{content:"\F0CED"}.mdi-cross-celtic::before{content:"\F0CF5"}.mdi-cross-outline::before{content:"\F0CF6"}.mdi-crosshairs::before{content:"\F01A3"}.mdi-crosshairs-gps::before{content:"\F01A4"}.mdi-crosshairs-off::before{content:"\F0F45"}.mdi-crosshairs-question::before{content:"\F1136"}.mdi-crowd::before{content:"\F1975"}.mdi-crown::before{content:"\F01A5"}.mdi-crown-circle::before{content:"\F17DC"}.mdi-crown-circle-outline::before{content:"\F17DD"}.mdi-crown-outline::before{content:"\F11D0"}.mdi-cryengine::before{content:"\F0959"}.mdi-crystal-ball::before{content:"\F0B2F"}.mdi-cube::before{content:"\F01A6"}.mdi-cube-off::before{content:"\F141C"}.mdi-cube-off-outline::before{content:"\F141D"}.mdi-cube-outline::before{content:"\F01A7"}.mdi-cube-scan::before{content:"\F0B84"}.mdi-cube-send::before{content:"\F01A8"}.mdi-cube-unfolded::before{content:"\F01A9"}.mdi-cup::before{content:"\F01AA"}.mdi-cup-off::before{content:"\F05E5"}.mdi-cup-off-outline::before{content:"\F137D"}.mdi-cup-outline::before{content:"\F130F"}.mdi-cup-water::before{content:"\F01AB"}.mdi-cupboard::before{content:"\F0F46"}.mdi-cupboard-outline::before{content:"\F0F47"}.mdi-cupcake::before{content:"\F095A"}.mdi-curling::before{content:"\F0863"}.mdi-currency-bdt::before{content:"\F0864"}.mdi-currency-brl::before{content:"\F0B85"}.mdi-currency-btc::before{content:"\F01AC"}.mdi-currency-cny::before{content:"\F07BA"}.mdi-currency-eth::before{content:"\F07BB"}.mdi-currency-eur::before{content:"\F01AD"}.mdi-currency-eur-off::before{content:"\F1315"}.mdi-currency-fra::before{content:"\F1A39"}.mdi-currency-gbp::before{content:"\F01AE"}.mdi-currency-ils::before{content:"\F0C61"}.mdi-currency-inr::before{content:"\F01AF"}.mdi-currency-jpy::before{content:"\F07BC"}.mdi-currency-krw::before{content:"\F07BD"}.mdi-currency-kzt::before{content:"\F0865"}.mdi-currency-mnt::before{content:"\F1512"}.mdi-currency-ngn::before{content:"\F01B0"}.mdi-currency-php::before{content:"\F09E6"}.mdi-currency-rial::before{content:"\F0E9C"}.mdi-currency-rub::before{content:"\F01B1"}.mdi-currency-rupee::before{content:"\F1976"}.mdi-currency-sign::before{content:"\F07BE"}.mdi-currency-thb::before{content:"\F1C05"}.mdi-currency-try::before{content:"\F01B2"}.mdi-currency-twd::before{content:"\F07BF"}.mdi-currency-uah::before{content:"\F1B9B"}.mdi-currency-usd::before{content:"\F01C1"}.mdi-currency-usd-off::before{content:"\F067A"}.mdi-current-ac::before{content:"\F1480"}.mdi-current-dc::before{content:"\F095C"}.mdi-cursor-default::before{content:"\F01C0"}.mdi-cursor-default-click::before{content:"\F0CFD"}.mdi-cursor-default-click-outline::before{content:"\F0CFE"}.mdi-cursor-default-gesture::before{content:"\F1127"}.mdi-cursor-default-gesture-outline::before{content:"\F1128"}.mdi-cursor-default-outline::before{content:"\F01BF"}.mdi-cursor-move::before{content:"\F01BE"}.mdi-cursor-pointer::before{content:"\F01BD"}.mdi-cursor-text::before{content:"\F05E7"}.mdi-curtains::before{content:"\F1846"}.mdi-curtains-closed::before{content:"\F1847"}.mdi-cylinder::before{content:"\F194E"}.mdi-cylinder-off::before{content:"\F194F"}.mdi-dance-ballroom::before{content:"\F15FB"}.mdi-dance-pole::before{content:"\F1578"}.mdi-data-matrix::before{content:"\F153C"}.mdi-data-matrix-edit::before{content:"\F153D"}.mdi-data-matrix-minus::before{content:"\F153E"}.mdi-data-matrix-plus::before{content:"\F153F"}.mdi-data-matrix-remove::before{content:"\F1540"}.mdi-data-matrix-scan::before{content:"\F1541"}.mdi-database::before{content:"\F01BC"}.mdi-database-alert::before{content:"\F163A"}.mdi-database-alert-outline::before{content:"\F1624"}.mdi-database-arrow-down::before{content:"\F163B"}.mdi-database-arrow-down-outline::before{content:"\F1625"}.mdi-database-arrow-left::before{content:"\F163C"}.mdi-database-arrow-left-outline::before{content:"\F1626"}.mdi-database-arrow-right::before{content:"\F163D"}.mdi-database-arrow-right-outline::before{content:"\F1627"}.mdi-database-arrow-up::before{content:"\F163E"}.mdi-database-arrow-up-outline::before{content:"\F1628"}.mdi-database-check::before{content:"\F0AA9"}.mdi-database-check-outline::before{content:"\F1629"}.mdi-database-clock::before{content:"\F163F"}.mdi-database-clock-outline::before{content:"\F162A"}.mdi-database-cog::before{content:"\F164B"}.mdi-database-cog-outline::before{content:"\F164C"}.mdi-database-edit::before{content:"\F0B86"}.mdi-database-edit-outline::before{content:"\F162B"}.mdi-database-export::before{content:"\F095E"}.mdi-database-export-outline::before{content:"\F162C"}.mdi-database-eye::before{content:"\F191F"}.mdi-database-eye-off::before{content:"\F1920"}.mdi-database-eye-off-outline::before{content:"\F1921"}.mdi-database-eye-outline::before{content:"\F1922"}.mdi-database-import::before{content:"\F095D"}.mdi-database-import-outline::before{content:"\F162D"}.mdi-database-lock::before{content:"\F0AAA"}.mdi-database-lock-outline::before{content:"\F162E"}.mdi-database-marker::before{content:"\F12F6"}.mdi-database-marker-outline::before{content:"\F162F"}.mdi-database-minus::before{content:"\F01BB"}.mdi-database-minus-outline::before{content:"\F1630"}.mdi-database-off::before{content:"\F1640"}.mdi-database-off-outline::before{content:"\F1631"}.mdi-database-outline::before{content:"\F1632"}.mdi-database-plus::before{content:"\F01BA"}.mdi-database-plus-outline::before{content:"\F1633"}.mdi-database-refresh::before{content:"\F05C2"}.mdi-database-refresh-outline::before{content:"\F1634"}.mdi-database-remove::before{content:"\F0D00"}.mdi-database-remove-outline::before{content:"\F1635"}.mdi-database-search::before{content:"\F0866"}.mdi-database-search-outline::before{content:"\F1636"}.mdi-database-settings::before{content:"\F0D01"}.mdi-database-settings-outline::before{content:"\F1637"}.mdi-database-sync::before{content:"\F0CFF"}.mdi-database-sync-outline::before{content:"\F1638"}.mdi-death-star::before{content:"\F08D8"}.mdi-death-star-variant::before{content:"\F08D9"}.mdi-deathly-hallows::before{content:"\F0B87"}.mdi-debian::before{content:"\F08DA"}.mdi-debug-step-into::before{content:"\F01B9"}.mdi-debug-step-out::before{content:"\F01B8"}.mdi-debug-step-over::before{content:"\F01B7"}.mdi-decagram::before{content:"\F076C"}.mdi-decagram-outline::before{content:"\F076D"}.mdi-decimal::before{content:"\F10A1"}.mdi-decimal-comma::before{content:"\F10A2"}.mdi-decimal-comma-decrease::before{content:"\F10A3"}.mdi-decimal-comma-increase::before{content:"\F10A4"}.mdi-decimal-decrease::before{content:"\F01B6"}.mdi-decimal-increase::before{content:"\F01B5"}.mdi-delete::before{content:"\F01B4"}.mdi-delete-alert::before{content:"\F10A5"}.mdi-delete-alert-outline::before{content:"\F10A6"}.mdi-delete-circle::before{content:"\F0683"}.mdi-delete-circle-outline::before{content:"\F0B88"}.mdi-delete-clock::before{content:"\F1556"}.mdi-delete-clock-outline::before{content:"\F1557"}.mdi-delete-empty::before{content:"\F06CC"}.mdi-delete-empty-outline::before{content:"\F0E9D"}.mdi-delete-forever::before{content:"\F05E8"}.mdi-delete-forever-outline::before{content:"\F0B89"}.mdi-delete-off::before{content:"\F10A7"}.mdi-delete-off-outline::before{content:"\F10A8"}.mdi-delete-outline::before{content:"\F09E7"}.mdi-delete-restore::before{content:"\F0819"}.mdi-delete-sweep::before{content:"\F05E9"}.mdi-delete-sweep-outline::before{content:"\F0C62"}.mdi-delete-variant::before{content:"\F01B3"}.mdi-delta::before{content:"\F01C2"}.mdi-desk::before{content:"\F1239"}.mdi-desk-lamp::before{content:"\F095F"}.mdi-desk-lamp-off::before{content:"\F1B1F"}.mdi-desk-lamp-on::before{content:"\F1B20"}.mdi-deskphone::before{content:"\F01C3"}.mdi-desktop-classic::before{content:"\F07C0"}.mdi-desktop-tower::before{content:"\F01C5"}.mdi-desktop-tower-monitor::before{content:"\F0AAB"}.mdi-details::before{content:"\F01C6"}.mdi-dev-to::before{content:"\F0D6E"}.mdi-developer-board::before{content:"\F0697"}.mdi-deviantart::before{content:"\F01C7"}.mdi-devices::before{content:"\F0FB0"}.mdi-dharmachakra::before{content:"\F094B"}.mdi-diabetes::before{content:"\F1126"}.mdi-dialpad::before{content:"\F061C"}.mdi-diameter::before{content:"\F0C63"}.mdi-diameter-outline::before{content:"\F0C64"}.mdi-diameter-variant::before{content:"\F0C65"}.mdi-diamond::before{content:"\F0B8A"}.mdi-diamond-outline::before{content:"\F0B8B"}.mdi-diamond-stone::before{content:"\F01C8"}.mdi-diaper-outline::before{content:"\F1CCF"}.mdi-dice-1::before{content:"\F01CA"}.mdi-dice-1-outline::before{content:"\F114A"}.mdi-dice-2::before{content:"\F01CB"}.mdi-dice-2-outline::before{content:"\F114B"}.mdi-dice-3::before{content:"\F01CC"}.mdi-dice-3-outline::before{content:"\F114C"}.mdi-dice-4::before{content:"\F01CD"}.mdi-dice-4-outline::before{content:"\F114D"}.mdi-dice-5::before{content:"\F01CE"}.mdi-dice-5-outline::before{content:"\F114E"}.mdi-dice-6::before{content:"\F01CF"}.mdi-dice-6-outline::before{content:"\F114F"}.mdi-dice-d10::before{content:"\F1153"}.mdi-dice-d10-outline::before{content:"\F076F"}.mdi-dice-d12::before{content:"\F1154"}.mdi-dice-d12-outline::before{content:"\F0867"}.mdi-dice-d20::before{content:"\F1155"}.mdi-dice-d20-outline::before{content:"\F05EA"}.mdi-dice-d4::before{content:"\F1150"}.mdi-dice-d4-outline::before{content:"\F05EB"}.mdi-dice-d6::before{content:"\F1151"}.mdi-dice-d6-outline::before{content:"\F05ED"}.mdi-dice-d8::before{content:"\F1152"}.mdi-dice-d8-outline::before{content:"\F05EC"}.mdi-dice-multiple::before{content:"\F076E"}.mdi-dice-multiple-outline::before{content:"\F1156"}.mdi-digital-ocean::before{content:"\F1237"}.mdi-dip-switch::before{content:"\F07C1"}.mdi-directions::before{content:"\F01D0"}.mdi-directions-fork::before{content:"\F0641"}.mdi-disc::before{content:"\F05EE"}.mdi-disc-alert::before{content:"\F01D1"}.mdi-disc-player::before{content:"\F0960"}.mdi-dishwasher::before{content:"\F0AAC"}.mdi-dishwasher-alert::before{content:"\F11B8"}.mdi-dishwasher-off::before{content:"\F11B9"}.mdi-disqus::before{content:"\F01D2"}.mdi-distribute-horizontal-center::before{content:"\F11C9"}.mdi-distribute-horizontal-left::before{content:"\F11C8"}.mdi-distribute-horizontal-right::before{content:"\F11CA"}.mdi-distribute-vertical-bottom::before{content:"\F11CB"}.mdi-distribute-vertical-center::before{content:"\F11CC"}.mdi-distribute-vertical-top::before{content:"\F11CD"}.mdi-diversify::before{content:"\F1877"}.mdi-diving::before{content:"\F1977"}.mdi-diving-flippers::before{content:"\F0DBF"}.mdi-diving-helmet::before{content:"\F0DC0"}.mdi-diving-scuba::before{content:"\F1B77"}.mdi-diving-scuba-flag::before{content:"\F0DC2"}.mdi-diving-scuba-mask::before{content:"\F0DC1"}.mdi-diving-scuba-tank::before{content:"\F0DC3"}.mdi-diving-scuba-tank-multiple::before{content:"\F0DC4"}.mdi-diving-snorkel::before{content:"\F0DC5"}.mdi-division::before{content:"\F01D4"}.mdi-division-box::before{content:"\F01D5"}.mdi-dlna::before{content:"\F0A41"}.mdi-dna::before{content:"\F0684"}.mdi-dns::before{content:"\F01D6"}.mdi-dns-outline::before{content:"\F0B8C"}.mdi-dock-bottom::before{content:"\F10A9"}.mdi-dock-left::before{content:"\F10AA"}.mdi-dock-right::before{content:"\F10AB"}.mdi-dock-top::before{content:"\F1513"}.mdi-dock-window::before{content:"\F10AC"}.mdi-docker::before{content:"\F0868"}.mdi-doctor::before{content:"\F0A42"}.mdi-dog::before{content:"\F0A43"}.mdi-dog-service::before{content:"\F0AAD"}.mdi-dog-side::before{content:"\F0A44"}.mdi-dog-side-off::before{content:"\F16EE"}.mdi-dolby::before{content:"\F06B3"}.mdi-dolly::before{content:"\F0E9E"}.mdi-dolphin::before{content:"\F18B4"}.mdi-domain::before{content:"\F01D7"}.mdi-domain-off::before{content:"\F0D6F"}.mdi-domain-plus::before{content:"\F10AD"}.mdi-domain-remove::before{content:"\F10AE"}.mdi-domain-switch::before{content:"\F1C2C"}.mdi-dome-light::before{content:"\F141E"}.mdi-domino-mask::before{content:"\F1023"}.mdi-donkey::before{content:"\F07C2"}.mdi-door::before{content:"\F081A"}.mdi-door-closed::before{content:"\F081B"}.mdi-door-closed-cancel::before{content:"\F1C93"}.mdi-door-closed-lock::before{content:"\F10AF"}.mdi-door-open::before{content:"\F081C"}.mdi-door-sliding::before{content:"\F181E"}.mdi-door-sliding-lock::before{content:"\F181F"}.mdi-door-sliding-open::before{content:"\F1820"}.mdi-doorbell::before{content:"\F12E6"}.mdi-doorbell-video::before{content:"\F0869"}.mdi-dot-net::before{content:"\F0AAE"}.mdi-dots-circle::before{content:"\F1978"}.mdi-dots-grid::before{content:"\F15FC"}.mdi-dots-hexagon::before{content:"\F15FF"}.mdi-dots-horizontal::before{content:"\F01D8"}.mdi-dots-horizontal-circle::before{content:"\F07C3"}.mdi-dots-horizontal-circle-outline::before{content:"\F0B8D"}.mdi-dots-square::before{content:"\F15FD"}.mdi-dots-triangle::before{content:"\F15FE"}.mdi-dots-vertical::before{content:"\F01D9"}.mdi-dots-vertical-circle::before{content:"\F07C4"}.mdi-dots-vertical-circle-outline::before{content:"\F0B8E"}.mdi-download::before{content:"\F01DA"}.mdi-download-box::before{content:"\F1462"}.mdi-download-box-outline::before{content:"\F1463"}.mdi-download-circle::before{content:"\F1464"}.mdi-download-circle-outline::before{content:"\F1465"}.mdi-download-lock::before{content:"\F1320"}.mdi-download-lock-outline::before{content:"\F1321"}.mdi-download-multiple::before{content:"\F09E9"}.mdi-download-multiple-outline::before{content:"\F1CD0"}.mdi-download-network::before{content:"\F06F4"}.mdi-download-network-outline::before{content:"\F0C66"}.mdi-download-off::before{content:"\F10B0"}.mdi-download-off-outline::before{content:"\F10B1"}.mdi-download-outline::before{content:"\F0B8F"}.mdi-drag::before{content:"\F01DB"}.mdi-drag-horizontal::before{content:"\F01DC"}.mdi-drag-horizontal-variant::before{content:"\F12F0"}.mdi-drag-variant::before{content:"\F0B90"}.mdi-drag-vertical::before{content:"\F01DD"}.mdi-drag-vertical-variant::before{content:"\F12F1"}.mdi-drama-masks::before{content:"\F0D02"}.mdi-draw::before{content:"\F0F49"}.mdi-draw-pen::before{content:"\F19B9"}.mdi-drawing::before{content:"\F01DE"}.mdi-drawing-box::before{content:"\F01DF"}.mdi-dresser::before{content:"\F0F4A"}.mdi-dresser-outline::before{content:"\F0F4B"}.mdi-drone::before{content:"\F01E2"}.mdi-dropbox::before{content:"\F01E3"}.mdi-drupal::before{content:"\F01E4"}.mdi-duck::before{content:"\F01E5"}.mdi-dumbbell::before{content:"\F01E6"}.mdi-dump-truck::before{content:"\F0C67"}.mdi-ear-hearing::before{content:"\F07C5"}.mdi-ear-hearing-loop::before{content:"\F1AEE"}.mdi-ear-hearing-off::before{content:"\F0A45"}.mdi-earbuds::before{content:"\F184F"}.mdi-earbuds-off::before{content:"\F1850"}.mdi-earbuds-off-outline::before{content:"\F1851"}.mdi-earbuds-outline::before{content:"\F1852"}.mdi-earth::before{content:"\F01E7"}.mdi-earth-arrow-down::before{content:"\F1C87"}.mdi-earth-arrow-left::before{content:"\F1C88"}.mdi-earth-arrow-right::before{content:"\F1311"}.mdi-earth-arrow-up::before{content:"\F1C89"}.mdi-earth-box::before{content:"\F06CD"}.mdi-earth-box-minus::before{content:"\F1407"}.mdi-earth-box-off::before{content:"\F06CE"}.mdi-earth-box-plus::before{content:"\F1406"}.mdi-earth-box-remove::before{content:"\F1408"}.mdi-earth-minus::before{content:"\F1404"}.mdi-earth-off::before{content:"\F01E8"}.mdi-earth-plus::before{content:"\F1403"}.mdi-earth-remove::before{content:"\F1405"}.mdi-egg::before{content:"\F0AAF"}.mdi-egg-easter::before{content:"\F0AB0"}.mdi-egg-fried::before{content:"\F184A"}.mdi-egg-off::before{content:"\F13F0"}.mdi-egg-off-outline::before{content:"\F13F1"}.mdi-egg-outline::before{content:"\F13F2"}.mdi-eiffel-tower::before{content:"\F156B"}.mdi-eight-track::before{content:"\F09EA"}.mdi-eject::before{content:"\F01EA"}.mdi-eject-circle::before{content:"\F1B23"}.mdi-eject-circle-outline::before{content:"\F1B24"}.mdi-eject-outline::before{content:"\F0B91"}.mdi-electric-switch::before{content:"\F0E9F"}.mdi-electric-switch-closed::before{content:"\F10D9"}.mdi-electron-framework::before{content:"\F1024"}.mdi-elephant::before{content:"\F07C6"}.mdi-elevation-decline::before{content:"\F01EB"}.mdi-elevation-rise::before{content:"\F01EC"}.mdi-elevator::before{content:"\F01ED"}.mdi-elevator-down::before{content:"\F12C2"}.mdi-elevator-passenger::before{content:"\F1381"}.mdi-elevator-passenger-off::before{content:"\F1979"}.mdi-elevator-passenger-off-outline::before{content:"\F197A"}.mdi-elevator-passenger-outline::before{content:"\F197B"}.mdi-elevator-up::before{content:"\F12C1"}.mdi-ellipse::before{content:"\F0EA0"}.mdi-ellipse-outline::before{content:"\F0EA1"}.mdi-email::before{content:"\F01EE"}.mdi-email-alert::before{content:"\F06CF"}.mdi-email-alert-outline::before{content:"\F0D42"}.mdi-email-arrow-left::before{content:"\F10DA"}.mdi-email-arrow-left-outline::before{content:"\F10DB"}.mdi-email-arrow-right::before{content:"\F10DC"}.mdi-email-arrow-right-outline::before{content:"\F10DD"}.mdi-email-box::before{content:"\F0D03"}.mdi-email-check::before{content:"\F0AB1"}.mdi-email-check-outline::before{content:"\F0AB2"}.mdi-email-edit::before{content:"\F0EE3"}.mdi-email-edit-outline::before{content:"\F0EE4"}.mdi-email-fast::before{content:"\F186F"}.mdi-email-fast-outline::before{content:"\F1870"}.mdi-email-heart-outline::before{content:"\F1C5B"}.mdi-email-lock::before{content:"\F01F1"}.mdi-email-lock-outline::before{content:"\F1B61"}.mdi-email-mark-as-unread::before{content:"\F0B92"}.mdi-email-minus::before{content:"\F0EE5"}.mdi-email-minus-outline::before{content:"\F0EE6"}.mdi-email-multiple::before{content:"\F0EE7"}.mdi-email-multiple-outline::before{content:"\F0EE8"}.mdi-email-newsletter::before{content:"\F0FB1"}.mdi-email-off::before{content:"\F13E3"}.mdi-email-off-outline::before{content:"\F13E4"}.mdi-email-open::before{content:"\F01EF"}.mdi-email-open-heart-outline::before{content:"\F1C5C"}.mdi-email-open-multiple::before{content:"\F0EE9"}.mdi-email-open-multiple-outline::before{content:"\F0EEA"}.mdi-email-open-outline::before{content:"\F05EF"}.mdi-email-outline::before{content:"\F01F0"}.mdi-email-plus::before{content:"\F09EB"}.mdi-email-plus-outline::before{content:"\F09EC"}.mdi-email-remove::before{content:"\F1661"}.mdi-email-remove-outline::before{content:"\F1662"}.mdi-email-seal::before{content:"\F195B"}.mdi-email-seal-outline::before{content:"\F195C"}.mdi-email-search::before{content:"\F0961"}.mdi-email-search-outline::before{content:"\F0962"}.mdi-email-sync::before{content:"\F12C7"}.mdi-email-sync-outline::before{content:"\F12C8"}.mdi-email-variant::before{content:"\F05F0"}.mdi-ember::before{content:"\F0B30"}.mdi-emby::before{content:"\F06B4"}.mdi-emoticon::before{content:"\F0C68"}.mdi-emoticon-angry::before{content:"\F0C69"}.mdi-emoticon-angry-outline::before{content:"\F0C6A"}.mdi-emoticon-confused::before{content:"\F10DE"}.mdi-emoticon-confused-outline::before{content:"\F10DF"}.mdi-emoticon-cool::before{content:"\F0C6B"}.mdi-emoticon-cool-outline::before{content:"\F01F3"}.mdi-emoticon-cry::before{content:"\F0C6C"}.mdi-emoticon-cry-outline::before{content:"\F0C6D"}.mdi-emoticon-dead::before{content:"\F0C6E"}.mdi-emoticon-dead-outline::before{content:"\F069B"}.mdi-emoticon-devil::before{content:"\F0C6F"}.mdi-emoticon-devil-outline::before{content:"\F01F4"}.mdi-emoticon-excited::before{content:"\F0C70"}.mdi-emoticon-excited-outline::before{content:"\F069C"}.mdi-emoticon-frown::before{content:"\F0F4C"}.mdi-emoticon-frown-outline::before{content:"\F0F4D"}.mdi-emoticon-happy::before{content:"\F0C71"}.mdi-emoticon-happy-outline::before{content:"\F01F5"}.mdi-emoticon-kiss::before{content:"\F0C72"}.mdi-emoticon-kiss-outline::before{content:"\F0C73"}.mdi-emoticon-lol::before{content:"\F1214"}.mdi-emoticon-lol-outline::before{content:"\F1215"}.mdi-emoticon-minus::before{content:"\F1CB2"}.mdi-emoticon-minus-outline::before{content:"\F1CB3"}.mdi-emoticon-neutral::before{content:"\F0C74"}.mdi-emoticon-neutral-outline::before{content:"\F01F6"}.mdi-emoticon-outline::before{content:"\F01F2"}.mdi-emoticon-plus::before{content:"\F1CB4"}.mdi-emoticon-plus-outline::before{content:"\F1CB5"}.mdi-emoticon-poop::before{content:"\F01F7"}.mdi-emoticon-poop-outline::before{content:"\F0C75"}.mdi-emoticon-remove::before{content:"\F1CB6"}.mdi-emoticon-remove-outline::before{content:"\F1CB7"}.mdi-emoticon-sad::before{content:"\F0C76"}.mdi-emoticon-sad-outline::before{content:"\F01F8"}.mdi-emoticon-sick::before{content:"\F157C"}.mdi-emoticon-sick-outline::before{content:"\F157D"}.mdi-emoticon-tongue::before{content:"\F01F9"}.mdi-emoticon-tongue-outline::before{content:"\F0C77"}.mdi-emoticon-wink::before{content:"\F0C78"}.mdi-emoticon-wink-outline::before{content:"\F0C79"}.mdi-engine::before{content:"\F01FA"}.mdi-engine-off::before{content:"\F0A46"}.mdi-engine-off-outline::before{content:"\F0A47"}.mdi-engine-outline::before{content:"\F01FB"}.mdi-epsilon::before{content:"\F10E0"}.mdi-equal::before{content:"\F01FC"}.mdi-equal-box::before{content:"\F01FD"}.mdi-equalizer::before{content:"\F0EA2"}.mdi-equalizer-outline::before{content:"\F0EA3"}.mdi-eraser::before{content:"\F01FE"}.mdi-eraser-variant::before{content:"\F0642"}.mdi-escalator::before{content:"\F01FF"}.mdi-escalator-box::before{content:"\F1399"}.mdi-escalator-down::before{content:"\F12C0"}.mdi-escalator-up::before{content:"\F12BF"}.mdi-eslint::before{content:"\F0C7A"}.mdi-et::before{content:"\F0AB3"}.mdi-ethereum::before{content:"\F086A"}.mdi-ethernet::before{content:"\F0200"}.mdi-ethernet-cable::before{content:"\F0201"}.mdi-ethernet-cable-off::before{content:"\F0202"}.mdi-ethernet-off::before{content:"\F1CD1"}.mdi-ev-plug-ccs1::before{content:"\F1519"}.mdi-ev-plug-ccs2::before{content:"\F151A"}.mdi-ev-plug-chademo::before{content:"\F151B"}.mdi-ev-plug-tesla::before{content:"\F151C"}.mdi-ev-plug-type1::before{content:"\F151D"}.mdi-ev-plug-type2::before{content:"\F151E"}.mdi-ev-station::before{content:"\F05F1"}.mdi-evernote::before{content:"\F0204"}.mdi-excavator::before{content:"\F1025"}.mdi-exclamation::before{content:"\F0205"}.mdi-exclamation-thick::before{content:"\F1238"}.mdi-exit-run::before{content:"\F0A48"}.mdi-exit-to-app::before{content:"\F0206"}.mdi-expand-all::before{content:"\F0AB4"}.mdi-expand-all-outline::before{content:"\F0AB5"}.mdi-expansion-card::before{content:"\F08AE"}.mdi-expansion-card-variant::before{content:"\F0FB2"}.mdi-exponent::before{content:"\F0963"}.mdi-exponent-box::before{content:"\F0964"}.mdi-export::before{content:"\F0207"}.mdi-export-variant::before{content:"\F0B93"}.mdi-eye::before{content:"\F0208"}.mdi-eye-arrow-left::before{content:"\F18FD"}.mdi-eye-arrow-left-outline::before{content:"\F18FE"}.mdi-eye-arrow-right::before{content:"\F18FF"}.mdi-eye-arrow-right-outline::before{content:"\F1900"}.mdi-eye-check::before{content:"\F0D04"}.mdi-eye-check-outline::before{content:"\F0D05"}.mdi-eye-circle::before{content:"\F0B94"}.mdi-eye-circle-outline::before{content:"\F0B95"}.mdi-eye-closed::before{content:"\F1CA3"}.mdi-eye-lock::before{content:"\F1C06"}.mdi-eye-lock-open::before{content:"\F1C07"}.mdi-eye-lock-open-outline::before{content:"\F1C08"}.mdi-eye-lock-outline::before{content:"\F1C09"}.mdi-eye-minus::before{content:"\F1026"}.mdi-eye-minus-outline::before{content:"\F1027"}.mdi-eye-off::before{content:"\F0209"}.mdi-eye-off-outline::before{content:"\F06D1"}.mdi-eye-outline::before{content:"\F06D0"}.mdi-eye-plus::before{content:"\F086B"}.mdi-eye-plus-outline::before{content:"\F086C"}.mdi-eye-refresh::before{content:"\F197C"}.mdi-eye-refresh-outline::before{content:"\F197D"}.mdi-eye-remove::before{content:"\F15E3"}.mdi-eye-remove-outline::before{content:"\F15E4"}.mdi-eye-settings::before{content:"\F086D"}.mdi-eye-settings-outline::before{content:"\F086E"}.mdi-eyedropper::before{content:"\F020A"}.mdi-eyedropper-minus::before{content:"\F13DD"}.mdi-eyedropper-off::before{content:"\F13DF"}.mdi-eyedropper-plus::before{content:"\F13DC"}.mdi-eyedropper-remove::before{content:"\F13DE"}.mdi-eyedropper-variant::before{content:"\F020B"}.mdi-face-agent::before{content:"\F0D70"}.mdi-face-man::before{content:"\F0643"}.mdi-face-man-outline::before{content:"\F0B96"}.mdi-face-man-profile::before{content:"\F0644"}.mdi-face-man-shimmer::before{content:"\F15CC"}.mdi-face-man-shimmer-outline::before{content:"\F15CD"}.mdi-face-mask::before{content:"\F1586"}.mdi-face-mask-outline::before{content:"\F1587"}.mdi-face-recognition::before{content:"\F0C7B"}.mdi-face-woman::before{content:"\F1077"}.mdi-face-woman-outline::before{content:"\F1078"}.mdi-face-woman-profile::before{content:"\F1076"}.mdi-face-woman-shimmer::before{content:"\F15CE"}.mdi-face-woman-shimmer-outline::before{content:"\F15CF"}.mdi-facebook::before{content:"\F020C"}.mdi-facebook-gaming::before{content:"\F07DD"}.mdi-facebook-messenger::before{content:"\F020E"}.mdi-facebook-workplace::before{content:"\F0B31"}.mdi-factory::before{content:"\F020F"}.mdi-family-tree::before{content:"\F160E"}.mdi-fan::before{content:"\F0210"}.mdi-fan-alert::before{content:"\F146C"}.mdi-fan-auto::before{content:"\F171D"}.mdi-fan-chevron-down::before{content:"\F146D"}.mdi-fan-chevron-up::before{content:"\F146E"}.mdi-fan-clock::before{content:"\F1A3A"}.mdi-fan-minus::before{content:"\F1470"}.mdi-fan-off::before{content:"\F081D"}.mdi-fan-plus::before{content:"\F146F"}.mdi-fan-remove::before{content:"\F1471"}.mdi-fan-speed-1::before{content:"\F1472"}.mdi-fan-speed-2::before{content:"\F1473"}.mdi-fan-speed-3::before{content:"\F1474"}.mdi-fast-forward::before{content:"\F0211"}.mdi-fast-forward-10::before{content:"\F0D71"}.mdi-fast-forward-15::before{content:"\F193A"}.mdi-fast-forward-30::before{content:"\F0D06"}.mdi-fast-forward-45::before{content:"\F1B12"}.mdi-fast-forward-5::before{content:"\F11F8"}.mdi-fast-forward-60::before{content:"\F160B"}.mdi-fast-forward-outline::before{content:"\F06D2"}.mdi-faucet::before{content:"\F1B29"}.mdi-faucet-variant::before{content:"\F1B2A"}.mdi-fax::before{content:"\F0212"}.mdi-feather::before{content:"\F06D3"}.mdi-feature-search::before{content:"\F0A49"}.mdi-feature-search-outline::before{content:"\F0A4A"}.mdi-fedora::before{content:"\F08DB"}.mdi-fence::before{content:"\F179A"}.mdi-fence-electric::before{content:"\F17F6"}.mdi-fencing::before{content:"\F14C1"}.mdi-ferris-wheel::before{content:"\F0EA4"}.mdi-ferry::before{content:"\F0213"}.mdi-file::before{content:"\F0214"}.mdi-file-account::before{content:"\F073B"}.mdi-file-account-outline::before{content:"\F1028"}.mdi-file-alert::before{content:"\F0A4B"}.mdi-file-alert-outline::before{content:"\F0A4C"}.mdi-file-arrow-left-right::before{content:"\F1A93"}.mdi-file-arrow-left-right-outline::before{content:"\F1A94"}.mdi-file-arrow-up-down::before{content:"\F1A95"}.mdi-file-arrow-up-down-outline::before{content:"\F1A96"}.mdi-file-cabinet::before{content:"\F0AB6"}.mdi-file-cad::before{content:"\F0EEB"}.mdi-file-cad-box::before{content:"\F0EEC"}.mdi-file-cancel::before{content:"\F0DC6"}.mdi-file-cancel-outline::before{content:"\F0DC7"}.mdi-file-certificate::before{content:"\F1186"}.mdi-file-certificate-outline::before{content:"\F1187"}.mdi-file-chart::before{content:"\F0215"}.mdi-file-chart-check::before{content:"\F19C6"}.mdi-file-chart-check-outline::before{content:"\F19C7"}.mdi-file-chart-outline::before{content:"\F1029"}.mdi-file-check::before{content:"\F0216"}.mdi-file-check-outline::before{content:"\F0E29"}.mdi-file-clock::before{content:"\F12E1"}.mdi-file-clock-outline::before{content:"\F12E2"}.mdi-file-cloud::before{content:"\F0217"}.mdi-file-cloud-outline::before{content:"\F102A"}.mdi-file-code::before{content:"\F022E"}.mdi-file-code-outline::before{content:"\F102B"}.mdi-file-cog::before{content:"\F107B"}.mdi-file-cog-outline::before{content:"\F107C"}.mdi-file-compare::before{content:"\F08AA"}.mdi-file-delimited::before{content:"\F0218"}.mdi-file-delimited-outline::before{content:"\F0EA5"}.mdi-file-document::before{content:"\F0219"}.mdi-file-document-alert::before{content:"\F1A97"}.mdi-file-document-alert-outline::before{content:"\F1A98"}.mdi-file-document-arrow-right::before{content:"\F1C0F"}.mdi-file-document-arrow-right-outline::before{content:"\F1C10"}.mdi-file-document-check::before{content:"\F1A99"}.mdi-file-document-check-outline::before{content:"\F1A9A"}.mdi-file-document-edit::before{content:"\F0DC8"}.mdi-file-document-edit-outline::before{content:"\F0DC9"}.mdi-file-document-minus::before{content:"\F1A9B"}.mdi-file-document-minus-outline::before{content:"\F1A9C"}.mdi-file-document-multiple::before{content:"\F1517"}.mdi-file-document-multiple-outline::before{content:"\F1518"}.mdi-file-document-outline::before{content:"\F09EE"}.mdi-file-document-plus::before{content:"\F1A9D"}.mdi-file-document-plus-outline::before{content:"\F1A9E"}.mdi-file-document-refresh::before{content:"\F1C7A"}.mdi-file-document-refresh-outline::before{content:"\F1C7B"}.mdi-file-document-remove::before{content:"\F1A9F"}.mdi-file-document-remove-outline::before{content:"\F1AA0"}.mdi-file-download::before{content:"\F0965"}.mdi-file-download-outline::before{content:"\F0966"}.mdi-file-edit::before{content:"\F11E7"}.mdi-file-edit-outline::before{content:"\F11E8"}.mdi-file-excel::before{content:"\F021B"}.mdi-file-excel-box::before{content:"\F021C"}.mdi-file-excel-box-outline::before{content:"\F102C"}.mdi-file-excel-outline::before{content:"\F102D"}.mdi-file-export::before{content:"\F021D"}.mdi-file-export-outline::before{content:"\F102E"}.mdi-file-eye::before{content:"\F0DCA"}.mdi-file-eye-outline::before{content:"\F0DCB"}.mdi-file-find::before{content:"\F021E"}.mdi-file-find-outline::before{content:"\F0B97"}.mdi-file-gif-box::before{content:"\F0D78"}.mdi-file-hidden::before{content:"\F0613"}.mdi-file-image::before{content:"\F021F"}.mdi-file-image-marker::before{content:"\F1772"}.mdi-file-image-marker-outline::before{content:"\F1773"}.mdi-file-image-minus::before{content:"\F193B"}.mdi-file-image-minus-outline::before{content:"\F193C"}.mdi-file-image-outline::before{content:"\F0EB0"}.mdi-file-image-plus::before{content:"\F193D"}.mdi-file-image-plus-outline::before{content:"\F193E"}.mdi-file-image-remove::before{content:"\F193F"}.mdi-file-image-remove-outline::before{content:"\F1940"}.mdi-file-import::before{content:"\F0220"}.mdi-file-import-outline::before{content:"\F102F"}.mdi-file-jpg-box::before{content:"\F0225"}.mdi-file-key::before{content:"\F1184"}.mdi-file-key-outline::before{content:"\F1185"}.mdi-file-link::before{content:"\F1177"}.mdi-file-link-outline::before{content:"\F1178"}.mdi-file-lock::before{content:"\F0221"}.mdi-file-lock-open::before{content:"\F19C8"}.mdi-file-lock-open-outline::before{content:"\F19C9"}.mdi-file-lock-outline::before{content:"\F1030"}.mdi-file-marker::before{content:"\F1774"}.mdi-file-marker-outline::before{content:"\F1775"}.mdi-file-minus::before{content:"\F1AA1"}.mdi-file-minus-outline::before{content:"\F1AA2"}.mdi-file-move::before{content:"\F0AB9"}.mdi-file-move-outline::before{content:"\F1031"}.mdi-file-multiple::before{content:"\F0222"}.mdi-file-multiple-outline::before{content:"\F1032"}.mdi-file-music::before{content:"\F0223"}.mdi-file-music-outline::before{content:"\F0E2A"}.mdi-file-outline::before{content:"\F0224"}.mdi-file-pdf-box::before{content:"\F0226"}.mdi-file-percent::before{content:"\F081E"}.mdi-file-percent-outline::before{content:"\F1033"}.mdi-file-phone::before{content:"\F1179"}.mdi-file-phone-outline::before{content:"\F117A"}.mdi-file-plus::before{content:"\F0752"}.mdi-file-plus-outline::before{content:"\F0EED"}.mdi-file-png-box::before{content:"\F0E2D"}.mdi-file-powerpoint::before{content:"\F0227"}.mdi-file-powerpoint-box::before{content:"\F0228"}.mdi-file-powerpoint-box-outline::before{content:"\F1034"}.mdi-file-powerpoint-outline::before{content:"\F1035"}.mdi-file-presentation-box::before{content:"\F0229"}.mdi-file-question::before{content:"\F086F"}.mdi-file-question-outline::before{content:"\F1036"}.mdi-file-refresh::before{content:"\F0918"}.mdi-file-refresh-outline::before{content:"\F0541"}.mdi-file-remove::before{content:"\F0B98"}.mdi-file-remove-outline::before{content:"\F1037"}.mdi-file-replace::before{content:"\F0B32"}.mdi-file-replace-outline::before{content:"\F0B33"}.mdi-file-restore::before{content:"\F0670"}.mdi-file-restore-outline::before{content:"\F1038"}.mdi-file-rotate-left::before{content:"\F1A3B"}.mdi-file-rotate-left-outline::before{content:"\F1A3C"}.mdi-file-rotate-right::before{content:"\F1A3D"}.mdi-file-rotate-right-outline::before{content:"\F1A3E"}.mdi-file-search::before{content:"\F0C7C"}.mdi-file-search-outline::before{content:"\F0C7D"}.mdi-file-send::before{content:"\F022A"}.mdi-file-send-outline::before{content:"\F1039"}.mdi-file-settings::before{content:"\F1079"}.mdi-file-settings-outline::before{content:"\F107A"}.mdi-file-sign::before{content:"\F19C3"}.mdi-file-star::before{content:"\F103A"}.mdi-file-star-four-points::before{content:"\F1C2D"}.mdi-file-star-four-points-outline::before{content:"\F1C2E"}.mdi-file-star-outline::before{content:"\F103B"}.mdi-file-swap::before{content:"\F0FB4"}.mdi-file-swap-outline::before{content:"\F0FB5"}.mdi-file-sync::before{content:"\F1216"}.mdi-file-sync-outline::before{content:"\F1217"}.mdi-file-table::before{content:"\F0C7E"}.mdi-file-table-box::before{content:"\F10E1"}.mdi-file-table-box-multiple::before{content:"\F10E2"}.mdi-file-table-box-multiple-outline::before{content:"\F10E3"}.mdi-file-table-box-outline::before{content:"\F10E4"}.mdi-file-table-outline::before{content:"\F0C7F"}.mdi-file-tree::before{content:"\F0645"}.mdi-file-tree-outline::before{content:"\F13D2"}.mdi-file-undo::before{content:"\F08DC"}.mdi-file-undo-outline::before{content:"\F103C"}.mdi-file-upload::before{content:"\F0A4D"}.mdi-file-upload-outline::before{content:"\F0A4E"}.mdi-file-video::before{content:"\F022B"}.mdi-file-video-outline::before{content:"\F0E2C"}.mdi-file-word::before{content:"\F022C"}.mdi-file-word-box::before{content:"\F022D"}.mdi-file-word-box-outline::before{content:"\F103D"}.mdi-file-word-outline::before{content:"\F103E"}.mdi-file-xml-box::before{content:"\F1B4B"}.mdi-film::before{content:"\F022F"}.mdi-filmstrip::before{content:"\F0230"}.mdi-filmstrip-box::before{content:"\F0332"}.mdi-filmstrip-box-multiple::before{content:"\F0D18"}.mdi-filmstrip-off::before{content:"\F0231"}.mdi-filter::before{content:"\F0232"}.mdi-filter-check::before{content:"\F18EC"}.mdi-filter-check-outline::before{content:"\F18ED"}.mdi-filter-cog::before{content:"\F1AA3"}.mdi-filter-cog-outline::before{content:"\F1AA4"}.mdi-filter-menu::before{content:"\F10E5"}.mdi-filter-menu-outline::before{content:"\F10E6"}.mdi-filter-minus::before{content:"\F0EEE"}.mdi-filter-minus-outline::before{content:"\F0EEF"}.mdi-filter-multiple::before{content:"\F1A3F"}.mdi-filter-multiple-outline::before{content:"\F1A40"}.mdi-filter-off::before{content:"\F14EF"}.mdi-filter-off-outline::before{content:"\F14F0"}.mdi-filter-outline::before{content:"\F0233"}.mdi-filter-plus::before{content:"\F0EF0"}.mdi-filter-plus-outline::before{content:"\F0EF1"}.mdi-filter-remove::before{content:"\F0234"}.mdi-filter-remove-outline::before{content:"\F0235"}.mdi-filter-settings::before{content:"\F1AA5"}.mdi-filter-settings-outline::before{content:"\F1AA6"}.mdi-filter-variant::before{content:"\F0236"}.mdi-filter-variant-minus::before{content:"\F1112"}.mdi-filter-variant-plus::before{content:"\F1113"}.mdi-filter-variant-remove::before{content:"\F103F"}.mdi-finance::before{content:"\F081F"}.mdi-find-replace::before{content:"\F06D4"}.mdi-fingerprint::before{content:"\F0237"}.mdi-fingerprint-off::before{content:"\F0EB1"}.mdi-fire::before{content:"\F0238"}.mdi-fire-alert::before{content:"\F15D7"}.mdi-fire-circle::before{content:"\F1807"}.mdi-fire-extinguisher::before{content:"\F0EF2"}.mdi-fire-hydrant::before{content:"\F1137"}.mdi-fire-hydrant-alert::before{content:"\F1138"}.mdi-fire-hydrant-off::before{content:"\F1139"}.mdi-fire-off::before{content:"\F1722"}.mdi-fire-station::before{content:"\F1CC3"}.mdi-fire-truck::before{content:"\F08AB"}.mdi-firebase::before{content:"\F0967"}.mdi-firefox::before{content:"\F0239"}.mdi-fireplace::before{content:"\F0E2E"}.mdi-fireplace-off::before{content:"\F0E2F"}.mdi-firewire::before{content:"\F05BE"}.mdi-firework::before{content:"\F0E30"}.mdi-firework-off::before{content:"\F1723"}.mdi-fish::before{content:"\F023A"}.mdi-fish-off::before{content:"\F13F3"}.mdi-fishbowl::before{content:"\F0EF3"}.mdi-fishbowl-outline::before{content:"\F0EF4"}.mdi-fit-to-page::before{content:"\F0EF5"}.mdi-fit-to-page-outline::before{content:"\F0EF6"}.mdi-fit-to-screen::before{content:"\F18F4"}.mdi-fit-to-screen-outline::before{content:"\F18F5"}.mdi-flag::before{content:"\F023B"}.mdi-flag-checkered::before{content:"\F023C"}.mdi-flag-minus::before{content:"\F0B99"}.mdi-flag-minus-outline::before{content:"\F10B2"}.mdi-flag-off::before{content:"\F18EE"}.mdi-flag-off-outline::before{content:"\F18EF"}.mdi-flag-outline::before{content:"\F023D"}.mdi-flag-plus::before{content:"\F0B9A"}.mdi-flag-plus-outline::before{content:"\F10B3"}.mdi-flag-remove::before{content:"\F0B9B"}.mdi-flag-remove-outline::before{content:"\F10B4"}.mdi-flag-triangle::before{content:"\F023F"}.mdi-flag-variant::before{content:"\F0240"}.mdi-flag-variant-minus::before{content:"\F1BB4"}.mdi-flag-variant-minus-outline::before{content:"\F1BB5"}.mdi-flag-variant-off::before{content:"\F1BB0"}.mdi-flag-variant-off-outline::before{content:"\F1BB1"}.mdi-flag-variant-outline::before{content:"\F023E"}.mdi-flag-variant-plus::before{content:"\F1BB2"}.mdi-flag-variant-plus-outline::before{content:"\F1BB3"}.mdi-flag-variant-remove::before{content:"\F1BB6"}.mdi-flag-variant-remove-outline::before{content:"\F1BB7"}.mdi-flare::before{content:"\F0D72"}.mdi-flash::before{content:"\F0241"}.mdi-flash-alert::before{content:"\F0EF7"}.mdi-flash-alert-outline::before{content:"\F0EF8"}.mdi-flash-auto::before{content:"\F0242"}.mdi-flash-off::before{content:"\F0243"}.mdi-flash-off-outline::before{content:"\F1B45"}.mdi-flash-outline::before{content:"\F06D5"}.mdi-flash-red-eye::before{content:"\F067B"}.mdi-flash-triangle::before{content:"\F1B1D"}.mdi-flash-triangle-outline::before{content:"\F1B1E"}.mdi-flashlight::before{content:"\F0244"}.mdi-flashlight-off::before{content:"\F0245"}.mdi-flask::before{content:"\F0093"}.mdi-flask-empty::before{content:"\F0094"}.mdi-flask-empty-minus::before{content:"\F123A"}.mdi-flask-empty-minus-outline::before{content:"\F123B"}.mdi-flask-empty-off::before{content:"\F13F4"}.mdi-flask-empty-off-outline::before{content:"\F13F5"}.mdi-flask-empty-outline::before{content:"\F0095"}.mdi-flask-empty-plus::before{content:"\F123C"}.mdi-flask-empty-plus-outline::before{content:"\F123D"}.mdi-flask-empty-remove::before{content:"\F123E"}.mdi-flask-empty-remove-outline::before{content:"\F123F"}.mdi-flask-minus::before{content:"\F1240"}.mdi-flask-minus-outline::before{content:"\F1241"}.mdi-flask-off::before{content:"\F13F6"}.mdi-flask-off-outline::before{content:"\F13F7"}.mdi-flask-outline::before{content:"\F0096"}.mdi-flask-plus::before{content:"\F1242"}.mdi-flask-plus-outline::before{content:"\F1243"}.mdi-flask-remove::before{content:"\F1244"}.mdi-flask-remove-outline::before{content:"\F1245"}.mdi-flask-round-bottom::before{content:"\F124B"}.mdi-flask-round-bottom-empty::before{content:"\F124C"}.mdi-flask-round-bottom-empty-outline::before{content:"\F124D"}.mdi-flask-round-bottom-outline::before{content:"\F124E"}.mdi-fleur-de-lis::before{content:"\F1303"}.mdi-flip-horizontal::before{content:"\F10E7"}.mdi-flip-to-back::before{content:"\F0247"}.mdi-flip-to-front::before{content:"\F0248"}.mdi-flip-vertical::before{content:"\F10E8"}.mdi-floor-lamp::before{content:"\F08DD"}.mdi-floor-lamp-dual::before{content:"\F1040"}.mdi-floor-lamp-dual-outline::before{content:"\F17CE"}.mdi-floor-lamp-outline::before{content:"\F17C8"}.mdi-floor-lamp-torchiere::before{content:"\F1747"}.mdi-floor-lamp-torchiere-outline::before{content:"\F17D6"}.mdi-floor-lamp-torchiere-variant::before{content:"\F1041"}.mdi-floor-lamp-torchiere-variant-outline::before{content:"\F17CF"}.mdi-floor-plan::before{content:"\F0821"}.mdi-floppy::before{content:"\F0249"}.mdi-floppy-variant::before{content:"\F09EF"}.mdi-flower::before{content:"\F024A"}.mdi-flower-outline::before{content:"\F09F0"}.mdi-flower-pollen::before{content:"\F1885"}.mdi-flower-pollen-outline::before{content:"\F1886"}.mdi-flower-poppy::before{content:"\F0D08"}.mdi-flower-tulip::before{content:"\F09F1"}.mdi-flower-tulip-outline::before{content:"\F09F2"}.mdi-focus-auto::before{content:"\F0F4E"}.mdi-focus-field::before{content:"\F0F4F"}.mdi-focus-field-horizontal::before{content:"\F0F50"}.mdi-focus-field-vertical::before{content:"\F0F51"}.mdi-folder::before{content:"\F024B"}.mdi-folder-account::before{content:"\F024C"}.mdi-folder-account-outline::before{content:"\F0B9C"}.mdi-folder-alert::before{content:"\F0DCC"}.mdi-folder-alert-outline::before{content:"\F0DCD"}.mdi-folder-arrow-down::before{content:"\F19E8"}.mdi-folder-arrow-down-outline::before{content:"\F19E9"}.mdi-folder-arrow-left::before{content:"\F19EA"}.mdi-folder-arrow-left-outline::before{content:"\F19EB"}.mdi-folder-arrow-left-right::before{content:"\F19EC"}.mdi-folder-arrow-left-right-outline::before{content:"\F19ED"}.mdi-folder-arrow-right::before{content:"\F19EE"}.mdi-folder-arrow-right-outline::before{content:"\F19EF"}.mdi-folder-arrow-up::before{content:"\F19F0"}.mdi-folder-arrow-up-down::before{content:"\F19F1"}.mdi-folder-arrow-up-down-outline::before{content:"\F19F2"}.mdi-folder-arrow-up-outline::before{content:"\F19F3"}.mdi-folder-cancel::before{content:"\F19F4"}.mdi-folder-cancel-outline::before{content:"\F19F5"}.mdi-folder-check::before{content:"\F197E"}.mdi-folder-check-outline::before{content:"\F197F"}.mdi-folder-clock::before{content:"\F0ABA"}.mdi-folder-clock-outline::before{content:"\F0ABB"}.mdi-folder-cog::before{content:"\F107F"}.mdi-folder-cog-outline::before{content:"\F1080"}.mdi-folder-download::before{content:"\F024D"}.mdi-folder-download-outline::before{content:"\F10E9"}.mdi-folder-edit::before{content:"\F08DE"}.mdi-folder-edit-outline::before{content:"\F0DCE"}.mdi-folder-eye::before{content:"\F178A"}.mdi-folder-eye-outline::before{content:"\F178B"}.mdi-folder-file::before{content:"\F19F6"}.mdi-folder-file-outline::before{content:"\F19F7"}.mdi-folder-google-drive::before{content:"\F024E"}.mdi-folder-heart::before{content:"\F10EA"}.mdi-folder-heart-outline::before{content:"\F10EB"}.mdi-folder-hidden::before{content:"\F179E"}.mdi-folder-home::before{content:"\F10B5"}.mdi-folder-home-outline::before{content:"\F10B6"}.mdi-folder-image::before{content:"\F024F"}.mdi-folder-information::before{content:"\F10B7"}.mdi-folder-information-outline::before{content:"\F10B8"}.mdi-folder-key::before{content:"\F08AC"}.mdi-folder-key-network::before{content:"\F08AD"}.mdi-folder-key-network-outline::before{content:"\F0C80"}.mdi-folder-key-outline::before{content:"\F10EC"}.mdi-folder-lock::before{content:"\F0250"}.mdi-folder-lock-open::before{content:"\F0251"}.mdi-folder-lock-open-outline::before{content:"\F1AA7"}.mdi-folder-lock-outline::before{content:"\F1AA8"}.mdi-folder-marker::before{content:"\F126D"}.mdi-folder-marker-outline::before{content:"\F126E"}.mdi-folder-minus::before{content:"\F1B49"}.mdi-folder-minus-outline::before{content:"\F1B4A"}.mdi-folder-move::before{content:"\F0252"}.mdi-folder-move-outline::before{content:"\F1246"}.mdi-folder-multiple::before{content:"\F0253"}.mdi-folder-multiple-image::before{content:"\F0254"}.mdi-folder-multiple-outline::before{content:"\F0255"}.mdi-folder-multiple-plus::before{content:"\F147E"}.mdi-folder-multiple-plus-outline::before{content:"\F147F"}.mdi-folder-music::before{content:"\F1359"}.mdi-folder-music-outline::before{content:"\F135A"}.mdi-folder-network::before{content:"\F0870"}.mdi-folder-network-outline::before{content:"\F0C81"}.mdi-folder-off::before{content:"\F19F8"}.mdi-folder-off-outline::before{content:"\F19F9"}.mdi-folder-open::before{content:"\F0770"}.mdi-folder-open-outline::before{content:"\F0DCF"}.mdi-folder-outline::before{content:"\F0256"}.mdi-folder-play::before{content:"\F19FA"}.mdi-folder-play-outline::before{content:"\F19FB"}.mdi-folder-plus::before{content:"\F0257"}.mdi-folder-plus-outline::before{content:"\F0B9D"}.mdi-folder-pound::before{content:"\F0D09"}.mdi-folder-pound-outline::before{content:"\F0D0A"}.mdi-folder-question::before{content:"\F19CA"}.mdi-folder-question-outline::before{content:"\F19CB"}.mdi-folder-refresh::before{content:"\F0749"}.mdi-folder-refresh-outline::before{content:"\F0542"}.mdi-folder-remove::before{content:"\F0258"}.mdi-folder-remove-outline::before{content:"\F0B9E"}.mdi-folder-search::before{content:"\F0968"}.mdi-folder-search-outline::before{content:"\F0969"}.mdi-folder-settings::before{content:"\F107D"}.mdi-folder-settings-outline::before{content:"\F107E"}.mdi-folder-star::before{content:"\F069D"}.mdi-folder-star-multiple::before{content:"\F13D3"}.mdi-folder-star-multiple-outline::before{content:"\F13D4"}.mdi-folder-star-outline::before{content:"\F0B9F"}.mdi-folder-swap::before{content:"\F0FB6"}.mdi-folder-swap-outline::before{content:"\F0FB7"}.mdi-folder-sync::before{content:"\F0D0B"}.mdi-folder-sync-outline::before{content:"\F0D0C"}.mdi-folder-table::before{content:"\F12E3"}.mdi-folder-table-outline::before{content:"\F12E4"}.mdi-folder-text::before{content:"\F0C82"}.mdi-folder-text-outline::before{content:"\F0C83"}.mdi-folder-upload::before{content:"\F0259"}.mdi-folder-upload-outline::before{content:"\F10ED"}.mdi-folder-wrench::before{content:"\F19FC"}.mdi-folder-wrench-outline::before{content:"\F19FD"}.mdi-folder-zip::before{content:"\F06EB"}.mdi-folder-zip-outline::before{content:"\F07B9"}.mdi-font-awesome::before{content:"\F003A"}.mdi-food::before{content:"\F025A"}.mdi-food-apple::before{content:"\F025B"}.mdi-food-apple-outline::before{content:"\F0C84"}.mdi-food-croissant::before{content:"\F07C8"}.mdi-food-drumstick::before{content:"\F141F"}.mdi-food-drumstick-off::before{content:"\F1468"}.mdi-food-drumstick-off-outline::before{content:"\F1469"}.mdi-food-drumstick-outline::before{content:"\F1420"}.mdi-food-fork-drink::before{content:"\F05F2"}.mdi-food-halal::before{content:"\F1572"}.mdi-food-hot-dog::before{content:"\F184B"}.mdi-food-kosher::before{content:"\F1573"}.mdi-food-off::before{content:"\F05F3"}.mdi-food-off-outline::before{content:"\F1915"}.mdi-food-outline::before{content:"\F1916"}.mdi-food-steak::before{content:"\F146A"}.mdi-food-steak-off::before{content:"\F146B"}.mdi-food-takeout-box::before{content:"\F1836"}.mdi-food-takeout-box-outline::before{content:"\F1837"}.mdi-food-turkey::before{content:"\F171C"}.mdi-food-variant::before{content:"\F025C"}.mdi-food-variant-off::before{content:"\F13E5"}.mdi-foot-print::before{content:"\F0F52"}.mdi-football::before{content:"\F025D"}.mdi-football-australian::before{content:"\F025E"}.mdi-football-helmet::before{content:"\F025F"}.mdi-forest::before{content:"\F1897"}.mdi-forest-outline::before{content:"\F1C63"}.mdi-forklift::before{content:"\F07C9"}.mdi-form-dropdown::before{content:"\F1400"}.mdi-form-select::before{content:"\F1401"}.mdi-form-textarea::before{content:"\F1095"}.mdi-form-textbox::before{content:"\F060E"}.mdi-form-textbox-lock::before{content:"\F135D"}.mdi-form-textbox-password::before{content:"\F07F5"}.mdi-format-align-bottom::before{content:"\F0753"}.mdi-format-align-center::before{content:"\F0260"}.mdi-format-align-justify::before{content:"\F0261"}.mdi-format-align-left::before{content:"\F0262"}.mdi-format-align-middle::before{content:"\F0754"}.mdi-format-align-right::before{content:"\F0263"}.mdi-format-align-top::before{content:"\F0755"}.mdi-format-annotation-minus::before{content:"\F0ABC"}.mdi-format-annotation-plus::before{content:"\F0646"}.mdi-format-bold::before{content:"\F0264"}.mdi-format-clear::before{content:"\F0265"}.mdi-format-color-fill::before{content:"\F0266"}.mdi-format-color-highlight::before{content:"\F0E31"}.mdi-format-color-marker-cancel::before{content:"\F1313"}.mdi-format-color-text::before{content:"\F069E"}.mdi-format-columns::before{content:"\F08DF"}.mdi-format-float-center::before{content:"\F0267"}.mdi-format-float-left::before{content:"\F0268"}.mdi-format-float-none::before{content:"\F0269"}.mdi-format-float-right::before{content:"\F026A"}.mdi-format-font::before{content:"\F06D6"}.mdi-format-font-size-decrease::before{content:"\F09F3"}.mdi-format-font-size-increase::before{content:"\F09F4"}.mdi-format-header-1::before{content:"\F026B"}.mdi-format-header-2::before{content:"\F026C"}.mdi-format-header-3::before{content:"\F026D"}.mdi-format-header-4::before{content:"\F026E"}.mdi-format-header-5::before{content:"\F026F"}.mdi-format-header-6::before{content:"\F0270"}.mdi-format-header-decrease::before{content:"\F0271"}.mdi-format-header-equal::before{content:"\F0272"}.mdi-format-header-increase::before{content:"\F0273"}.mdi-format-header-pound::before{content:"\F0274"}.mdi-format-horizontal-align-center::before{content:"\F061E"}.mdi-format-horizontal-align-left::before{content:"\F061F"}.mdi-format-horizontal-align-right::before{content:"\F0620"}.mdi-format-indent-decrease::before{content:"\F0275"}.mdi-format-indent-increase::before{content:"\F0276"}.mdi-format-italic::before{content:"\F0277"}.mdi-format-letter-case::before{content:"\F0B34"}.mdi-format-letter-case-lower::before{content:"\F0B35"}.mdi-format-letter-case-upper::before{content:"\F0B36"}.mdi-format-letter-ends-with::before{content:"\F0FB8"}.mdi-format-letter-matches::before{content:"\F0FB9"}.mdi-format-letter-spacing::before{content:"\F1956"}.mdi-format-letter-spacing-variant::before{content:"\F1AFB"}.mdi-format-letter-starts-with::before{content:"\F0FBA"}.mdi-format-line-height::before{content:"\F1AFC"}.mdi-format-line-spacing::before{content:"\F0278"}.mdi-format-line-style::before{content:"\F05C8"}.mdi-format-line-weight::before{content:"\F05C9"}.mdi-format-list-bulleted::before{content:"\F0279"}.mdi-format-list-bulleted-square::before{content:"\F0DD0"}.mdi-format-list-bulleted-triangle::before{content:"\F0EB2"}.mdi-format-list-bulleted-type::before{content:"\F027A"}.mdi-format-list-checkbox::before{content:"\F096A"}.mdi-format-list-checks::before{content:"\F0756"}.mdi-format-list-group::before{content:"\F1860"}.mdi-format-list-group-plus::before{content:"\F1B56"}.mdi-format-list-numbered::before{content:"\F027B"}.mdi-format-list-numbered-rtl::before{content:"\F0D0D"}.mdi-format-list-text::before{content:"\F126F"}.mdi-format-overline::before{content:"\F0EB3"}.mdi-format-page-break::before{content:"\F06D7"}.mdi-format-page-split::before{content:"\F1917"}.mdi-format-paint::before{content:"\F027C"}.mdi-format-paragraph::before{content:"\F027D"}.mdi-format-paragraph-spacing::before{content:"\F1AFD"}.mdi-format-pilcrow::before{content:"\F06D8"}.mdi-format-pilcrow-arrow-left::before{content:"\F0286"}.mdi-format-pilcrow-arrow-right::before{content:"\F0285"}.mdi-format-quote-close::before{content:"\F027E"}.mdi-format-quote-close-outline::before{content:"\F11A8"}.mdi-format-quote-open::before{content:"\F0757"}.mdi-format-quote-open-outline::before{content:"\F11A7"}.mdi-format-rotate-90::before{content:"\F06AA"}.mdi-format-section::before{content:"\F069F"}.mdi-format-size::before{content:"\F027F"}.mdi-format-strikethrough::before{content:"\F0280"}.mdi-format-strikethrough-variant::before{content:"\F0281"}.mdi-format-subscript::before{content:"\F0282"}.mdi-format-superscript::before{content:"\F0283"}.mdi-format-text::before{content:"\F0284"}.mdi-format-text-rotation-angle-down::before{content:"\F0FBB"}.mdi-format-text-rotation-angle-up::before{content:"\F0FBC"}.mdi-format-text-rotation-down::before{content:"\F0D73"}.mdi-format-text-rotation-down-vertical::before{content:"\F0FBD"}.mdi-format-text-rotation-none::before{content:"\F0D74"}.mdi-format-text-rotation-up::before{content:"\F0FBE"}.mdi-format-text-rotation-vertical::before{content:"\F0FBF"}.mdi-format-text-variant::before{content:"\F0E32"}.mdi-format-text-variant-outline::before{content:"\F150F"}.mdi-format-text-wrapping-clip::before{content:"\F0D0E"}.mdi-format-text-wrapping-overflow::before{content:"\F0D0F"}.mdi-format-text-wrapping-wrap::before{content:"\F0D10"}.mdi-format-textbox::before{content:"\F0D11"}.mdi-format-title::before{content:"\F05F4"}.mdi-format-underline::before{content:"\F0287"}.mdi-format-underline-wavy::before{content:"\F18E9"}.mdi-format-vertical-align-bottom::before{content:"\F0621"}.mdi-format-vertical-align-center::before{content:"\F0622"}.mdi-format-vertical-align-top::before{content:"\F0623"}.mdi-format-wrap-inline::before{content:"\F0288"}.mdi-format-wrap-square::before{content:"\F0289"}.mdi-format-wrap-tight::before{content:"\F028A"}.mdi-format-wrap-top-bottom::before{content:"\F028B"}.mdi-forum::before{content:"\F028C"}.mdi-forum-minus::before{content:"\F1AA9"}.mdi-forum-minus-outline::before{content:"\F1AAA"}.mdi-forum-outline::before{content:"\F0822"}.mdi-forum-plus::before{content:"\F1AAB"}.mdi-forum-plus-outline::before{content:"\F1AAC"}.mdi-forum-remove::before{content:"\F1AAD"}.mdi-forum-remove-outline::before{content:"\F1AAE"}.mdi-forward::before{content:"\F028D"}.mdi-forwardburger::before{content:"\F0D75"}.mdi-fountain::before{content:"\F096B"}.mdi-fountain-pen::before{content:"\F0D12"}.mdi-fountain-pen-tip::before{content:"\F0D13"}.mdi-fraction-one-half::before{content:"\F1992"}.mdi-freebsd::before{content:"\F08E0"}.mdi-french-fries::before{content:"\F1957"}.mdi-frequently-asked-questions::before{content:"\F0EB4"}.mdi-fridge::before{content:"\F0290"}.mdi-fridge-alert::before{content:"\F11B1"}.mdi-fridge-alert-outline::before{content:"\F11B2"}.mdi-fridge-bottom::before{content:"\F0292"}.mdi-fridge-industrial::before{content:"\F15EE"}.mdi-fridge-industrial-alert::before{content:"\F15EF"}.mdi-fridge-industrial-alert-outline::before{content:"\F15F0"}.mdi-fridge-industrial-off::before{content:"\F15F1"}.mdi-fridge-industrial-off-outline::before{content:"\F15F2"}.mdi-fridge-industrial-outline::before{content:"\F15F3"}.mdi-fridge-off::before{content:"\F11AF"}.mdi-fridge-off-outline::before{content:"\F11B0"}.mdi-fridge-outline::before{content:"\F028F"}.mdi-fridge-top::before{content:"\F0291"}.mdi-fridge-variant::before{content:"\F15F4"}.mdi-fridge-variant-alert::before{content:"\F15F5"}.mdi-fridge-variant-alert-outline::before{content:"\F15F6"}.mdi-fridge-variant-off::before{content:"\F15F7"}.mdi-fridge-variant-off-outline::before{content:"\F15F8"}.mdi-fridge-variant-outline::before{content:"\F15F9"}.mdi-fruit-cherries::before{content:"\F1042"}.mdi-fruit-cherries-off::before{content:"\F13F8"}.mdi-fruit-citrus::before{content:"\F1043"}.mdi-fruit-citrus-off::before{content:"\F13F9"}.mdi-fruit-grapes::before{content:"\F1044"}.mdi-fruit-grapes-outline::before{content:"\F1045"}.mdi-fruit-pear::before{content:"\F1A0E"}.mdi-fruit-pineapple::before{content:"\F1046"}.mdi-fruit-watermelon::before{content:"\F1047"}.mdi-fuel::before{content:"\F07CA"}.mdi-fuel-cell::before{content:"\F18B5"}.mdi-fullscreen::before{content:"\F0293"}.mdi-fullscreen-exit::before{content:"\F0294"}.mdi-function::before{content:"\F0295"}.mdi-function-variant::before{content:"\F0871"}.mdi-furigana-horizontal::before{content:"\F1081"}.mdi-furigana-vertical::before{content:"\F1082"}.mdi-fuse::before{content:"\F0C85"}.mdi-fuse-alert::before{content:"\F142D"}.mdi-fuse-blade::before{content:"\F0C86"}.mdi-fuse-off::before{content:"\F142C"}.mdi-gamepad::before{content:"\F0296"}.mdi-gamepad-circle::before{content:"\F0E33"}.mdi-gamepad-circle-down::before{content:"\F0E34"}.mdi-gamepad-circle-left::before{content:"\F0E35"}.mdi-gamepad-circle-outline::before{content:"\F0E36"}.mdi-gamepad-circle-right::before{content:"\F0E37"}.mdi-gamepad-circle-up::before{content:"\F0E38"}.mdi-gamepad-down::before{content:"\F0E39"}.mdi-gamepad-left::before{content:"\F0E3A"}.mdi-gamepad-outline::before{content:"\F1919"}.mdi-gamepad-right::before{content:"\F0E3B"}.mdi-gamepad-round::before{content:"\F0E3C"}.mdi-gamepad-round-down::before{content:"\F0E3D"}.mdi-gamepad-round-left::before{content:"\F0E3E"}.mdi-gamepad-round-outline::before{content:"\F0E3F"}.mdi-gamepad-round-right::before{content:"\F0E40"}.mdi-gamepad-round-up::before{content:"\F0E41"}.mdi-gamepad-square::before{content:"\F0EB5"}.mdi-gamepad-square-outline::before{content:"\F0EB6"}.mdi-gamepad-up::before{content:"\F0E42"}.mdi-gamepad-variant::before{content:"\F0297"}.mdi-gamepad-variant-outline::before{content:"\F0EB7"}.mdi-gamma::before{content:"\F10EE"}.mdi-gantry-crane::before{content:"\F0DD1"}.mdi-garage::before{content:"\F06D9"}.mdi-garage-alert::before{content:"\F0872"}.mdi-garage-alert-variant::before{content:"\F12D5"}.mdi-garage-lock::before{content:"\F17FB"}.mdi-garage-open::before{content:"\F06DA"}.mdi-garage-open-variant::before{content:"\F12D4"}.mdi-garage-variant::before{content:"\F12D3"}.mdi-garage-variant-lock::before{content:"\F17FC"}.mdi-gas-burner::before{content:"\F1A1B"}.mdi-gas-cylinder::before{content:"\F0647"}.mdi-gas-station::before{content:"\F0298"}.mdi-gas-station-in-use::before{content:"\F1CC4"}.mdi-gas-station-in-use-outline::before{content:"\F1CC5"}.mdi-gas-station-off::before{content:"\F1409"}.mdi-gas-station-off-outline::before{content:"\F140A"}.mdi-gas-station-outline::before{content:"\F0EB8"}.mdi-gate::before{content:"\F0299"}.mdi-gate-alert::before{content:"\F17F8"}.mdi-gate-and::before{content:"\F08E1"}.mdi-gate-arrow-left::before{content:"\F17F7"}.mdi-gate-arrow-right::before{content:"\F1169"}.mdi-gate-buffer::before{content:"\F1AFE"}.mdi-gate-nand::before{content:"\F08E2"}.mdi-gate-nor::before{content:"\F08E3"}.mdi-gate-not::before{content:"\F08E4"}.mdi-gate-open::before{content:"\F116A"}.mdi-gate-or::before{content:"\F08E5"}.mdi-gate-xnor::before{content:"\F08E6"}.mdi-gate-xor::before{content:"\F08E7"}.mdi-gatsby::before{content:"\F0E43"}.mdi-gauge::before{content:"\F029A"}.mdi-gauge-empty::before{content:"\F0873"}.mdi-gauge-full::before{content:"\F0874"}.mdi-gauge-low::before{content:"\F0875"}.mdi-gavel::before{content:"\F029B"}.mdi-gender-female::before{content:"\F029C"}.mdi-gender-male::before{content:"\F029D"}.mdi-gender-male-female::before{content:"\F029E"}.mdi-gender-male-female-variant::before{content:"\F113F"}.mdi-gender-non-binary::before{content:"\F1140"}.mdi-gender-transgender::before{content:"\F029F"}.mdi-generator-mobile::before{content:"\F1C8A"}.mdi-generator-portable::before{content:"\F1C8B"}.mdi-generator-stationary::before{content:"\F1C8C"}.mdi-gentoo::before{content:"\F08E8"}.mdi-gesture::before{content:"\F07CB"}.mdi-gesture-double-tap::before{content:"\F073C"}.mdi-gesture-pinch::before{content:"\F0ABD"}.mdi-gesture-spread::before{content:"\F0ABE"}.mdi-gesture-swipe::before{content:"\F0D76"}.mdi-gesture-swipe-down::before{content:"\F073D"}.mdi-gesture-swipe-horizontal::before{content:"\F0ABF"}.mdi-gesture-swipe-left::before{content:"\F073E"}.mdi-gesture-swipe-right::before{content:"\F073F"}.mdi-gesture-swipe-up::before{content:"\F0740"}.mdi-gesture-swipe-vertical::before{content:"\F0AC0"}.mdi-gesture-tap::before{content:"\F0741"}.mdi-gesture-tap-box::before{content:"\F12A9"}.mdi-gesture-tap-button::before{content:"\F12A8"}.mdi-gesture-tap-hold::before{content:"\F0D77"}.mdi-gesture-two-double-tap::before{content:"\F0742"}.mdi-gesture-two-tap::before{content:"\F0743"}.mdi-ghost::before{content:"\F02A0"}.mdi-ghost-off::before{content:"\F09F5"}.mdi-ghost-off-outline::before{content:"\F165C"}.mdi-ghost-outline::before{content:"\F165D"}.mdi-gift::before{content:"\F0E44"}.mdi-gift-off::before{content:"\F16EF"}.mdi-gift-off-outline::before{content:"\F16F0"}.mdi-gift-open::before{content:"\F16F1"}.mdi-gift-open-outline::before{content:"\F16F2"}.mdi-gift-outline::before{content:"\F02A1"}.mdi-git::before{content:"\F02A2"}.mdi-github::before{content:"\F02A4"}.mdi-gitlab::before{content:"\F0BA0"}.mdi-glass-cocktail::before{content:"\F0356"}.mdi-glass-cocktail-off::before{content:"\F15E6"}.mdi-glass-flute::before{content:"\F02A5"}.mdi-glass-fragile::before{content:"\F1873"}.mdi-glass-mug::before{content:"\F02A6"}.mdi-glass-mug-off::before{content:"\F15E7"}.mdi-glass-mug-variant::before{content:"\F1116"}.mdi-glass-mug-variant-off::before{content:"\F15E8"}.mdi-glass-pint-outline::before{content:"\F130D"}.mdi-glass-stange::before{content:"\F02A7"}.mdi-glass-tulip::before{content:"\F02A8"}.mdi-glass-wine::before{content:"\F0876"}.mdi-glasses::before{content:"\F02AA"}.mdi-globe-light::before{content:"\F066F"}.mdi-globe-light-outline::before{content:"\F12D7"}.mdi-globe-model::before{content:"\F08E9"}.mdi-gmail::before{content:"\F02AB"}.mdi-gnome::before{content:"\F02AC"}.mdi-go-kart::before{content:"\F0D79"}.mdi-go-kart-track::before{content:"\F0D7A"}.mdi-gog::before{content:"\F0BA1"}.mdi-gold::before{content:"\F124F"}.mdi-golf::before{content:"\F0823"}.mdi-golf-cart::before{content:"\F11A4"}.mdi-golf-tee::before{content:"\F1083"}.mdi-gondola::before{content:"\F0686"}.mdi-goodreads::before{content:"\F0D7B"}.mdi-google::before{content:"\F02AD"}.mdi-google-ads::before{content:"\F0C87"}.mdi-google-analytics::before{content:"\F07CC"}.mdi-google-assistant::before{content:"\F07CD"}.mdi-google-cardboard::before{content:"\F02AE"}.mdi-google-chrome::before{content:"\F02AF"}.mdi-google-circles::before{content:"\F02B0"}.mdi-google-circles-communities::before{content:"\F02B1"}.mdi-google-circles-extended::before{content:"\F02B2"}.mdi-google-circles-group::before{content:"\F02B3"}.mdi-google-classroom::before{content:"\F02C0"}.mdi-google-cloud::before{content:"\F11F6"}.mdi-google-downasaur::before{content:"\F1362"}.mdi-google-drive::before{content:"\F02B6"}.mdi-google-earth::before{content:"\F02B7"}.mdi-google-fit::before{content:"\F096C"}.mdi-google-glass::before{content:"\F02B8"}.mdi-google-hangouts::before{content:"\F02C9"}.mdi-google-keep::before{content:"\F06DC"}.mdi-google-lens::before{content:"\F09F6"}.mdi-google-maps::before{content:"\F05F5"}.mdi-google-my-business::before{content:"\F1048"}.mdi-google-nearby::before{content:"\F02B9"}.mdi-google-play::before{content:"\F02BC"}.mdi-google-plus::before{content:"\F02BD"}.mdi-google-podcast::before{content:"\F0EB9"}.mdi-google-spreadsheet::before{content:"\F09F7"}.mdi-google-street-view::before{content:"\F0C88"}.mdi-google-translate::before{content:"\F02BF"}.mdi-gradient-horizontal::before{content:"\F174A"}.mdi-gradient-vertical::before{content:"\F06A0"}.mdi-grain::before{content:"\F0D7C"}.mdi-graph::before{content:"\F1049"}.mdi-graph-outline::before{content:"\F104A"}.mdi-graphql::before{content:"\F0877"}.mdi-grass::before{content:"\F1510"}.mdi-grave-stone::before{content:"\F0BA2"}.mdi-grease-pencil::before{content:"\F0648"}.mdi-greater-than::before{content:"\F096D"}.mdi-greater-than-or-equal::before{content:"\F096E"}.mdi-greenhouse::before{content:"\F002D"}.mdi-grid::before{content:"\F02C1"}.mdi-grid-large::before{content:"\F0758"}.mdi-grid-off::before{content:"\F02C2"}.mdi-grill::before{content:"\F0E45"}.mdi-grill-outline::before{content:"\F118A"}.mdi-group::before{content:"\F02C3"}.mdi-guitar-acoustic::before{content:"\F0771"}.mdi-guitar-electric::before{content:"\F02C4"}.mdi-guitar-pick::before{content:"\F02C5"}.mdi-guitar-pick-outline::before{content:"\F02C6"}.mdi-guy-fawkes-mask::before{content:"\F0825"}.mdi-gymnastics::before{content:"\F1A41"}.mdi-hail::before{content:"\F0AC1"}.mdi-hair-dryer::before{content:"\F10EF"}.mdi-hair-dryer-outline::before{content:"\F10F0"}.mdi-halloween::before{content:"\F0BA3"}.mdi-hamburger::before{content:"\F0685"}.mdi-hamburger-check::before{content:"\F1776"}.mdi-hamburger-minus::before{content:"\F1777"}.mdi-hamburger-off::before{content:"\F1778"}.mdi-hamburger-plus::before{content:"\F1779"}.mdi-hamburger-remove::before{content:"\F177A"}.mdi-hammer::before{content:"\F08EA"}.mdi-hammer-screwdriver::before{content:"\F1322"}.mdi-hammer-sickle::before{content:"\F1887"}.mdi-hammer-wrench::before{content:"\F1323"}.mdi-hand-back-left::before{content:"\F0E46"}.mdi-hand-back-left-off::before{content:"\F1830"}.mdi-hand-back-left-off-outline::before{content:"\F1832"}.mdi-hand-back-left-outline::before{content:"\F182C"}.mdi-hand-back-right::before{content:"\F0E47"}.mdi-hand-back-right-off::before{content:"\F1831"}.mdi-hand-back-right-off-outline::before{content:"\F1833"}.mdi-hand-back-right-outline::before{content:"\F182D"}.mdi-hand-clap::before{content:"\F194B"}.mdi-hand-clap-off::before{content:"\F1A42"}.mdi-hand-coin::before{content:"\F188F"}.mdi-hand-coin-outline::before{content:"\F1890"}.mdi-hand-cycle::before{content:"\F1B9C"}.mdi-hand-extended::before{content:"\F18B6"}.mdi-hand-extended-outline::before{content:"\F18B7"}.mdi-hand-front-left::before{content:"\F182B"}.mdi-hand-front-left-outline::before{content:"\F182E"}.mdi-hand-front-right::before{content:"\F0A4F"}.mdi-hand-front-right-outline::before{content:"\F182F"}.mdi-hand-heart::before{content:"\F10F1"}.mdi-hand-heart-outline::before{content:"\F157E"}.mdi-hand-okay::before{content:"\F0A50"}.mdi-hand-peace::before{content:"\F0A51"}.mdi-hand-peace-variant::before{content:"\F0A52"}.mdi-hand-pointing-down::before{content:"\F0A53"}.mdi-hand-pointing-left::before{content:"\F0A54"}.mdi-hand-pointing-right::before{content:"\F02C7"}.mdi-hand-pointing-up::before{content:"\F0A55"}.mdi-hand-saw::before{content:"\F0E48"}.mdi-hand-wash::before{content:"\F157F"}.mdi-hand-wash-outline::before{content:"\F1580"}.mdi-hand-water::before{content:"\F139F"}.mdi-hand-wave::before{content:"\F1821"}.mdi-hand-wave-outline::before{content:"\F1822"}.mdi-handball::before{content:"\F0F53"}.mdi-handcuffs::before{content:"\F113E"}.mdi-hands-pray::before{content:"\F0579"}.mdi-handshake::before{content:"\F1218"}.mdi-handshake-outline::before{content:"\F15A1"}.mdi-hanger::before{content:"\F02C8"}.mdi-hard-hat::before{content:"\F096F"}.mdi-harddisk::before{content:"\F02CA"}.mdi-harddisk-plus::before{content:"\F104B"}.mdi-harddisk-remove::before{content:"\F104C"}.mdi-hat-fedora::before{content:"\F0BA4"}.mdi-hazard-lights::before{content:"\F0C89"}.mdi-hdmi-port::before{content:"\F1BB8"}.mdi-hdr::before{content:"\F0D7D"}.mdi-hdr-off::before{content:"\F0D7E"}.mdi-head::before{content:"\F135E"}.mdi-head-alert::before{content:"\F1338"}.mdi-head-alert-outline::before{content:"\F1339"}.mdi-head-check::before{content:"\F133A"}.mdi-head-check-outline::before{content:"\F133B"}.mdi-head-cog::before{content:"\F133C"}.mdi-head-cog-outline::before{content:"\F133D"}.mdi-head-dots-horizontal::before{content:"\F133E"}.mdi-head-dots-horizontal-outline::before{content:"\F133F"}.mdi-head-flash::before{content:"\F1340"}.mdi-head-flash-outline::before{content:"\F1341"}.mdi-head-heart::before{content:"\F1342"}.mdi-head-heart-outline::before{content:"\F1343"}.mdi-head-lightbulb::before{content:"\F1344"}.mdi-head-lightbulb-outline::before{content:"\F1345"}.mdi-head-minus::before{content:"\F1346"}.mdi-head-minus-outline::before{content:"\F1347"}.mdi-head-outline::before{content:"\F135F"}.mdi-head-plus::before{content:"\F1348"}.mdi-head-plus-outline::before{content:"\F1349"}.mdi-head-question::before{content:"\F134A"}.mdi-head-question-outline::before{content:"\F134B"}.mdi-head-remove::before{content:"\F134C"}.mdi-head-remove-outline::before{content:"\F134D"}.mdi-head-snowflake::before{content:"\F134E"}.mdi-head-snowflake-outline::before{content:"\F134F"}.mdi-head-sync::before{content:"\F1350"}.mdi-head-sync-outline::before{content:"\F1351"}.mdi-headphones::before{content:"\F02CB"}.mdi-headphones-bluetooth::before{content:"\F0970"}.mdi-headphones-box::before{content:"\F02CC"}.mdi-headphones-off::before{content:"\F07CE"}.mdi-headphones-settings::before{content:"\F02CD"}.mdi-headset::before{content:"\F02CE"}.mdi-headset-dock::before{content:"\F02CF"}.mdi-headset-off::before{content:"\F02D0"}.mdi-heart::before{content:"\F02D1"}.mdi-heart-box::before{content:"\F02D2"}.mdi-heart-box-outline::before{content:"\F02D3"}.mdi-heart-broken::before{content:"\F02D4"}.mdi-heart-broken-outline::before{content:"\F0D14"}.mdi-heart-circle::before{content:"\F0971"}.mdi-heart-circle-outline::before{content:"\F0972"}.mdi-heart-cog::before{content:"\F1663"}.mdi-heart-cog-outline::before{content:"\F1664"}.mdi-heart-flash::before{content:"\F0EF9"}.mdi-heart-half::before{content:"\F06DF"}.mdi-heart-half-full::before{content:"\F06DE"}.mdi-heart-half-outline::before{content:"\F06E0"}.mdi-heart-minus::before{content:"\F142F"}.mdi-heart-minus-outline::before{content:"\F1432"}.mdi-heart-multiple::before{content:"\F0A56"}.mdi-heart-multiple-outline::before{content:"\F0A57"}.mdi-heart-off::before{content:"\F0759"}.mdi-heart-off-outline::before{content:"\F1434"}.mdi-heart-outline::before{content:"\F02D5"}.mdi-heart-plus::before{content:"\F142E"}.mdi-heart-plus-outline::before{content:"\F1431"}.mdi-heart-pulse::before{content:"\F05F6"}.mdi-heart-remove::before{content:"\F1430"}.mdi-heart-remove-outline::before{content:"\F1433"}.mdi-heart-search::before{content:"\F1C8D"}.mdi-heart-settings::before{content:"\F1665"}.mdi-heart-settings-outline::before{content:"\F1666"}.mdi-heat-pump::before{content:"\F1A43"}.mdi-heat-pump-outline::before{content:"\F1A44"}.mdi-heat-wave::before{content:"\F1A45"}.mdi-heating-coil::before{content:"\F1AAF"}.mdi-helicopter::before{content:"\F0AC2"}.mdi-help::before{content:"\F02D6"}.mdi-help-box::before{content:"\F078B"}.mdi-help-box-multiple::before{content:"\F1C0A"}.mdi-help-box-multiple-outline::before{content:"\F1C0B"}.mdi-help-box-outline::before{content:"\F1C0C"}.mdi-help-circle::before{content:"\F02D7"}.mdi-help-circle-outline::before{content:"\F0625"}.mdi-help-network::before{content:"\F06F5"}.mdi-help-network-outline::before{content:"\F0C8A"}.mdi-help-rhombus::before{content:"\F0BA5"}.mdi-help-rhombus-outline::before{content:"\F0BA6"}.mdi-hexadecimal::before{content:"\F12A7"}.mdi-hexagon::before{content:"\F02D8"}.mdi-hexagon-multiple::before{content:"\F06E1"}.mdi-hexagon-multiple-outline::before{content:"\F10F2"}.mdi-hexagon-outline::before{content:"\F02D9"}.mdi-hexagon-slice-1::before{content:"\F0AC3"}.mdi-hexagon-slice-2::before{content:"\F0AC4"}.mdi-hexagon-slice-3::before{content:"\F0AC5"}.mdi-hexagon-slice-4::before{content:"\F0AC6"}.mdi-hexagon-slice-5::before{content:"\F0AC7"}.mdi-hexagon-slice-6::before{content:"\F0AC8"}.mdi-hexagram::before{content:"\F0AC9"}.mdi-hexagram-outline::before{content:"\F0ACA"}.mdi-high-definition::before{content:"\F07CF"}.mdi-high-definition-box::before{content:"\F0878"}.mdi-highway::before{content:"\F05F7"}.mdi-hiking::before{content:"\F0D7F"}.mdi-history::before{content:"\F02DA"}.mdi-hockey-puck::before{content:"\F0879"}.mdi-hockey-sticks::before{content:"\F087A"}.mdi-hololens::before{content:"\F02DB"}.mdi-home::before{content:"\F02DC"}.mdi-home-account::before{content:"\F0826"}.mdi-home-alert::before{content:"\F087B"}.mdi-home-alert-outline::before{content:"\F15D0"}.mdi-home-analytics::before{content:"\F0EBA"}.mdi-home-assistant::before{content:"\F07D0"}.mdi-home-automation::before{content:"\F07D1"}.mdi-home-battery::before{content:"\F1901"}.mdi-home-battery-outline::before{content:"\F1902"}.mdi-home-circle::before{content:"\F07D2"}.mdi-home-circle-outline::before{content:"\F104D"}.mdi-home-city::before{content:"\F0D15"}.mdi-home-city-outline::before{content:"\F0D16"}.mdi-home-clock::before{content:"\F1A12"}.mdi-home-clock-outline::before{content:"\F1A13"}.mdi-home-edit::before{content:"\F1159"}.mdi-home-edit-outline::before{content:"\F115A"}.mdi-home-export-outline::before{content:"\F0F9B"}.mdi-home-flood::before{content:"\F0EFA"}.mdi-home-floor-0::before{content:"\F0DD2"}.mdi-home-floor-1::before{content:"\F0D80"}.mdi-home-floor-2::before{content:"\F0D81"}.mdi-home-floor-3::before{content:"\F0D82"}.mdi-home-floor-a::before{content:"\F0D83"}.mdi-home-floor-b::before{content:"\F0D84"}.mdi-home-floor-g::before{content:"\F0D85"}.mdi-home-floor-l::before{content:"\F0D86"}.mdi-home-floor-negative-1::before{content:"\F0DD3"}.mdi-home-group::before{content:"\F0DD4"}.mdi-home-group-minus::before{content:"\F19C1"}.mdi-home-group-plus::before{content:"\F19C0"}.mdi-home-group-remove::before{content:"\F19C2"}.mdi-home-heart::before{content:"\F0827"}.mdi-home-import-outline::before{content:"\F0F9C"}.mdi-home-lightbulb::before{content:"\F1251"}.mdi-home-lightbulb-outline::before{content:"\F1252"}.mdi-home-lightning-bolt::before{content:"\F1903"}.mdi-home-lightning-bolt-outline::before{content:"\F1904"}.mdi-home-lock::before{content:"\F08EB"}.mdi-home-lock-open::before{content:"\F08EC"}.mdi-home-map-marker::before{content:"\F05F8"}.mdi-home-minus::before{content:"\F0974"}.mdi-home-minus-outline::before{content:"\F13D5"}.mdi-home-modern::before{content:"\F02DD"}.mdi-home-off::before{content:"\F1A46"}.mdi-home-off-outline::before{content:"\F1A47"}.mdi-home-outline::before{content:"\F06A1"}.mdi-home-percent::before{content:"\F1C7C"}.mdi-home-percent-outline::before{content:"\F1C7D"}.mdi-home-plus::before{content:"\F0975"}.mdi-home-plus-outline::before{content:"\F13D6"}.mdi-home-remove::before{content:"\F1247"}.mdi-home-remove-outline::before{content:"\F13D7"}.mdi-home-roof::before{content:"\F112B"}.mdi-home-search::before{content:"\F13B0"}.mdi-home-search-outline::before{content:"\F13B1"}.mdi-home-silo::before{content:"\F1BA0"}.mdi-home-silo-outline::before{content:"\F1BA1"}.mdi-home-sound-in::before{content:"\F1C2F"}.mdi-home-sound-in-outline::before{content:"\F1C30"}.mdi-home-sound-out::before{content:"\F1C31"}.mdi-home-sound-out-outline::before{content:"\F1C32"}.mdi-home-switch::before{content:"\F1794"}.mdi-home-switch-outline::before{content:"\F1795"}.mdi-home-thermometer::before{content:"\F0F54"}.mdi-home-thermometer-outline::before{content:"\F0F55"}.mdi-home-variant::before{content:"\F02DE"}.mdi-home-variant-outline::before{content:"\F0BA7"}.mdi-hook::before{content:"\F06E2"}.mdi-hook-off::before{content:"\F06E3"}.mdi-hoop-house::before{content:"\F0E56"}.mdi-hops::before{content:"\F02DF"}.mdi-horizontal-rotate-clockwise::before{content:"\F10F3"}.mdi-horizontal-rotate-counterclockwise::before{content:"\F10F4"}.mdi-horse::before{content:"\F15BF"}.mdi-horse-human::before{content:"\F15C0"}.mdi-horse-variant::before{content:"\F15C1"}.mdi-horse-variant-fast::before{content:"\F186E"}.mdi-horseshoe::before{content:"\F0A58"}.mdi-hospital::before{content:"\F0FF6"}.mdi-hospital-box::before{content:"\F02E0"}.mdi-hospital-box-outline::before{content:"\F0FF7"}.mdi-hospital-building::before{content:"\F02E1"}.mdi-hospital-marker::before{content:"\F02E2"}.mdi-hot-tub::before{content:"\F0828"}.mdi-hours-12::before{content:"\F1C94"}.mdi-hours-24::before{content:"\F1478"}.mdi-hub::before{content:"\F1C95"}.mdi-hub-outline::before{content:"\F1C96"}.mdi-hubspot::before{content:"\F0D17"}.mdi-hulu::before{content:"\F0829"}.mdi-human::before{content:"\F02E6"}.mdi-human-baby-changing-table::before{content:"\F138B"}.mdi-human-cane::before{content:"\F1581"}.mdi-human-capacity-decrease::before{content:"\F159B"}.mdi-human-capacity-increase::before{content:"\F159C"}.mdi-human-child::before{content:"\F02E7"}.mdi-human-dolly::before{content:"\F1980"}.mdi-human-edit::before{content:"\F14E8"}.mdi-human-female::before{content:"\F0649"}.mdi-human-female-boy::before{content:"\F0A59"}.mdi-human-female-dance::before{content:"\F15C9"}.mdi-human-female-female::before{content:"\F0A5A"}.mdi-human-female-female-child::before{content:"\F1C8E"}.mdi-human-female-girl::before{content:"\F0A5B"}.mdi-human-greeting::before{content:"\F17C4"}.mdi-human-greeting-proximity::before{content:"\F159D"}.mdi-human-greeting-variant::before{content:"\F064A"}.mdi-human-handsdown::before{content:"\F064B"}.mdi-human-handsup::before{content:"\F064C"}.mdi-human-male::before{content:"\F064D"}.mdi-human-male-board::before{content:"\F0890"}.mdi-human-male-board-poll::before{content:"\F0846"}.mdi-human-male-boy::before{content:"\F0A5C"}.mdi-human-male-child::before{content:"\F138C"}.mdi-human-male-female::before{content:"\F02E8"}.mdi-human-male-female-child::before{content:"\F1823"}.mdi-human-male-girl::before{content:"\F0A5D"}.mdi-human-male-height::before{content:"\F0EFB"}.mdi-human-male-height-variant::before{content:"\F0EFC"}.mdi-human-male-male::before{content:"\F0A5E"}.mdi-human-male-male-child::before{content:"\F1C8F"}.mdi-human-non-binary::before{content:"\F1848"}.mdi-human-pregnant::before{content:"\F05CF"}.mdi-human-queue::before{content:"\F1571"}.mdi-human-scooter::before{content:"\F11E9"}.mdi-human-walker::before{content:"\F1B71"}.mdi-human-wheelchair::before{content:"\F138D"}.mdi-human-white-cane::before{content:"\F1981"}.mdi-humble-bundle::before{content:"\F0744"}.mdi-hvac::before{content:"\F1352"}.mdi-hvac-off::before{content:"\F159E"}.mdi-hydraulic-oil-level::before{content:"\F1324"}.mdi-hydraulic-oil-temperature::before{content:"\F1325"}.mdi-hydro-power::before{content:"\F12E5"}.mdi-hydrogen-station::before{content:"\F1894"}.mdi-ice-cream::before{content:"\F082A"}.mdi-ice-cream-off::before{content:"\F0E52"}.mdi-ice-pop::before{content:"\F0EFD"}.mdi-id-card::before{content:"\F0FC0"}.mdi-identifier::before{content:"\F0EFE"}.mdi-ideogram-cjk::before{content:"\F1331"}.mdi-ideogram-cjk-variant::before{content:"\F1332"}.mdi-image::before{content:"\F02E9"}.mdi-image-album::before{content:"\F02EA"}.mdi-image-area::before{content:"\F02EB"}.mdi-image-area-close::before{content:"\F02EC"}.mdi-image-auto-adjust::before{content:"\F0FC1"}.mdi-image-broken::before{content:"\F02ED"}.mdi-image-broken-variant::before{content:"\F02EE"}.mdi-image-check::before{content:"\F1B25"}.mdi-image-check-outline::before{content:"\F1B26"}.mdi-image-edit::before{content:"\F11E3"}.mdi-image-edit-outline::before{content:"\F11E4"}.mdi-image-filter-black-white::before{content:"\F02F0"}.mdi-image-filter-center-focus::before{content:"\F02F1"}.mdi-image-filter-center-focus-strong::before{content:"\F0EFF"}.mdi-image-filter-center-focus-strong-outline::before{content:"\F0F00"}.mdi-image-filter-center-focus-weak::before{content:"\F02F2"}.mdi-image-filter-drama::before{content:"\F02F3"}.mdi-image-filter-drama-outline::before{content:"\F1BFF"}.mdi-image-filter-frames::before{content:"\F02F4"}.mdi-image-filter-hdr::before{content:"\F02F5"}.mdi-image-filter-hdr-outline::before{content:"\F1C64"}.mdi-image-filter-none::before{content:"\F02F6"}.mdi-image-filter-tilt-shift::before{content:"\F02F7"}.mdi-image-filter-vintage::before{content:"\F02F8"}.mdi-image-frame::before{content:"\F0E49"}.mdi-image-lock::before{content:"\F1AB0"}.mdi-image-lock-outline::before{content:"\F1AB1"}.mdi-image-marker::before{content:"\F177B"}.mdi-image-marker-outline::before{content:"\F177C"}.mdi-image-minus::before{content:"\F1419"}.mdi-image-minus-outline::before{content:"\F1B47"}.mdi-image-move::before{content:"\F09F8"}.mdi-image-multiple::before{content:"\F02F9"}.mdi-image-multiple-outline::before{content:"\F02EF"}.mdi-image-off::before{content:"\F082B"}.mdi-image-off-outline::before{content:"\F11D1"}.mdi-image-outline::before{content:"\F0976"}.mdi-image-plus::before{content:"\F087C"}.mdi-image-plus-outline::before{content:"\F1B46"}.mdi-image-refresh::before{content:"\F19FE"}.mdi-image-refresh-outline::before{content:"\F19FF"}.mdi-image-remove::before{content:"\F1418"}.mdi-image-remove-outline::before{content:"\F1B48"}.mdi-image-search::before{content:"\F0977"}.mdi-image-search-outline::before{content:"\F0978"}.mdi-image-size-select-actual::before{content:"\F0C8D"}.mdi-image-size-select-large::before{content:"\F0C8E"}.mdi-image-size-select-small::before{content:"\F0C8F"}.mdi-image-sync::before{content:"\F1A00"}.mdi-image-sync-outline::before{content:"\F1A01"}.mdi-image-text::before{content:"\F160D"}.mdi-import::before{content:"\F02FA"}.mdi-inbox::before{content:"\F0687"}.mdi-inbox-arrow-down::before{content:"\F02FB"}.mdi-inbox-arrow-down-outline::before{content:"\F1270"}.mdi-inbox-arrow-up::before{content:"\F03D1"}.mdi-inbox-arrow-up-outline::before{content:"\F1271"}.mdi-inbox-full::before{content:"\F1272"}.mdi-inbox-full-outline::before{content:"\F1273"}.mdi-inbox-multiple::before{content:"\F08B0"}.mdi-inbox-multiple-outline::before{content:"\F0BA8"}.mdi-inbox-outline::before{content:"\F1274"}.mdi-inbox-remove::before{content:"\F159F"}.mdi-inbox-remove-outline::before{content:"\F15A0"}.mdi-incognito::before{content:"\F05F9"}.mdi-incognito-circle::before{content:"\F1421"}.mdi-incognito-circle-off::before{content:"\F1422"}.mdi-incognito-off::before{content:"\F0075"}.mdi-induction::before{content:"\F184C"}.mdi-infinity::before{content:"\F06E4"}.mdi-information::before{content:"\F02FC"}.mdi-information-box::before{content:"\F1C65"}.mdi-information-box-outline::before{content:"\F1C66"}.mdi-information-off::before{content:"\F178C"}.mdi-information-off-outline::before{content:"\F178D"}.mdi-information-outline::before{content:"\F02FD"}.mdi-information-slab-box::before{content:"\F1C67"}.mdi-information-slab-box-outline::before{content:"\F1C68"}.mdi-information-slab-circle::before{content:"\F1C69"}.mdi-information-slab-circle-outline::before{content:"\F1C6A"}.mdi-information-slab-symbol::before{content:"\F1C6B"}.mdi-information-symbol::before{content:"\F1C6C"}.mdi-information-variant::before{content:"\F064E"}.mdi-information-variant-box::before{content:"\F1C6D"}.mdi-information-variant-box-outline::before{content:"\F1C6E"}.mdi-information-variant-circle::before{content:"\F1C6F"}.mdi-information-variant-circle-outline::before{content:"\F1C70"}.mdi-instagram::before{content:"\F02FE"}.mdi-instrument-triangle::before{content:"\F104E"}.mdi-integrated-circuit-chip::before{content:"\F1913"}.mdi-invert-colors::before{content:"\F0301"}.mdi-invert-colors-off::before{content:"\F0E4A"}.mdi-invoice::before{content:"\F1CD2"}.mdi-invoice-arrow-left::before{content:"\F1CD3"}.mdi-invoice-arrow-left-outline::before{content:"\F1CD4"}.mdi-invoice-arrow-right::before{content:"\F1CD5"}.mdi-invoice-arrow-right-outline::before{content:"\F1CD6"}.mdi-invoice-check::before{content:"\F1CD7"}.mdi-invoice-check-outline::before{content:"\F1CD8"}.mdi-invoice-clock::before{content:"\F1CD9"}.mdi-invoice-clock-outline::before{content:"\F1CDA"}.mdi-invoice-edit::before{content:"\F1CDB"}.mdi-invoice-edit-outline::before{content:"\F1CDC"}.mdi-invoice-export-outline::before{content:"\F1CDD"}.mdi-invoice-fast::before{content:"\F1CDE"}.mdi-invoice-fast-outline::before{content:"\F1CDF"}.mdi-invoice-import::before{content:"\F1CE0"}.mdi-invoice-import-outline::before{content:"\F1CE1"}.mdi-invoice-list::before{content:"\F1CE2"}.mdi-invoice-list-outline::before{content:"\F1CE3"}.mdi-invoice-minus::before{content:"\F1CE4"}.mdi-invoice-minus-outline::before{content:"\F1CE5"}.mdi-invoice-multiple::before{content:"\F1CE6"}.mdi-invoice-multiple-outline::before{content:"\F1CE7"}.mdi-invoice-outline::before{content:"\F1CE8"}.mdi-invoice-plus::before{content:"\F1CE9"}.mdi-invoice-plus-outline::before{content:"\F1CEA"}.mdi-invoice-remove::before{content:"\F1CEB"}.mdi-invoice-remove-outline::before{content:"\F1CEC"}.mdi-invoice-send::before{content:"\F1CED"}.mdi-invoice-send-outline::before{content:"\F1CEE"}.mdi-invoice-text::before{content:"\F1CEF"}.mdi-invoice-text-arrow-left::before{content:"\F1CF0"}.mdi-invoice-text-arrow-left-outline::before{content:"\F1CF1"}.mdi-invoice-text-arrow-right::before{content:"\F1CF2"}.mdi-invoice-text-arrow-right-outline::before{content:"\F1CF3"}.mdi-invoice-text-check::before{content:"\F1CF4"}.mdi-invoice-text-check-outline::before{content:"\F1CF5"}.mdi-invoice-text-clock::before{content:"\F1CF6"}.mdi-invoice-text-clock-outline::before{content:"\F1CF7"}.mdi-invoice-text-edit::before{content:"\F1CF8"}.mdi-invoice-text-edit-outline::before{content:"\F1CF9"}.mdi-invoice-text-fast::before{content:"\F1CFA"}.mdi-invoice-text-fast-outline::before{content:"\F1CFB"}.mdi-invoice-text-minus::before{content:"\F1CFC"}.mdi-invoice-text-minus-outline::before{content:"\F1CFD"}.mdi-invoice-text-multiple::before{content:"\F1CFE"}.mdi-invoice-text-multiple-outline::before{content:"\F1CFF"}.mdi-invoice-text-outline::before{content:"\F1D00"}.mdi-invoice-text-plus::before{content:"\F1D01"}.mdi-invoice-text-plus-outline::before{content:"\F1D02"}.mdi-invoice-text-remove::before{content:"\F1D03"}.mdi-invoice-text-remove-outline::before{content:"\F1D04"}.mdi-invoice-text-send::before{content:"\F1D05"}.mdi-invoice-text-send-outline::before{content:"\F1D06"}.mdi-iobroker::before{content:"\F12E8"}.mdi-ip::before{content:"\F0A5F"}.mdi-ip-network::before{content:"\F0A60"}.mdi-ip-network-outline::before{content:"\F0C90"}.mdi-ip-outline::before{content:"\F1982"}.mdi-ipod::before{content:"\F0C91"}.mdi-iron::before{content:"\F1824"}.mdi-iron-board::before{content:"\F1838"}.mdi-iron-outline::before{content:"\F1825"}.mdi-island::before{content:"\F104F"}.mdi-island-variant::before{content:"\F1CC6"}.mdi-iv-bag::before{content:"\F10B9"}.mdi-jabber::before{content:"\F0DD5"}.mdi-jeepney::before{content:"\F0302"}.mdi-jellyfish::before{content:"\F0F01"}.mdi-jellyfish-outline::before{content:"\F0F02"}.mdi-jira::before{content:"\F0303"}.mdi-jquery::before{content:"\F087D"}.mdi-jsfiddle::before{content:"\F0304"}.mdi-jump-rope::before{content:"\F12FF"}.mdi-kabaddi::before{content:"\F0D87"}.mdi-kangaroo::before{content:"\F1558"}.mdi-karate::before{content:"\F082C"}.mdi-kayaking::before{content:"\F08AF"}.mdi-keg::before{content:"\F0305"}.mdi-kettle::before{content:"\F05FA"}.mdi-kettle-alert::before{content:"\F1317"}.mdi-kettle-alert-outline::before{content:"\F1318"}.mdi-kettle-off::before{content:"\F131B"}.mdi-kettle-off-outline::before{content:"\F131C"}.mdi-kettle-outline::before{content:"\F0F56"}.mdi-kettle-pour-over::before{content:"\F173C"}.mdi-kettle-steam::before{content:"\F1319"}.mdi-kettle-steam-outline::before{content:"\F131A"}.mdi-kettlebell::before{content:"\F1300"}.mdi-key::before{content:"\F0306"}.mdi-key-alert::before{content:"\F1983"}.mdi-key-alert-outline::before{content:"\F1984"}.mdi-key-arrow-right::before{content:"\F1312"}.mdi-key-chain::before{content:"\F1574"}.mdi-key-chain-variant::before{content:"\F1575"}.mdi-key-change::before{content:"\F0307"}.mdi-key-link::before{content:"\F119F"}.mdi-key-minus::before{content:"\F0308"}.mdi-key-outline::before{content:"\F0DD6"}.mdi-key-plus::before{content:"\F0309"}.mdi-key-remove::before{content:"\F030A"}.mdi-key-star::before{content:"\F119E"}.mdi-key-variant::before{content:"\F030B"}.mdi-key-wireless::before{content:"\F0FC2"}.mdi-keyboard::before{content:"\F030C"}.mdi-keyboard-backspace::before{content:"\F030D"}.mdi-keyboard-caps::before{content:"\F030E"}.mdi-keyboard-close::before{content:"\F030F"}.mdi-keyboard-close-outline::before{content:"\F1C00"}.mdi-keyboard-esc::before{content:"\F12B7"}.mdi-keyboard-f1::before{content:"\F12AB"}.mdi-keyboard-f10::before{content:"\F12B4"}.mdi-keyboard-f11::before{content:"\F12B5"}.mdi-keyboard-f12::before{content:"\F12B6"}.mdi-keyboard-f2::before{content:"\F12AC"}.mdi-keyboard-f3::before{content:"\F12AD"}.mdi-keyboard-f4::before{content:"\F12AE"}.mdi-keyboard-f5::before{content:"\F12AF"}.mdi-keyboard-f6::before{content:"\F12B0"}.mdi-keyboard-f7::before{content:"\F12B1"}.mdi-keyboard-f8::before{content:"\F12B2"}.mdi-keyboard-f9::before{content:"\F12B3"}.mdi-keyboard-off::before{content:"\F0310"}.mdi-keyboard-off-outline::before{content:"\F0E4B"}.mdi-keyboard-outline::before{content:"\F097B"}.mdi-keyboard-return::before{content:"\F0311"}.mdi-keyboard-settings::before{content:"\F09F9"}.mdi-keyboard-settings-outline::before{content:"\F09FA"}.mdi-keyboard-space::before{content:"\F1050"}.mdi-keyboard-tab::before{content:"\F0312"}.mdi-keyboard-tab-reverse::before{content:"\F0325"}.mdi-keyboard-variant::before{content:"\F0313"}.mdi-khanda::before{content:"\F10FD"}.mdi-kickstarter::before{content:"\F0745"}.mdi-kite::before{content:"\F1985"}.mdi-kite-outline::before{content:"\F1986"}.mdi-kitesurfing::before{content:"\F1744"}.mdi-klingon::before{content:"\F135B"}.mdi-knife::before{content:"\F09FB"}.mdi-knife-military::before{content:"\F09FC"}.mdi-knob::before{content:"\F1B96"}.mdi-koala::before{content:"\F173F"}.mdi-kodi::before{content:"\F0314"}.mdi-kubernetes::before{content:"\F10FE"}.mdi-label::before{content:"\F0315"}.mdi-label-multiple::before{content:"\F1375"}.mdi-label-multiple-outline::before{content:"\F1376"}.mdi-label-off::before{content:"\F0ACB"}.mdi-label-off-outline::before{content:"\F0ACC"}.mdi-label-outline::before{content:"\F0316"}.mdi-label-percent::before{content:"\F12EA"}.mdi-label-percent-outline::before{content:"\F12EB"}.mdi-label-variant::before{content:"\F0ACD"}.mdi-label-variant-outline::before{content:"\F0ACE"}.mdi-ladder::before{content:"\F15A2"}.mdi-ladybug::before{content:"\F082D"}.mdi-lambda::before{content:"\F0627"}.mdi-lamp::before{content:"\F06B5"}.mdi-lamp-outline::before{content:"\F17D0"}.mdi-lamps::before{content:"\F1576"}.mdi-lamps-outline::before{content:"\F17D1"}.mdi-lan::before{content:"\F0317"}.mdi-lan-check::before{content:"\F12AA"}.mdi-lan-connect::before{content:"\F0318"}.mdi-lan-disconnect::before{content:"\F0319"}.mdi-lan-pending::before{content:"\F031A"}.mdi-land-fields::before{content:"\F1AB2"}.mdi-land-plots::before{content:"\F1AB3"}.mdi-land-plots-circle::before{content:"\F1AB4"}.mdi-land-plots-circle-variant::before{content:"\F1AB5"}.mdi-land-plots-marker::before{content:"\F1C5D"}.mdi-land-rows-horizontal::before{content:"\F1AB6"}.mdi-land-rows-vertical::before{content:"\F1AB7"}.mdi-landslide::before{content:"\F1A48"}.mdi-landslide-outline::before{content:"\F1A49"}.mdi-language-c::before{content:"\F0671"}.mdi-language-cpp::before{content:"\F0672"}.mdi-language-csharp::before{content:"\F031B"}.mdi-language-css3::before{content:"\F031C"}.mdi-language-fortran::before{content:"\F121A"}.mdi-language-go::before{content:"\F07D3"}.mdi-language-haskell::before{content:"\F0C92"}.mdi-language-html5::before{content:"\F031D"}.mdi-language-java::before{content:"\F0B37"}.mdi-language-javascript::before{content:"\F031E"}.mdi-language-kotlin::before{content:"\F1219"}.mdi-language-lua::before{content:"\F08B1"}.mdi-language-markdown::before{content:"\F0354"}.mdi-language-markdown-outline::before{content:"\F0F5B"}.mdi-language-php::before{content:"\F031F"}.mdi-language-python::before{content:"\F0320"}.mdi-language-r::before{content:"\F07D4"}.mdi-language-ruby::before{content:"\F0D2D"}.mdi-language-ruby-on-rails::before{content:"\F0ACF"}.mdi-language-rust::before{content:"\F1617"}.mdi-language-swift::before{content:"\F06E5"}.mdi-language-typescript::before{content:"\F06E6"}.mdi-language-xaml::before{content:"\F0673"}.mdi-laptop::before{content:"\F0322"}.mdi-laptop-account::before{content:"\F1A4A"}.mdi-laptop-off::before{content:"\F06E7"}.mdi-laravel::before{content:"\F0AD0"}.mdi-laser-pointer::before{content:"\F1484"}.mdi-lasso::before{content:"\F0F03"}.mdi-lastpass::before{content:"\F0446"}.mdi-latitude::before{content:"\F0F57"}.mdi-launch::before{content:"\F0327"}.mdi-lava-lamp::before{content:"\F07D5"}.mdi-layers::before{content:"\F0328"}.mdi-layers-edit::before{content:"\F1892"}.mdi-layers-minus::before{content:"\F0E4C"}.mdi-layers-off::before{content:"\F0329"}.mdi-layers-off-outline::before{content:"\F09FD"}.mdi-layers-outline::before{content:"\F09FE"}.mdi-layers-plus::before{content:"\F0E4D"}.mdi-layers-remove::before{content:"\F0E4E"}.mdi-layers-search::before{content:"\F1206"}.mdi-layers-search-outline::before{content:"\F1207"}.mdi-layers-triple::before{content:"\F0F58"}.mdi-layers-triple-outline::before{content:"\F0F59"}.mdi-lead-pencil::before{content:"\F064F"}.mdi-leaf::before{content:"\F032A"}.mdi-leaf-circle::before{content:"\F1905"}.mdi-leaf-circle-outline::before{content:"\F1906"}.mdi-leaf-maple::before{content:"\F0C93"}.mdi-leaf-maple-off::before{content:"\F12DA"}.mdi-leaf-off::before{content:"\F12D9"}.mdi-leak::before{content:"\F0DD7"}.mdi-leak-off::before{content:"\F0DD8"}.mdi-lectern::before{content:"\F1AF0"}.mdi-led-off::before{content:"\F032B"}.mdi-led-on::before{content:"\F032C"}.mdi-led-outline::before{content:"\F032D"}.mdi-led-strip::before{content:"\F07D6"}.mdi-led-strip-variant::before{content:"\F1051"}.mdi-led-strip-variant-off::before{content:"\F1A4B"}.mdi-led-variant-off::before{content:"\F032E"}.mdi-led-variant-on::before{content:"\F032F"}.mdi-led-variant-outline::before{content:"\F0330"}.mdi-leek::before{content:"\F117D"}.mdi-less-than::before{content:"\F097C"}.mdi-less-than-or-equal::before{content:"\F097D"}.mdi-library::before{content:"\F0331"}.mdi-library-outline::before{content:"\F1A22"}.mdi-library-shelves::before{content:"\F0BA9"}.mdi-license::before{content:"\F0FC3"}.mdi-lifebuoy::before{content:"\F087E"}.mdi-light-flood-down::before{content:"\F1987"}.mdi-light-flood-up::before{content:"\F1988"}.mdi-light-recessed::before{content:"\F179B"}.mdi-light-switch::before{content:"\F097E"}.mdi-light-switch-off::before{content:"\F1A24"}.mdi-lightbulb::before{content:"\F0335"}.mdi-lightbulb-alert::before{content:"\F19E1"}.mdi-lightbulb-alert-outline::before{content:"\F19E2"}.mdi-lightbulb-auto::before{content:"\F1800"}.mdi-lightbulb-auto-outline::before{content:"\F1801"}.mdi-lightbulb-cfl::before{content:"\F1208"}.mdi-lightbulb-cfl-off::before{content:"\F1209"}.mdi-lightbulb-cfl-spiral::before{content:"\F1275"}.mdi-lightbulb-cfl-spiral-off::before{content:"\F12C3"}.mdi-lightbulb-fluorescent-tube::before{content:"\F1804"}.mdi-lightbulb-fluorescent-tube-outline::before{content:"\F1805"}.mdi-lightbulb-group::before{content:"\F1253"}.mdi-lightbulb-group-off::before{content:"\F12CD"}.mdi-lightbulb-group-off-outline::before{content:"\F12CE"}.mdi-lightbulb-group-outline::before{content:"\F1254"}.mdi-lightbulb-multiple::before{content:"\F1255"}.mdi-lightbulb-multiple-off::before{content:"\F12CF"}.mdi-lightbulb-multiple-off-outline::before{content:"\F12D0"}.mdi-lightbulb-multiple-outline::before{content:"\F1256"}.mdi-lightbulb-night::before{content:"\F1A4C"}.mdi-lightbulb-night-outline::before{content:"\F1A4D"}.mdi-lightbulb-off::before{content:"\F0E4F"}.mdi-lightbulb-off-outline::before{content:"\F0E50"}.mdi-lightbulb-on::before{content:"\F06E8"}.mdi-lightbulb-on-10::before{content:"\F1A4E"}.mdi-lightbulb-on-20::before{content:"\F1A4F"}.mdi-lightbulb-on-30::before{content:"\F1A50"}.mdi-lightbulb-on-40::before{content:"\F1A51"}.mdi-lightbulb-on-50::before{content:"\F1A52"}.mdi-lightbulb-on-60::before{content:"\F1A53"}.mdi-lightbulb-on-70::before{content:"\F1A54"}.mdi-lightbulb-on-80::before{content:"\F1A55"}.mdi-lightbulb-on-90::before{content:"\F1A56"}.mdi-lightbulb-on-outline::before{content:"\F06E9"}.mdi-lightbulb-outline::before{content:"\F0336"}.mdi-lightbulb-question::before{content:"\F19E3"}.mdi-lightbulb-question-outline::before{content:"\F19E4"}.mdi-lightbulb-spot::before{content:"\F17F4"}.mdi-lightbulb-spot-off::before{content:"\F17F5"}.mdi-lightbulb-variant::before{content:"\F1802"}.mdi-lightbulb-variant-outline::before{content:"\F1803"}.mdi-lighthouse::before{content:"\F09FF"}.mdi-lighthouse-on::before{content:"\F0A00"}.mdi-lightning-bolt::before{content:"\F140B"}.mdi-lightning-bolt-circle::before{content:"\F0820"}.mdi-lightning-bolt-outline::before{content:"\F140C"}.mdi-line-scan::before{content:"\F0624"}.mdi-lingerie::before{content:"\F1476"}.mdi-link::before{content:"\F0337"}.mdi-link-box::before{content:"\F0D1A"}.mdi-link-box-outline::before{content:"\F0D1B"}.mdi-link-box-variant::before{content:"\F0D1C"}.mdi-link-box-variant-outline::before{content:"\F0D1D"}.mdi-link-circle::before{content:"\F1CAC"}.mdi-link-circle-outline::before{content:"\F1CAD"}.mdi-link-edit::before{content:"\F1CAE"}.mdi-link-lock::before{content:"\F10BA"}.mdi-link-off::before{content:"\F0338"}.mdi-link-plus::before{content:"\F0C94"}.mdi-link-variant::before{content:"\F0339"}.mdi-link-variant-minus::before{content:"\F10FF"}.mdi-link-variant-off::before{content:"\F033A"}.mdi-link-variant-plus::before{content:"\F1100"}.mdi-link-variant-remove::before{content:"\F1101"}.mdi-linkedin::before{content:"\F033B"}.mdi-linux::before{content:"\F033D"}.mdi-linux-mint::before{content:"\F08ED"}.mdi-lipstick::before{content:"\F13B5"}.mdi-liquid-spot::before{content:"\F1826"}.mdi-liquor::before{content:"\F191E"}.mdi-list-box::before{content:"\F1B7B"}.mdi-list-box-outline::before{content:"\F1B7C"}.mdi-list-status::before{content:"\F15AB"}.mdi-litecoin::before{content:"\F0A61"}.mdi-loading::before{content:"\F0772"}.mdi-location-enter::before{content:"\F0FC4"}.mdi-location-exit::before{content:"\F0FC5"}.mdi-lock::before{content:"\F033E"}.mdi-lock-alert::before{content:"\F08EE"}.mdi-lock-alert-outline::before{content:"\F15D1"}.mdi-lock-check::before{content:"\F139A"}.mdi-lock-check-outline::before{content:"\F16A8"}.mdi-lock-clock::before{content:"\F097F"}.mdi-lock-minus::before{content:"\F16A9"}.mdi-lock-minus-outline::before{content:"\F16AA"}.mdi-lock-off::before{content:"\F1671"}.mdi-lock-off-outline::before{content:"\F1672"}.mdi-lock-open::before{content:"\F033F"}.mdi-lock-open-alert::before{content:"\F139B"}.mdi-lock-open-alert-outline::before{content:"\F15D2"}.mdi-lock-open-check::before{content:"\F139C"}.mdi-lock-open-check-outline::before{content:"\F16AB"}.mdi-lock-open-minus::before{content:"\F16AC"}.mdi-lock-open-minus-outline::before{content:"\F16AD"}.mdi-lock-open-outline::before{content:"\F0340"}.mdi-lock-open-plus::before{content:"\F16AE"}.mdi-lock-open-plus-outline::before{content:"\F16AF"}.mdi-lock-open-remove::before{content:"\F16B0"}.mdi-lock-open-remove-outline::before{content:"\F16B1"}.mdi-lock-open-variant::before{content:"\F0FC6"}.mdi-lock-open-variant-outline::before{content:"\F0FC7"}.mdi-lock-outline::before{content:"\F0341"}.mdi-lock-pattern::before{content:"\F06EA"}.mdi-lock-percent::before{content:"\F1C12"}.mdi-lock-percent-open::before{content:"\F1C13"}.mdi-lock-percent-open-outline::before{content:"\F1C14"}.mdi-lock-percent-open-variant::before{content:"\F1C15"}.mdi-lock-percent-open-variant-outline::before{content:"\F1C16"}.mdi-lock-percent-outline::before{content:"\F1C17"}.mdi-lock-plus::before{content:"\F05FB"}.mdi-lock-plus-outline::before{content:"\F16B2"}.mdi-lock-question::before{content:"\F08EF"}.mdi-lock-remove::before{content:"\F16B3"}.mdi-lock-remove-outline::before{content:"\F16B4"}.mdi-lock-reset::before{content:"\F0773"}.mdi-lock-smart::before{content:"\F08B2"}.mdi-locker::before{content:"\F07D7"}.mdi-locker-multiple::before{content:"\F07D8"}.mdi-login::before{content:"\F0342"}.mdi-login-variant::before{content:"\F05FC"}.mdi-logout::before{content:"\F0343"}.mdi-logout-variant::before{content:"\F05FD"}.mdi-longitude::before{content:"\F0F5A"}.mdi-looks::before{content:"\F0344"}.mdi-lotion::before{content:"\F1582"}.mdi-lotion-outline::before{content:"\F1583"}.mdi-lotion-plus::before{content:"\F1584"}.mdi-lotion-plus-outline::before{content:"\F1585"}.mdi-loupe::before{content:"\F0345"}.mdi-lumx::before{content:"\F0346"}.mdi-lungs::before{content:"\F1084"}.mdi-mace::before{content:"\F1843"}.mdi-magazine-pistol::before{content:"\F0324"}.mdi-magazine-rifle::before{content:"\F0323"}.mdi-magic-staff::before{content:"\F1844"}.mdi-magnet::before{content:"\F0347"}.mdi-magnet-on::before{content:"\F0348"}.mdi-magnify::before{content:"\F0349"}.mdi-magnify-close::before{content:"\F0980"}.mdi-magnify-expand::before{content:"\F1874"}.mdi-magnify-minus::before{content:"\F034A"}.mdi-magnify-minus-cursor::before{content:"\F0A62"}.mdi-magnify-minus-outline::before{content:"\F06EC"}.mdi-magnify-plus::before{content:"\F034B"}.mdi-magnify-plus-cursor::before{content:"\F0A63"}.mdi-magnify-plus-outline::before{content:"\F06ED"}.mdi-magnify-remove-cursor::before{content:"\F120C"}.mdi-magnify-remove-outline::before{content:"\F120D"}.mdi-magnify-scan::before{content:"\F1276"}.mdi-mail::before{content:"\F0EBB"}.mdi-mailbox::before{content:"\F06EE"}.mdi-mailbox-open::before{content:"\F0D88"}.mdi-mailbox-open-outline::before{content:"\F0D89"}.mdi-mailbox-open-up::before{content:"\F0D8A"}.mdi-mailbox-open-up-outline::before{content:"\F0D8B"}.mdi-mailbox-outline::before{content:"\F0D8C"}.mdi-mailbox-up::before{content:"\F0D8D"}.mdi-mailbox-up-outline::before{content:"\F0D8E"}.mdi-manjaro::before{content:"\F160A"}.mdi-map::before{content:"\F034D"}.mdi-map-check::before{content:"\F0EBC"}.mdi-map-check-outline::before{content:"\F0EBD"}.mdi-map-clock::before{content:"\F0D1E"}.mdi-map-clock-outline::before{content:"\F0D1F"}.mdi-map-legend::before{content:"\F0A01"}.mdi-map-marker::before{content:"\F034E"}.mdi-map-marker-account::before{content:"\F18E3"}.mdi-map-marker-account-outline::before{content:"\F18E4"}.mdi-map-marker-alert::before{content:"\F0F05"}.mdi-map-marker-alert-outline::before{content:"\F0F06"}.mdi-map-marker-check::before{content:"\F0C95"}.mdi-map-marker-check-outline::before{content:"\F12FB"}.mdi-map-marker-circle::before{content:"\F034F"}.mdi-map-marker-distance::before{content:"\F08F0"}.mdi-map-marker-down::before{content:"\F1102"}.mdi-map-marker-left::before{content:"\F12DB"}.mdi-map-marker-left-outline::before{content:"\F12DD"}.mdi-map-marker-minus::before{content:"\F0650"}.mdi-map-marker-minus-outline::before{content:"\F12F9"}.mdi-map-marker-multiple::before{content:"\F0350"}.mdi-map-marker-multiple-outline::before{content:"\F1277"}.mdi-map-marker-off::before{content:"\F0351"}.mdi-map-marker-off-outline::before{content:"\F12FD"}.mdi-map-marker-outline::before{content:"\F07D9"}.mdi-map-marker-path::before{content:"\F0D20"}.mdi-map-marker-plus::before{content:"\F0651"}.mdi-map-marker-plus-outline::before{content:"\F12F8"}.mdi-map-marker-question::before{content:"\F0F07"}.mdi-map-marker-question-outline::before{content:"\F0F08"}.mdi-map-marker-radius::before{content:"\F0352"}.mdi-map-marker-radius-outline::before{content:"\F12FC"}.mdi-map-marker-remove::before{content:"\F0F09"}.mdi-map-marker-remove-outline::before{content:"\F12FA"}.mdi-map-marker-remove-variant::before{content:"\F0F0A"}.mdi-map-marker-right::before{content:"\F12DC"}.mdi-map-marker-right-outline::before{content:"\F12DE"}.mdi-map-marker-star::before{content:"\F1608"}.mdi-map-marker-star-outline::before{content:"\F1609"}.mdi-map-marker-up::before{content:"\F1103"}.mdi-map-minus::before{content:"\F0981"}.mdi-map-outline::before{content:"\F0982"}.mdi-map-plus::before{content:"\F0983"}.mdi-map-search::before{content:"\F0984"}.mdi-map-search-outline::before{content:"\F0985"}.mdi-mapbox::before{content:"\F0BAA"}.mdi-margin::before{content:"\F0353"}.mdi-marker::before{content:"\F0652"}.mdi-marker-cancel::before{content:"\F0DD9"}.mdi-marker-check::before{content:"\F0355"}.mdi-mastodon::before{content:"\F0AD1"}.mdi-material-design::before{content:"\F0986"}.mdi-material-ui::before{content:"\F0357"}.mdi-math-compass::before{content:"\F0358"}.mdi-math-cos::before{content:"\F0C96"}.mdi-math-integral::before{content:"\F0FC8"}.mdi-math-integral-box::before{content:"\F0FC9"}.mdi-math-log::before{content:"\F1085"}.mdi-math-norm::before{content:"\F0FCA"}.mdi-math-norm-box::before{content:"\F0FCB"}.mdi-math-sin::before{content:"\F0C97"}.mdi-math-tan::before{content:"\F0C98"}.mdi-matrix::before{content:"\F0628"}.mdi-medal::before{content:"\F0987"}.mdi-medal-outline::before{content:"\F1326"}.mdi-medical-bag::before{content:"\F06EF"}.mdi-medical-cotton-swab::before{content:"\F1AB8"}.mdi-medication::before{content:"\F1B14"}.mdi-medication-outline::before{content:"\F1B15"}.mdi-meditation::before{content:"\F117B"}.mdi-memory::before{content:"\F035B"}.mdi-memory-arrow-down::before{content:"\F1CA6"}.mdi-menorah::before{content:"\F17D4"}.mdi-menorah-fire::before{content:"\F17D5"}.mdi-menu::before{content:"\F035C"}.mdi-menu-close::before{content:"\F1C90"}.mdi-menu-down::before{content:"\F035D"}.mdi-menu-down-outline::before{content:"\F06B6"}.mdi-menu-left::before{content:"\F035E"}.mdi-menu-left-outline::before{content:"\F0A02"}.mdi-menu-open::before{content:"\F0BAB"}.mdi-menu-right::before{content:"\F035F"}.mdi-menu-right-outline::before{content:"\F0A03"}.mdi-menu-swap::before{content:"\F0A64"}.mdi-menu-swap-outline::before{content:"\F0A65"}.mdi-menu-up::before{content:"\F0360"}.mdi-menu-up-outline::before{content:"\F06B7"}.mdi-merge::before{content:"\F0F5C"}.mdi-message::before{content:"\F0361"}.mdi-message-alert::before{content:"\F0362"}.mdi-message-alert-outline::before{content:"\F0A04"}.mdi-message-arrow-left::before{content:"\F12F2"}.mdi-message-arrow-left-outline::before{content:"\F12F3"}.mdi-message-arrow-right::before{content:"\F12F4"}.mdi-message-arrow-right-outline::before{content:"\F12F5"}.mdi-message-badge::before{content:"\F1941"}.mdi-message-badge-outline::before{content:"\F1942"}.mdi-message-bookmark::before{content:"\F15AC"}.mdi-message-bookmark-outline::before{content:"\F15AD"}.mdi-message-bulleted::before{content:"\F06A2"}.mdi-message-bulleted-off::before{content:"\F06A3"}.mdi-message-check::before{content:"\F1B8A"}.mdi-message-check-outline::before{content:"\F1B8B"}.mdi-message-cog::before{content:"\F06F1"}.mdi-message-cog-outline::before{content:"\F1172"}.mdi-message-draw::before{content:"\F0363"}.mdi-message-fast::before{content:"\F19CC"}.mdi-message-fast-outline::before{content:"\F19CD"}.mdi-message-flash::before{content:"\F15A9"}.mdi-message-flash-outline::before{content:"\F15AA"}.mdi-message-image::before{content:"\F0364"}.mdi-message-image-outline::before{content:"\F116C"}.mdi-message-lock::before{content:"\F0FCC"}.mdi-message-lock-outline::before{content:"\F116D"}.mdi-message-minus::before{content:"\F116E"}.mdi-message-minus-outline::before{content:"\F116F"}.mdi-message-off::before{content:"\F164D"}.mdi-message-off-outline::before{content:"\F164E"}.mdi-message-outline::before{content:"\F0365"}.mdi-message-plus::before{content:"\F0653"}.mdi-message-plus-outline::before{content:"\F10BB"}.mdi-message-processing::before{content:"\F0366"}.mdi-message-processing-outline::before{content:"\F1170"}.mdi-message-question::before{content:"\F173A"}.mdi-message-question-outline::before{content:"\F173B"}.mdi-message-reply::before{content:"\F0367"}.mdi-message-reply-outline::before{content:"\F173D"}.mdi-message-reply-text::before{content:"\F0368"}.mdi-message-reply-text-outline::before{content:"\F173E"}.mdi-message-settings::before{content:"\F06F0"}.mdi-message-settings-outline::before{content:"\F1171"}.mdi-message-star::before{content:"\F069A"}.mdi-message-star-outline::before{content:"\F1250"}.mdi-message-text::before{content:"\F0369"}.mdi-message-text-clock::before{content:"\F1173"}.mdi-message-text-clock-outline::before{content:"\F1174"}.mdi-message-text-fast::before{content:"\F19CE"}.mdi-message-text-fast-outline::before{content:"\F19CF"}.mdi-message-text-lock::before{content:"\F0FCD"}.mdi-message-text-lock-outline::before{content:"\F1175"}.mdi-message-text-outline::before{content:"\F036A"}.mdi-message-video::before{content:"\F036B"}.mdi-meteor::before{content:"\F0629"}.mdi-meter-electric::before{content:"\F1A57"}.mdi-meter-electric-outline::before{content:"\F1A58"}.mdi-meter-gas::before{content:"\F1A59"}.mdi-meter-gas-outline::before{content:"\F1A5A"}.mdi-metronome::before{content:"\F07DA"}.mdi-metronome-tick::before{content:"\F07DB"}.mdi-micro-sd::before{content:"\F07DC"}.mdi-microphone::before{content:"\F036C"}.mdi-microphone-message::before{content:"\F050A"}.mdi-microphone-message-off::before{content:"\F050B"}.mdi-microphone-minus::before{content:"\F08B3"}.mdi-microphone-off::before{content:"\F036D"}.mdi-microphone-outline::before{content:"\F036E"}.mdi-microphone-plus::before{content:"\F08B4"}.mdi-microphone-question::before{content:"\F1989"}.mdi-microphone-question-outline::before{content:"\F198A"}.mdi-microphone-settings::before{content:"\F036F"}.mdi-microphone-variant::before{content:"\F0370"}.mdi-microphone-variant-off::before{content:"\F0371"}.mdi-microscope::before{content:"\F0654"}.mdi-microsoft::before{content:"\F0372"}.mdi-microsoft-access::before{content:"\F138E"}.mdi-microsoft-azure::before{content:"\F0805"}.mdi-microsoft-azure-devops::before{content:"\F0FD5"}.mdi-microsoft-bing::before{content:"\F00A4"}.mdi-microsoft-dynamics-365::before{content:"\F0988"}.mdi-microsoft-edge::before{content:"\F01E9"}.mdi-microsoft-excel::before{content:"\F138F"}.mdi-microsoft-internet-explorer::before{content:"\F0300"}.mdi-microsoft-office::before{content:"\F03C6"}.mdi-microsoft-onedrive::before{content:"\F03CA"}.mdi-microsoft-onenote::before{content:"\F0747"}.mdi-microsoft-outlook::before{content:"\F0D22"}.mdi-microsoft-powerpoint::before{content:"\F1390"}.mdi-microsoft-sharepoint::before{content:"\F1391"}.mdi-microsoft-teams::before{content:"\F02BB"}.mdi-microsoft-visual-studio::before{content:"\F0610"}.mdi-microsoft-visual-studio-code::before{content:"\F0A1E"}.mdi-microsoft-windows::before{content:"\F05B3"}.mdi-microsoft-windows-classic::before{content:"\F0A21"}.mdi-microsoft-word::before{content:"\F1392"}.mdi-microsoft-xbox::before{content:"\F05B9"}.mdi-microsoft-xbox-controller::before{content:"\F05BA"}.mdi-microsoft-xbox-controller-battery-alert::before{content:"\F074B"}.mdi-microsoft-xbox-controller-battery-charging::before{content:"\F0A22"}.mdi-microsoft-xbox-controller-battery-empty::before{content:"\F074C"}.mdi-microsoft-xbox-controller-battery-full::before{content:"\F074D"}.mdi-microsoft-xbox-controller-battery-low::before{content:"\F074E"}.mdi-microsoft-xbox-controller-battery-medium::before{content:"\F074F"}.mdi-microsoft-xbox-controller-battery-unknown::before{content:"\F0750"}.mdi-microsoft-xbox-controller-menu::before{content:"\F0E6F"}.mdi-microsoft-xbox-controller-off::before{content:"\F05BB"}.mdi-microsoft-xbox-controller-view::before{content:"\F0E70"}.mdi-microwave::before{content:"\F0C99"}.mdi-microwave-off::before{content:"\F1423"}.mdi-middleware::before{content:"\F0F5D"}.mdi-middleware-outline::before{content:"\F0F5E"}.mdi-midi::before{content:"\F08F1"}.mdi-midi-port::before{content:"\F08F2"}.mdi-mine::before{content:"\F0DDA"}.mdi-minecraft::before{content:"\F0373"}.mdi-mini-sd::before{content:"\F0A05"}.mdi-minidisc::before{content:"\F0A06"}.mdi-minus::before{content:"\F0374"}.mdi-minus-box::before{content:"\F0375"}.mdi-minus-box-multiple::before{content:"\F1141"}.mdi-minus-box-multiple-outline::before{content:"\F1142"}.mdi-minus-box-outline::before{content:"\F06F2"}.mdi-minus-circle::before{content:"\F0376"}.mdi-minus-circle-multiple::before{content:"\F035A"}.mdi-minus-circle-multiple-outline::before{content:"\F0AD3"}.mdi-minus-circle-off::before{content:"\F1459"}.mdi-minus-circle-off-outline::before{content:"\F145A"}.mdi-minus-circle-outline::before{content:"\F0377"}.mdi-minus-network::before{content:"\F0378"}.mdi-minus-network-outline::before{content:"\F0C9A"}.mdi-minus-thick::before{content:"\F1639"}.mdi-mirror::before{content:"\F11FD"}.mdi-mirror-rectangle::before{content:"\F179F"}.mdi-mirror-variant::before{content:"\F17A0"}.mdi-mixed-martial-arts::before{content:"\F0D8F"}.mdi-mixed-reality::before{content:"\F087F"}.mdi-molecule::before{content:"\F0BAC"}.mdi-molecule-co::before{content:"\F12FE"}.mdi-molecule-co2::before{content:"\F07E4"}.mdi-monitor::before{content:"\F0379"}.mdi-monitor-account::before{content:"\F1A5B"}.mdi-monitor-arrow-down::before{content:"\F19D0"}.mdi-monitor-arrow-down-variant::before{content:"\F19D1"}.mdi-monitor-cellphone::before{content:"\F0989"}.mdi-monitor-cellphone-star::before{content:"\F098A"}.mdi-monitor-dashboard::before{content:"\F0A07"}.mdi-monitor-edit::before{content:"\F12C6"}.mdi-monitor-eye::before{content:"\F13B4"}.mdi-monitor-lock::before{content:"\F0DDB"}.mdi-monitor-multiple::before{content:"\F037A"}.mdi-monitor-off::before{content:"\F0D90"}.mdi-monitor-screenshot::before{content:"\F0E51"}.mdi-monitor-share::before{content:"\F1483"}.mdi-monitor-shimmer::before{content:"\F1104"}.mdi-monitor-small::before{content:"\F1876"}.mdi-monitor-speaker::before{content:"\F0F5F"}.mdi-monitor-speaker-off::before{content:"\F0F60"}.mdi-monitor-star::before{content:"\F0DDC"}.mdi-monitor-vertical::before{content:"\F1C33"}.mdi-moon-first-quarter::before{content:"\F0F61"}.mdi-moon-full::before{content:"\F0F62"}.mdi-moon-last-quarter::before{content:"\F0F63"}.mdi-moon-new::before{content:"\F0F64"}.mdi-moon-waning-crescent::before{content:"\F0F65"}.mdi-moon-waning-gibbous::before{content:"\F0F66"}.mdi-moon-waxing-crescent::before{content:"\F0F67"}.mdi-moon-waxing-gibbous::before{content:"\F0F68"}.mdi-moped::before{content:"\F1086"}.mdi-moped-electric::before{content:"\F15B7"}.mdi-moped-electric-outline::before{content:"\F15B8"}.mdi-moped-outline::before{content:"\F15B9"}.mdi-more::before{content:"\F037B"}.mdi-mortar-pestle::before{content:"\F1748"}.mdi-mortar-pestle-plus::before{content:"\F03F1"}.mdi-mosque::before{content:"\F0D45"}.mdi-mosque-outline::before{content:"\F1827"}.mdi-mother-heart::before{content:"\F1314"}.mdi-mother-nurse::before{content:"\F0D21"}.mdi-motion::before{content:"\F15B2"}.mdi-motion-outline::before{content:"\F15B3"}.mdi-motion-pause::before{content:"\F1590"}.mdi-motion-pause-outline::before{content:"\F1592"}.mdi-motion-play::before{content:"\F158F"}.mdi-motion-play-outline::before{content:"\F1591"}.mdi-motion-sensor::before{content:"\F0D91"}.mdi-motion-sensor-off::before{content:"\F1435"}.mdi-motorbike::before{content:"\F037C"}.mdi-motorbike-electric::before{content:"\F15BA"}.mdi-motorbike-off::before{content:"\F1B16"}.mdi-mouse::before{content:"\F037D"}.mdi-mouse-bluetooth::before{content:"\F098B"}.mdi-mouse-left-click::before{content:"\F1D07"}.mdi-mouse-left-click-outline::before{content:"\F1D08"}.mdi-mouse-move-down::before{content:"\F1550"}.mdi-mouse-move-up::before{content:"\F1551"}.mdi-mouse-move-vertical::before{content:"\F1552"}.mdi-mouse-off::before{content:"\F037E"}.mdi-mouse-outline::before{content:"\F1D09"}.mdi-mouse-right-click::before{content:"\F1D0A"}.mdi-mouse-right-click-outline::before{content:"\F1D0B"}.mdi-mouse-scroll-wheel::before{content:"\F1D0C"}.mdi-mouse-variant::before{content:"\F037F"}.mdi-mouse-variant-off::before{content:"\F0380"}.mdi-move-resize::before{content:"\F0655"}.mdi-move-resize-variant::before{content:"\F0656"}.mdi-movie::before{content:"\F0381"}.mdi-movie-check::before{content:"\F16F3"}.mdi-movie-check-outline::before{content:"\F16F4"}.mdi-movie-cog::before{content:"\F16F5"}.mdi-movie-cog-outline::before{content:"\F16F6"}.mdi-movie-edit::before{content:"\F1122"}.mdi-movie-edit-outline::before{content:"\F1123"}.mdi-movie-filter::before{content:"\F1124"}.mdi-movie-filter-outline::before{content:"\F1125"}.mdi-movie-minus::before{content:"\F16F7"}.mdi-movie-minus-outline::before{content:"\F16F8"}.mdi-movie-off::before{content:"\F16F9"}.mdi-movie-off-outline::before{content:"\F16FA"}.mdi-movie-open::before{content:"\F0FCE"}.mdi-movie-open-check::before{content:"\F16FB"}.mdi-movie-open-check-outline::before{content:"\F16FC"}.mdi-movie-open-cog::before{content:"\F16FD"}.mdi-movie-open-cog-outline::before{content:"\F16FE"}.mdi-movie-open-edit::before{content:"\F16FF"}.mdi-movie-open-edit-outline::before{content:"\F1700"}.mdi-movie-open-minus::before{content:"\F1701"}.mdi-movie-open-minus-outline::before{content:"\F1702"}.mdi-movie-open-off::before{content:"\F1703"}.mdi-movie-open-off-outline::before{content:"\F1704"}.mdi-movie-open-outline::before{content:"\F0FCF"}.mdi-movie-open-play::before{content:"\F1705"}.mdi-movie-open-play-outline::before{content:"\F1706"}.mdi-movie-open-plus::before{content:"\F1707"}.mdi-movie-open-plus-outline::before{content:"\F1708"}.mdi-movie-open-remove::before{content:"\F1709"}.mdi-movie-open-remove-outline::before{content:"\F170A"}.mdi-movie-open-settings::before{content:"\F170B"}.mdi-movie-open-settings-outline::before{content:"\F170C"}.mdi-movie-open-star::before{content:"\F170D"}.mdi-movie-open-star-outline::before{content:"\F170E"}.mdi-movie-outline::before{content:"\F0DDD"}.mdi-movie-play::before{content:"\F170F"}.mdi-movie-play-outline::before{content:"\F1710"}.mdi-movie-plus::before{content:"\F1711"}.mdi-movie-plus-outline::before{content:"\F1712"}.mdi-movie-remove::before{content:"\F1713"}.mdi-movie-remove-outline::before{content:"\F1714"}.mdi-movie-roll::before{content:"\F07DE"}.mdi-movie-search::before{content:"\F11D2"}.mdi-movie-search-outline::before{content:"\F11D3"}.mdi-movie-settings::before{content:"\F1715"}.mdi-movie-settings-outline::before{content:"\F1716"}.mdi-movie-star::before{content:"\F1717"}.mdi-movie-star-outline::before{content:"\F1718"}.mdi-mower::before{content:"\F166F"}.mdi-mower-bag::before{content:"\F1670"}.mdi-mower-bag-on::before{content:"\F1B60"}.mdi-mower-on::before{content:"\F1B5F"}.mdi-muffin::before{content:"\F098C"}.mdi-multicast::before{content:"\F1893"}.mdi-multimedia::before{content:"\F1B97"}.mdi-multiplication::before{content:"\F0382"}.mdi-multiplication-box::before{content:"\F0383"}.mdi-mushroom::before{content:"\F07DF"}.mdi-mushroom-off::before{content:"\F13FA"}.mdi-mushroom-off-outline::before{content:"\F13FB"}.mdi-mushroom-outline::before{content:"\F07E0"}.mdi-music::before{content:"\F075A"}.mdi-music-accidental-double-flat::before{content:"\F0F69"}.mdi-music-accidental-double-sharp::before{content:"\F0F6A"}.mdi-music-accidental-flat::before{content:"\F0F6B"}.mdi-music-accidental-natural::before{content:"\F0F6C"}.mdi-music-accidental-sharp::before{content:"\F0F6D"}.mdi-music-box::before{content:"\F0384"}.mdi-music-box-multiple::before{content:"\F0333"}.mdi-music-box-multiple-outline::before{content:"\F0F04"}.mdi-music-box-outline::before{content:"\F0385"}.mdi-music-circle::before{content:"\F0386"}.mdi-music-circle-outline::before{content:"\F0AD4"}.mdi-music-clef-alto::before{content:"\F0F6E"}.mdi-music-clef-bass::before{content:"\F0F6F"}.mdi-music-clef-treble::before{content:"\F0F70"}.mdi-music-note::before{content:"\F0387"}.mdi-music-note-bluetooth::before{content:"\F05FE"}.mdi-music-note-bluetooth-off::before{content:"\F05FF"}.mdi-music-note-eighth::before{content:"\F0388"}.mdi-music-note-eighth-dotted::before{content:"\F0F71"}.mdi-music-note-half::before{content:"\F0389"}.mdi-music-note-half-dotted::before{content:"\F0F72"}.mdi-music-note-minus::before{content:"\F1B89"}.mdi-music-note-off::before{content:"\F038A"}.mdi-music-note-off-outline::before{content:"\F0F73"}.mdi-music-note-outline::before{content:"\F0F74"}.mdi-music-note-plus::before{content:"\F0DDE"}.mdi-music-note-quarter::before{content:"\F038B"}.mdi-music-note-quarter-dotted::before{content:"\F0F75"}.mdi-music-note-sixteenth::before{content:"\F038C"}.mdi-music-note-sixteenth-dotted::before{content:"\F0F76"}.mdi-music-note-whole::before{content:"\F038D"}.mdi-music-note-whole-dotted::before{content:"\F0F77"}.mdi-music-off::before{content:"\F075B"}.mdi-music-rest-eighth::before{content:"\F0F78"}.mdi-music-rest-half::before{content:"\F0F79"}.mdi-music-rest-quarter::before{content:"\F0F7A"}.mdi-music-rest-sixteenth::before{content:"\F0F7B"}.mdi-music-rest-whole::before{content:"\F0F7C"}.mdi-mustache::before{content:"\F15DE"}.mdi-nail::before{content:"\F0DDF"}.mdi-nas::before{content:"\F08F3"}.mdi-nativescript::before{content:"\F0880"}.mdi-nature::before{content:"\F038E"}.mdi-nature-outline::before{content:"\F1C71"}.mdi-nature-people::before{content:"\F038F"}.mdi-nature-people-outline::before{content:"\F1C72"}.mdi-navigation::before{content:"\F0390"}.mdi-navigation-outline::before{content:"\F1607"}.mdi-navigation-variant::before{content:"\F18F0"}.mdi-navigation-variant-outline::before{content:"\F18F1"}.mdi-near-me::before{content:"\F05CD"}.mdi-necklace::before{content:"\F0F0B"}.mdi-needle::before{content:"\F0391"}.mdi-needle-off::before{content:"\F19D2"}.mdi-netflix::before{content:"\F0746"}.mdi-network::before{content:"\F06F3"}.mdi-network-off::before{content:"\F0C9B"}.mdi-network-off-outline::before{content:"\F0C9C"}.mdi-network-outline::before{content:"\F0C9D"}.mdi-network-pos::before{content:"\F1ACB"}.mdi-network-strength-1::before{content:"\F08F4"}.mdi-network-strength-1-alert::before{content:"\F08F5"}.mdi-network-strength-2::before{content:"\F08F6"}.mdi-network-strength-2-alert::before{content:"\F08F7"}.mdi-network-strength-3::before{content:"\F08F8"}.mdi-network-strength-3-alert::before{content:"\F08F9"}.mdi-network-strength-4::before{content:"\F08FA"}.mdi-network-strength-4-alert::before{content:"\F08FB"}.mdi-network-strength-4-cog::before{content:"\F191A"}.mdi-network-strength-off::before{content:"\F08FC"}.mdi-network-strength-off-outline::before{content:"\F08FD"}.mdi-network-strength-outline::before{content:"\F08FE"}.mdi-new-box::before{content:"\F0394"}.mdi-newspaper::before{content:"\F0395"}.mdi-newspaper-check::before{content:"\F1943"}.mdi-newspaper-minus::before{content:"\F0F0C"}.mdi-newspaper-plus::before{content:"\F0F0D"}.mdi-newspaper-remove::before{content:"\F1944"}.mdi-newspaper-variant::before{content:"\F1001"}.mdi-newspaper-variant-multiple::before{content:"\F1002"}.mdi-newspaper-variant-multiple-outline::before{content:"\F1003"}.mdi-newspaper-variant-outline::before{content:"\F1004"}.mdi-nfc::before{content:"\F0396"}.mdi-nfc-search-variant::before{content:"\F0E53"}.mdi-nfc-tap::before{content:"\F0397"}.mdi-nfc-variant::before{content:"\F0398"}.mdi-nfc-variant-off::before{content:"\F0E54"}.mdi-ninja::before{content:"\F0774"}.mdi-nintendo-game-boy::before{content:"\F1393"}.mdi-nintendo-switch::before{content:"\F07E1"}.mdi-nintendo-wii::before{content:"\F05AB"}.mdi-nintendo-wiiu::before{content:"\F072D"}.mdi-nix::before{content:"\F1105"}.mdi-nodejs::before{content:"\F0399"}.mdi-noodles::before{content:"\F117E"}.mdi-not-equal::before{content:"\F098D"}.mdi-not-equal-variant::before{content:"\F098E"}.mdi-note::before{content:"\F039A"}.mdi-note-alert::before{content:"\F177D"}.mdi-note-alert-outline::before{content:"\F177E"}.mdi-note-check::before{content:"\F177F"}.mdi-note-check-outline::before{content:"\F1780"}.mdi-note-edit::before{content:"\F1781"}.mdi-note-edit-outline::before{content:"\F1782"}.mdi-note-minus::before{content:"\F164F"}.mdi-note-minus-outline::before{content:"\F1650"}.mdi-note-multiple::before{content:"\F06B8"}.mdi-note-multiple-outline::before{content:"\F06B9"}.mdi-note-off::before{content:"\F1783"}.mdi-note-off-outline::before{content:"\F1784"}.mdi-note-outline::before{content:"\F039B"}.mdi-note-plus::before{content:"\F039C"}.mdi-note-plus-outline::before{content:"\F039D"}.mdi-note-remove::before{content:"\F1651"}.mdi-note-remove-outline::before{content:"\F1652"}.mdi-note-search::before{content:"\F1653"}.mdi-note-search-outline::before{content:"\F1654"}.mdi-note-text::before{content:"\F039E"}.mdi-note-text-outline::before{content:"\F11D7"}.mdi-notebook::before{content:"\F082E"}.mdi-notebook-check::before{content:"\F14F5"}.mdi-notebook-check-outline::before{content:"\F14F6"}.mdi-notebook-edit::before{content:"\F14E7"}.mdi-notebook-edit-outline::before{content:"\F14E9"}.mdi-notebook-heart::before{content:"\F1A0B"}.mdi-notebook-heart-outline::before{content:"\F1A0C"}.mdi-notebook-minus::before{content:"\F1610"}.mdi-notebook-minus-outline::before{content:"\F1611"}.mdi-notebook-multiple::before{content:"\F0E55"}.mdi-notebook-outline::before{content:"\F0EBF"}.mdi-notebook-plus::before{content:"\F1612"}.mdi-notebook-plus-outline::before{content:"\F1613"}.mdi-notebook-remove::before{content:"\F1614"}.mdi-notebook-remove-outline::before{content:"\F1615"}.mdi-notification-clear-all::before{content:"\F039F"}.mdi-npm::before{content:"\F06F7"}.mdi-nuke::before{content:"\F06A4"}.mdi-null::before{content:"\F07E2"}.mdi-numeric::before{content:"\F03A0"}.mdi-numeric-0::before{content:"\F0B39"}.mdi-numeric-0-box::before{content:"\F03A1"}.mdi-numeric-0-box-multiple::before{content:"\F0F0E"}.mdi-numeric-0-box-multiple-outline::before{content:"\F03A2"}.mdi-numeric-0-box-outline::before{content:"\F03A3"}.mdi-numeric-0-circle::before{content:"\F0C9E"}.mdi-numeric-0-circle-outline::before{content:"\F0C9F"}.mdi-numeric-1::before{content:"\F0B3A"}.mdi-numeric-1-box::before{content:"\F03A4"}.mdi-numeric-1-box-multiple::before{content:"\F0F0F"}.mdi-numeric-1-box-multiple-outline::before{content:"\F03A5"}.mdi-numeric-1-box-outline::before{content:"\F03A6"}.mdi-numeric-1-circle::before{content:"\F0CA0"}.mdi-numeric-1-circle-outline::before{content:"\F0CA1"}.mdi-numeric-10::before{content:"\F0FE9"}.mdi-numeric-10-box::before{content:"\F0F7D"}.mdi-numeric-10-box-multiple::before{content:"\F0FEA"}.mdi-numeric-10-box-multiple-outline::before{content:"\F0FEB"}.mdi-numeric-10-box-outline::before{content:"\F0F7E"}.mdi-numeric-10-circle::before{content:"\F0FEC"}.mdi-numeric-10-circle-outline::before{content:"\F0FED"}.mdi-numeric-2::before{content:"\F0B3B"}.mdi-numeric-2-box::before{content:"\F03A7"}.mdi-numeric-2-box-multiple::before{content:"\F0F10"}.mdi-numeric-2-box-multiple-outline::before{content:"\F03A8"}.mdi-numeric-2-box-outline::before{content:"\F03A9"}.mdi-numeric-2-circle::before{content:"\F0CA2"}.mdi-numeric-2-circle-outline::before{content:"\F0CA3"}.mdi-numeric-3::before{content:"\F0B3C"}.mdi-numeric-3-box::before{content:"\F03AA"}.mdi-numeric-3-box-multiple::before{content:"\F0F11"}.mdi-numeric-3-box-multiple-outline::before{content:"\F03AB"}.mdi-numeric-3-box-outline::before{content:"\F03AC"}.mdi-numeric-3-circle::before{content:"\F0CA4"}.mdi-numeric-3-circle-outline::before{content:"\F0CA5"}.mdi-numeric-4::before{content:"\F0B3D"}.mdi-numeric-4-box::before{content:"\F03AD"}.mdi-numeric-4-box-multiple::before{content:"\F0F12"}.mdi-numeric-4-box-multiple-outline::before{content:"\F03B2"}.mdi-numeric-4-box-outline::before{content:"\F03AE"}.mdi-numeric-4-circle::before{content:"\F0CA6"}.mdi-numeric-4-circle-outline::before{content:"\F0CA7"}.mdi-numeric-5::before{content:"\F0B3E"}.mdi-numeric-5-box::before{content:"\F03B1"}.mdi-numeric-5-box-multiple::before{content:"\F0F13"}.mdi-numeric-5-box-multiple-outline::before{content:"\F03AF"}.mdi-numeric-5-box-outline::before{content:"\F03B0"}.mdi-numeric-5-circle::before{content:"\F0CA8"}.mdi-numeric-5-circle-outline::before{content:"\F0CA9"}.mdi-numeric-6::before{content:"\F0B3F"}.mdi-numeric-6-box::before{content:"\F03B3"}.mdi-numeric-6-box-multiple::before{content:"\F0F14"}.mdi-numeric-6-box-multiple-outline::before{content:"\F03B4"}.mdi-numeric-6-box-outline::before{content:"\F03B5"}.mdi-numeric-6-circle::before{content:"\F0CAA"}.mdi-numeric-6-circle-outline::before{content:"\F0CAB"}.mdi-numeric-7::before{content:"\F0B40"}.mdi-numeric-7-box::before{content:"\F03B6"}.mdi-numeric-7-box-multiple::before{content:"\F0F15"}.mdi-numeric-7-box-multiple-outline::before{content:"\F03B7"}.mdi-numeric-7-box-outline::before{content:"\F03B8"}.mdi-numeric-7-circle::before{content:"\F0CAC"}.mdi-numeric-7-circle-outline::before{content:"\F0CAD"}.mdi-numeric-8::before{content:"\F0B41"}.mdi-numeric-8-box::before{content:"\F03B9"}.mdi-numeric-8-box-multiple::before{content:"\F0F16"}.mdi-numeric-8-box-multiple-outline::before{content:"\F03BA"}.mdi-numeric-8-box-outline::before{content:"\F03BB"}.mdi-numeric-8-circle::before{content:"\F0CAE"}.mdi-numeric-8-circle-outline::before{content:"\F0CAF"}.mdi-numeric-9::before{content:"\F0B42"}.mdi-numeric-9-box::before{content:"\F03BC"}.mdi-numeric-9-box-multiple::before{content:"\F0F17"}.mdi-numeric-9-box-multiple-outline::before{content:"\F03BD"}.mdi-numeric-9-box-outline::before{content:"\F03BE"}.mdi-numeric-9-circle::before{content:"\F0CB0"}.mdi-numeric-9-circle-outline::before{content:"\F0CB1"}.mdi-numeric-9-plus::before{content:"\F0FEE"}.mdi-numeric-9-plus-box::before{content:"\F03BF"}.mdi-numeric-9-plus-box-multiple::before{content:"\F0F18"}.mdi-numeric-9-plus-box-multiple-outline::before{content:"\F03C0"}.mdi-numeric-9-plus-box-outline::before{content:"\F03C1"}.mdi-numeric-9-plus-circle::before{content:"\F0CB2"}.mdi-numeric-9-plus-circle-outline::before{content:"\F0CB3"}.mdi-numeric-negative-1::before{content:"\F1052"}.mdi-numeric-off::before{content:"\F19D3"}.mdi-numeric-positive-1::before{content:"\F15CB"}.mdi-nut::before{content:"\F06F8"}.mdi-nutrition::before{content:"\F03C2"}.mdi-nuxt::before{content:"\F1106"}.mdi-oar::before{content:"\F067C"}.mdi-ocarina::before{content:"\F0DE0"}.mdi-oci::before{content:"\F12E9"}.mdi-ocr::before{content:"\F113A"}.mdi-octagon::before{content:"\F03C3"}.mdi-octagon-outline::before{content:"\F03C4"}.mdi-octagram::before{content:"\F06F9"}.mdi-octagram-edit::before{content:"\F1C34"}.mdi-octagram-edit-outline::before{content:"\F1C35"}.mdi-octagram-minus::before{content:"\F1C36"}.mdi-octagram-minus-outline::before{content:"\F1C37"}.mdi-octagram-outline::before{content:"\F0775"}.mdi-octagram-plus::before{content:"\F1C38"}.mdi-octagram-plus-outline::before{content:"\F1C39"}.mdi-octahedron::before{content:"\F1950"}.mdi-octahedron-off::before{content:"\F1951"}.mdi-odnoklassniki::before{content:"\F03C5"}.mdi-offer::before{content:"\F121B"}.mdi-office-building::before{content:"\F0991"}.mdi-office-building-cog::before{content:"\F1949"}.mdi-office-building-cog-outline::before{content:"\F194A"}.mdi-office-building-marker::before{content:"\F1520"}.mdi-office-building-marker-outline::before{content:"\F1521"}.mdi-office-building-minus::before{content:"\F1BAA"}.mdi-office-building-minus-outline::before{content:"\F1BAB"}.mdi-office-building-outline::before{content:"\F151F"}.mdi-office-building-plus::before{content:"\F1BA8"}.mdi-office-building-plus-outline::before{content:"\F1BA9"}.mdi-office-building-remove::before{content:"\F1BAC"}.mdi-office-building-remove-outline::before{content:"\F1BAD"}.mdi-oil::before{content:"\F03C7"}.mdi-oil-lamp::before{content:"\F0F19"}.mdi-oil-level::before{content:"\F1053"}.mdi-oil-temperature::before{content:"\F0FF8"}.mdi-om::before{content:"\F0973"}.mdi-omega::before{content:"\F03C9"}.mdi-one-up::before{content:"\F0BAD"}.mdi-onepassword::before{content:"\F0881"}.mdi-opacity::before{content:"\F05CC"}.mdi-open-in-app::before{content:"\F03CB"}.mdi-open-in-new::before{content:"\F03CC"}.mdi-open-source-initiative::before{content:"\F0BAE"}.mdi-openid::before{content:"\F03CD"}.mdi-opera::before{content:"\F03CE"}.mdi-orbit::before{content:"\F0018"}.mdi-orbit-variant::before{content:"\F15DB"}.mdi-order-alphabetical-ascending::before{content:"\F020D"}.mdi-order-alphabetical-descending::before{content:"\F0D07"}.mdi-order-bool-ascending::before{content:"\F02BE"}.mdi-order-bool-ascending-variant::before{content:"\F098F"}.mdi-order-bool-descending::before{content:"\F1384"}.mdi-order-bool-descending-variant::before{content:"\F0990"}.mdi-order-numeric-ascending::before{content:"\F0545"}.mdi-order-numeric-descending::before{content:"\F0546"}.mdi-origin::before{content:"\F0B43"}.mdi-ornament::before{content:"\F03CF"}.mdi-ornament-variant::before{content:"\F03D0"}.mdi-outdoor-lamp::before{content:"\F1054"}.mdi-overscan::before{content:"\F1005"}.mdi-owl::before{content:"\F03D2"}.mdi-pac-man::before{content:"\F0BAF"}.mdi-package::before{content:"\F03D3"}.mdi-package-check::before{content:"\F1B51"}.mdi-package-down::before{content:"\F03D4"}.mdi-package-up::before{content:"\F03D5"}.mdi-package-variant::before{content:"\F03D6"}.mdi-package-variant-closed::before{content:"\F03D7"}.mdi-package-variant-closed-check::before{content:"\F1B52"}.mdi-package-variant-closed-minus::before{content:"\F19D4"}.mdi-package-variant-closed-plus::before{content:"\F19D5"}.mdi-package-variant-closed-remove::before{content:"\F19D6"}.mdi-package-variant-minus::before{content:"\F19D7"}.mdi-package-variant-plus::before{content:"\F19D8"}.mdi-package-variant-remove::before{content:"\F19D9"}.mdi-page-first::before{content:"\F0600"}.mdi-page-last::before{content:"\F0601"}.mdi-page-layout-body::before{content:"\F06FA"}.mdi-page-layout-footer::before{content:"\F06FB"}.mdi-page-layout-header::before{content:"\F06FC"}.mdi-page-layout-header-footer::before{content:"\F0F7F"}.mdi-page-layout-sidebar-left::before{content:"\F06FD"}.mdi-page-layout-sidebar-right::before{content:"\F06FE"}.mdi-page-next::before{content:"\F0BB0"}.mdi-page-next-outline::before{content:"\F0BB1"}.mdi-page-previous::before{content:"\F0BB2"}.mdi-page-previous-outline::before{content:"\F0BB3"}.mdi-pail::before{content:"\F1417"}.mdi-pail-minus::before{content:"\F1437"}.mdi-pail-minus-outline::before{content:"\F143C"}.mdi-pail-off::before{content:"\F1439"}.mdi-pail-off-outline::before{content:"\F143E"}.mdi-pail-outline::before{content:"\F143A"}.mdi-pail-plus::before{content:"\F1436"}.mdi-pail-plus-outline::before{content:"\F143B"}.mdi-pail-remove::before{content:"\F1438"}.mdi-pail-remove-outline::before{content:"\F143D"}.mdi-palette::before{content:"\F03D8"}.mdi-palette-advanced::before{content:"\F03D9"}.mdi-palette-outline::before{content:"\F0E0C"}.mdi-palette-swatch::before{content:"\F08B5"}.mdi-palette-swatch-outline::before{content:"\F135C"}.mdi-palette-swatch-variant::before{content:"\F195A"}.mdi-palm-tree::before{content:"\F1055"}.mdi-pan::before{content:"\F0BB4"}.mdi-pan-bottom-left::before{content:"\F0BB5"}.mdi-pan-bottom-right::before{content:"\F0BB6"}.mdi-pan-down::before{content:"\F0BB7"}.mdi-pan-horizontal::before{content:"\F0BB8"}.mdi-pan-left::before{content:"\F0BB9"}.mdi-pan-right::before{content:"\F0BBA"}.mdi-pan-top-left::before{content:"\F0BBB"}.mdi-pan-top-right::before{content:"\F0BBC"}.mdi-pan-up::before{content:"\F0BBD"}.mdi-pan-vertical::before{content:"\F0BBE"}.mdi-panda::before{content:"\F03DA"}.mdi-pandora::before{content:"\F03DB"}.mdi-panorama::before{content:"\F03DC"}.mdi-panorama-fisheye::before{content:"\F03DD"}.mdi-panorama-horizontal::before{content:"\F1928"}.mdi-panorama-horizontal-outline::before{content:"\F03DE"}.mdi-panorama-outline::before{content:"\F198C"}.mdi-panorama-sphere::before{content:"\F198D"}.mdi-panorama-sphere-outline::before{content:"\F198E"}.mdi-panorama-variant::before{content:"\F198F"}.mdi-panorama-variant-outline::before{content:"\F1990"}.mdi-panorama-vertical::before{content:"\F1929"}.mdi-panorama-vertical-outline::before{content:"\F03DF"}.mdi-panorama-wide-angle::before{content:"\F195F"}.mdi-panorama-wide-angle-outline::before{content:"\F03E0"}.mdi-paper-cut-vertical::before{content:"\F03E1"}.mdi-paper-roll::before{content:"\F1157"}.mdi-paper-roll-outline::before{content:"\F1158"}.mdi-paperclip::before{content:"\F03E2"}.mdi-paperclip-check::before{content:"\F1AC6"}.mdi-paperclip-lock::before{content:"\F19DA"}.mdi-paperclip-minus::before{content:"\F1AC7"}.mdi-paperclip-off::before{content:"\F1AC8"}.mdi-paperclip-plus::before{content:"\F1AC9"}.mdi-paperclip-remove::before{content:"\F1ACA"}.mdi-parachute::before{content:"\F0CB4"}.mdi-parachute-outline::before{content:"\F0CB5"}.mdi-paragliding::before{content:"\F1745"}.mdi-parking::before{content:"\F03E3"}.mdi-party-popper::before{content:"\F1056"}.mdi-passport::before{content:"\F07E3"}.mdi-passport-alert::before{content:"\F1CB8"}.mdi-passport-biometric::before{content:"\F0DE1"}.mdi-passport-cancel::before{content:"\F1CB9"}.mdi-passport-check::before{content:"\F1CBA"}.mdi-passport-minus::before{content:"\F1CBB"}.mdi-passport-plus::before{content:"\F1CBC"}.mdi-passport-remove::before{content:"\F1CBD"}.mdi-pasta::before{content:"\F1160"}.mdi-patio-heater::before{content:"\F0F80"}.mdi-patreon::before{content:"\F0882"}.mdi-pause::before{content:"\F03E4"}.mdi-pause-box::before{content:"\F00BC"}.mdi-pause-box-outline::before{content:"\F1B7A"}.mdi-pause-circle::before{content:"\F03E5"}.mdi-pause-circle-outline::before{content:"\F03E6"}.mdi-pause-octagon::before{content:"\F03E7"}.mdi-pause-octagon-outline::before{content:"\F03E8"}.mdi-paw::before{content:"\F03E9"}.mdi-paw-off::before{content:"\F0657"}.mdi-paw-off-outline::before{content:"\F1676"}.mdi-paw-outline::before{content:"\F1675"}.mdi-peace::before{content:"\F0884"}.mdi-peanut::before{content:"\F0FFC"}.mdi-peanut-off::before{content:"\F0FFD"}.mdi-peanut-off-outline::before{content:"\F0FFF"}.mdi-peanut-outline::before{content:"\F0FFE"}.mdi-pen::before{content:"\F03EA"}.mdi-pen-lock::before{content:"\F0DE2"}.mdi-pen-minus::before{content:"\F0DE3"}.mdi-pen-off::before{content:"\F0DE4"}.mdi-pen-plus::before{content:"\F0DE5"}.mdi-pen-remove::before{content:"\F0DE6"}.mdi-pencil::before{content:"\F03EB"}.mdi-pencil-box::before{content:"\F03EC"}.mdi-pencil-box-multiple::before{content:"\F1144"}.mdi-pencil-box-multiple-outline::before{content:"\F1145"}.mdi-pencil-box-outline::before{content:"\F03ED"}.mdi-pencil-circle::before{content:"\F06FF"}.mdi-pencil-circle-outline::before{content:"\F0776"}.mdi-pencil-lock::before{content:"\F03EE"}.mdi-pencil-lock-outline::before{content:"\F0DE7"}.mdi-pencil-minus::before{content:"\F0DE8"}.mdi-pencil-minus-outline::before{content:"\F0DE9"}.mdi-pencil-off::before{content:"\F03EF"}.mdi-pencil-off-outline::before{content:"\F0DEA"}.mdi-pencil-outline::before{content:"\F0CB6"}.mdi-pencil-plus::before{content:"\F0DEB"}.mdi-pencil-plus-outline::before{content:"\F0DEC"}.mdi-pencil-remove::before{content:"\F0DED"}.mdi-pencil-remove-outline::before{content:"\F0DEE"}.mdi-pencil-ruler::before{content:"\F1353"}.mdi-pencil-ruler-outline::before{content:"\F1C11"}.mdi-penguin::before{content:"\F0EC0"}.mdi-pentagon::before{content:"\F0701"}.mdi-pentagon-outline::before{content:"\F0700"}.mdi-pentagram::before{content:"\F1667"}.mdi-percent::before{content:"\F03F0"}.mdi-percent-box::before{content:"\F1A02"}.mdi-percent-box-outline::before{content:"\F1A03"}.mdi-percent-circle::before{content:"\F1A04"}.mdi-percent-circle-outline::before{content:"\F1A05"}.mdi-percent-outline::before{content:"\F1278"}.mdi-periodic-table::before{content:"\F08B6"}.mdi-perspective-less::before{content:"\F0D23"}.mdi-perspective-more::before{content:"\F0D24"}.mdi-ph::before{content:"\F17C5"}.mdi-phone::before{content:"\F03F2"}.mdi-phone-alert::before{content:"\F0F1A"}.mdi-phone-alert-outline::before{content:"\F118E"}.mdi-phone-bluetooth::before{content:"\F03F3"}.mdi-phone-bluetooth-outline::before{content:"\F118F"}.mdi-phone-cancel::before{content:"\F10BC"}.mdi-phone-cancel-outline::before{content:"\F1190"}.mdi-phone-check::before{content:"\F11A9"}.mdi-phone-check-outline::before{content:"\F11AA"}.mdi-phone-classic::before{content:"\F0602"}.mdi-phone-classic-off::before{content:"\F1279"}.mdi-phone-clock::before{content:"\F19DB"}.mdi-phone-dial::before{content:"\F1559"}.mdi-phone-dial-outline::before{content:"\F155A"}.mdi-phone-forward::before{content:"\F03F4"}.mdi-phone-forward-outline::before{content:"\F1191"}.mdi-phone-hangup::before{content:"\F03F5"}.mdi-phone-hangup-outline::before{content:"\F1192"}.mdi-phone-in-talk::before{content:"\F03F6"}.mdi-phone-in-talk-outline::before{content:"\F1182"}.mdi-phone-incoming::before{content:"\F03F7"}.mdi-phone-incoming-outgoing::before{content:"\F1B3F"}.mdi-phone-incoming-outgoing-outline::before{content:"\F1B40"}.mdi-phone-incoming-outline::before{content:"\F1193"}.mdi-phone-lock::before{content:"\F03F8"}.mdi-phone-lock-outline::before{content:"\F1194"}.mdi-phone-log::before{content:"\F03F9"}.mdi-phone-log-outline::before{content:"\F1195"}.mdi-phone-message::before{content:"\F1196"}.mdi-phone-message-outline::before{content:"\F1197"}.mdi-phone-minus::before{content:"\F0658"}.mdi-phone-minus-outline::before{content:"\F1198"}.mdi-phone-missed::before{content:"\F03FA"}.mdi-phone-missed-outline::before{content:"\F11A5"}.mdi-phone-off::before{content:"\F0DEF"}.mdi-phone-off-outline::before{content:"\F11A6"}.mdi-phone-outgoing::before{content:"\F03FB"}.mdi-phone-outgoing-outline::before{content:"\F1199"}.mdi-phone-outline::before{content:"\F0DF0"}.mdi-phone-paused::before{content:"\F03FC"}.mdi-phone-paused-outline::before{content:"\F119A"}.mdi-phone-plus::before{content:"\F0659"}.mdi-phone-plus-outline::before{content:"\F119B"}.mdi-phone-refresh::before{content:"\F1993"}.mdi-phone-refresh-outline::before{content:"\F1994"}.mdi-phone-remove::before{content:"\F152F"}.mdi-phone-remove-outline::before{content:"\F1530"}.mdi-phone-return::before{content:"\F082F"}.mdi-phone-return-outline::before{content:"\F119C"}.mdi-phone-ring::before{content:"\F11AB"}.mdi-phone-ring-outline::before{content:"\F11AC"}.mdi-phone-rotate-landscape::before{content:"\F0885"}.mdi-phone-rotate-portrait::before{content:"\F0886"}.mdi-phone-settings::before{content:"\F03FD"}.mdi-phone-settings-outline::before{content:"\F119D"}.mdi-phone-sync::before{content:"\F1995"}.mdi-phone-sync-outline::before{content:"\F1996"}.mdi-phone-voip::before{content:"\F03FE"}.mdi-pi::before{content:"\F03FF"}.mdi-pi-box::before{content:"\F0400"}.mdi-pi-hole::before{content:"\F0DF1"}.mdi-piano::before{content:"\F067D"}.mdi-piano-off::before{content:"\F0698"}.mdi-pickaxe::before{content:"\F08B7"}.mdi-picture-in-picture-bottom-right::before{content:"\F0E57"}.mdi-picture-in-picture-bottom-right-outline::before{content:"\F0E58"}.mdi-picture-in-picture-top-right::before{content:"\F0E59"}.mdi-picture-in-picture-top-right-outline::before{content:"\F0E5A"}.mdi-pier::before{content:"\F0887"}.mdi-pier-crane::before{content:"\F0888"}.mdi-pig::before{content:"\F0401"}.mdi-pig-variant::before{content:"\F1006"}.mdi-pig-variant-outline::before{content:"\F1678"}.mdi-piggy-bank::before{content:"\F1007"}.mdi-piggy-bank-outline::before{content:"\F1679"}.mdi-pill::before{content:"\F0402"}.mdi-pill-multiple::before{content:"\F1B4C"}.mdi-pill-off::before{content:"\F1A5C"}.mdi-pillar::before{content:"\F0702"}.mdi-pin::before{content:"\F0403"}.mdi-pin-off::before{content:"\F0404"}.mdi-pin-off-outline::before{content:"\F0930"}.mdi-pin-outline::before{content:"\F0931"}.mdi-pine-tree::before{content:"\F0405"}.mdi-pine-tree-box::before{content:"\F0406"}.mdi-pine-tree-fire::before{content:"\F141A"}.mdi-pine-tree-variant::before{content:"\F1C73"}.mdi-pine-tree-variant-outline::before{content:"\F1C74"}.mdi-pinterest::before{content:"\F0407"}.mdi-pinwheel::before{content:"\F0AD5"}.mdi-pinwheel-outline::before{content:"\F0AD6"}.mdi-pipe::before{content:"\F07E5"}.mdi-pipe-disconnected::before{content:"\F07E6"}.mdi-pipe-leak::before{content:"\F0889"}.mdi-pipe-valve::before{content:"\F184D"}.mdi-pipe-wrench::before{content:"\F1354"}.mdi-pirate::before{content:"\F0A08"}.mdi-pistol::before{content:"\F0703"}.mdi-piston::before{content:"\F088A"}.mdi-pitchfork::before{content:"\F1553"}.mdi-pizza::before{content:"\F0409"}.mdi-plane-car::before{content:"\F1AFF"}.mdi-plane-train::before{content:"\F1B00"}.mdi-play::before{content:"\F040A"}.mdi-play-box::before{content:"\F127A"}.mdi-play-box-edit-outline::before{content:"\F1C3A"}.mdi-play-box-lock::before{content:"\F1A16"}.mdi-play-box-lock-open::before{content:"\F1A17"}.mdi-play-box-lock-open-outline::before{content:"\F1A18"}.mdi-play-box-lock-outline::before{content:"\F1A19"}.mdi-play-box-multiple::before{content:"\F0D19"}.mdi-play-box-multiple-outline::before{content:"\F13E6"}.mdi-play-box-outline::before{content:"\F040B"}.mdi-play-circle::before{content:"\F040C"}.mdi-play-circle-outline::before{content:"\F040D"}.mdi-play-network::before{content:"\F088B"}.mdi-play-network-outline::before{content:"\F0CB7"}.mdi-play-outline::before{content:"\F0F1B"}.mdi-play-pause::before{content:"\F040E"}.mdi-play-protected-content::before{content:"\F040F"}.mdi-play-speed::before{content:"\F08FF"}.mdi-playlist-check::before{content:"\F05C7"}.mdi-playlist-edit::before{content:"\F0900"}.mdi-playlist-minus::before{content:"\F0410"}.mdi-playlist-music::before{content:"\F0CB8"}.mdi-playlist-music-outline::before{content:"\F0CB9"}.mdi-playlist-play::before{content:"\F0411"}.mdi-playlist-plus::before{content:"\F0412"}.mdi-playlist-remove::before{content:"\F0413"}.mdi-playlist-star::before{content:"\F0DF2"}.mdi-plex::before{content:"\F06BA"}.mdi-pliers::before{content:"\F19A4"}.mdi-plus::before{content:"\F0415"}.mdi-plus-box::before{content:"\F0416"}.mdi-plus-box-multiple::before{content:"\F0334"}.mdi-plus-box-multiple-outline::before{content:"\F1143"}.mdi-plus-box-outline::before{content:"\F0704"}.mdi-plus-circle::before{content:"\F0417"}.mdi-plus-circle-multiple::before{content:"\F034C"}.mdi-plus-circle-multiple-outline::before{content:"\F0418"}.mdi-plus-circle-outline::before{content:"\F0419"}.mdi-plus-lock::before{content:"\F1A5D"}.mdi-plus-lock-open::before{content:"\F1A5E"}.mdi-plus-minus::before{content:"\F0992"}.mdi-plus-minus-box::before{content:"\F0993"}.mdi-plus-minus-variant::before{content:"\F14C9"}.mdi-plus-network::before{content:"\F041A"}.mdi-plus-network-outline::before{content:"\F0CBA"}.mdi-plus-outline::before{content:"\F0705"}.mdi-plus-thick::before{content:"\F11EC"}.mdi-pocket::before{content:"\F1CBE"}.mdi-podcast::before{content:"\F0994"}.mdi-podium::before{content:"\F0D25"}.mdi-podium-bronze::before{content:"\F0D26"}.mdi-podium-gold::before{content:"\F0D27"}.mdi-podium-silver::before{content:"\F0D28"}.mdi-point-of-sale::before{content:"\F0D92"}.mdi-pokeball::before{content:"\F041D"}.mdi-pokemon-go::before{content:"\F0A09"}.mdi-poker-chip::before{content:"\F0830"}.mdi-polaroid::before{content:"\F041E"}.mdi-police-badge::before{content:"\F1167"}.mdi-police-badge-outline::before{content:"\F1168"}.mdi-police-station::before{content:"\F1839"}.mdi-poll::before{content:"\F041F"}.mdi-polo::before{content:"\F14C3"}.mdi-polymer::before{content:"\F0421"}.mdi-pool::before{content:"\F0606"}.mdi-pool-thermometer::before{content:"\F1A5F"}.mdi-popcorn::before{content:"\F0422"}.mdi-post::before{content:"\F1008"}.mdi-post-lamp::before{content:"\F1A60"}.mdi-post-outline::before{content:"\F1009"}.mdi-postage-stamp::before{content:"\F0CBB"}.mdi-pot::before{content:"\F02E5"}.mdi-pot-mix::before{content:"\F065B"}.mdi-pot-mix-outline::before{content:"\F0677"}.mdi-pot-outline::before{content:"\F02FF"}.mdi-pot-steam::before{content:"\F065A"}.mdi-pot-steam-outline::before{content:"\F0326"}.mdi-pound::before{content:"\F0423"}.mdi-pound-box::before{content:"\F0424"}.mdi-pound-box-outline::before{content:"\F117F"}.mdi-power::before{content:"\F0425"}.mdi-power-cycle::before{content:"\F0901"}.mdi-power-off::before{content:"\F0902"}.mdi-power-on::before{content:"\F0903"}.mdi-power-plug::before{content:"\F06A5"}.mdi-power-plug-battery::before{content:"\F1C3B"}.mdi-power-plug-battery-outline::before{content:"\F1C3C"}.mdi-power-plug-off::before{content:"\F06A6"}.mdi-power-plug-off-outline::before{content:"\F1424"}.mdi-power-plug-outline::before{content:"\F1425"}.mdi-power-settings::before{content:"\F0426"}.mdi-power-sleep::before{content:"\F0904"}.mdi-power-socket::before{content:"\F0427"}.mdi-power-socket-au::before{content:"\F0905"}.mdi-power-socket-ch::before{content:"\F0FB3"}.mdi-power-socket-de::before{content:"\F1107"}.mdi-power-socket-eu::before{content:"\F07E7"}.mdi-power-socket-fr::before{content:"\F1108"}.mdi-power-socket-it::before{content:"\F14FF"}.mdi-power-socket-jp::before{content:"\F1109"}.mdi-power-socket-uk::before{content:"\F07E8"}.mdi-power-socket-us::before{content:"\F07E9"}.mdi-power-standby::before{content:"\F0906"}.mdi-powershell::before{content:"\F0A0A"}.mdi-prescription::before{content:"\F0706"}.mdi-presentation::before{content:"\F0428"}.mdi-presentation-play::before{content:"\F0429"}.mdi-pretzel::before{content:"\F1562"}.mdi-printer::before{content:"\F042A"}.mdi-printer-3d::before{content:"\F042B"}.mdi-printer-3d-nozzle::before{content:"\F0E5B"}.mdi-printer-3d-nozzle-alert::before{content:"\F11C0"}.mdi-printer-3d-nozzle-alert-outline::before{content:"\F11C1"}.mdi-printer-3d-nozzle-heat::before{content:"\F18B8"}.mdi-printer-3d-nozzle-heat-outline::before{content:"\F18B9"}.mdi-printer-3d-nozzle-off::before{content:"\F1B19"}.mdi-printer-3d-nozzle-off-outline::before{content:"\F1B1A"}.mdi-printer-3d-nozzle-outline::before{content:"\F0E5C"}.mdi-printer-3d-off::before{content:"\F1B0E"}.mdi-printer-alert::before{content:"\F042C"}.mdi-printer-check::before{content:"\F1146"}.mdi-printer-eye::before{content:"\F1458"}.mdi-printer-off::before{content:"\F0E5D"}.mdi-printer-off-outline::before{content:"\F1785"}.mdi-printer-outline::before{content:"\F1786"}.mdi-printer-pos::before{content:"\F1057"}.mdi-printer-pos-alert::before{content:"\F1BBC"}.mdi-printer-pos-alert-outline::before{content:"\F1BBD"}.mdi-printer-pos-cancel::before{content:"\F1BBE"}.mdi-printer-pos-cancel-outline::before{content:"\F1BBF"}.mdi-printer-pos-check::before{content:"\F1BC0"}.mdi-printer-pos-check-outline::before{content:"\F1BC1"}.mdi-printer-pos-cog::before{content:"\F1BC2"}.mdi-printer-pos-cog-outline::before{content:"\F1BC3"}.mdi-printer-pos-edit::before{content:"\F1BC4"}.mdi-printer-pos-edit-outline::before{content:"\F1BC5"}.mdi-printer-pos-minus::before{content:"\F1BC6"}.mdi-printer-pos-minus-outline::before{content:"\F1BC7"}.mdi-printer-pos-network::before{content:"\F1BC8"}.mdi-printer-pos-network-outline::before{content:"\F1BC9"}.mdi-printer-pos-off::before{content:"\F1BCA"}.mdi-printer-pos-off-outline::before{content:"\F1BCB"}.mdi-printer-pos-outline::before{content:"\F1BCC"}.mdi-printer-pos-pause::before{content:"\F1BCD"}.mdi-printer-pos-pause-outline::before{content:"\F1BCE"}.mdi-printer-pos-play::before{content:"\F1BCF"}.mdi-printer-pos-play-outline::before{content:"\F1BD0"}.mdi-printer-pos-plus::before{content:"\F1BD1"}.mdi-printer-pos-plus-outline::before{content:"\F1BD2"}.mdi-printer-pos-refresh::before{content:"\F1BD3"}.mdi-printer-pos-refresh-outline::before{content:"\F1BD4"}.mdi-printer-pos-remove::before{content:"\F1BD5"}.mdi-printer-pos-remove-outline::before{content:"\F1BD6"}.mdi-printer-pos-star::before{content:"\F1BD7"}.mdi-printer-pos-star-outline::before{content:"\F1BD8"}.mdi-printer-pos-stop::before{content:"\F1BD9"}.mdi-printer-pos-stop-outline::before{content:"\F1BDA"}.mdi-printer-pos-sync::before{content:"\F1BDB"}.mdi-printer-pos-sync-outline::before{content:"\F1BDC"}.mdi-printer-pos-wrench::before{content:"\F1BDD"}.mdi-printer-pos-wrench-outline::before{content:"\F1BDE"}.mdi-printer-search::before{content:"\F1457"}.mdi-printer-settings::before{content:"\F0707"}.mdi-printer-wireless::before{content:"\F0A0B"}.mdi-priority-high::before{content:"\F0603"}.mdi-priority-low::before{content:"\F0604"}.mdi-professional-hexagon::before{content:"\F042D"}.mdi-progress-alert::before{content:"\F0CBC"}.mdi-progress-check::before{content:"\F0995"}.mdi-progress-clock::before{content:"\F0996"}.mdi-progress-close::before{content:"\F110A"}.mdi-progress-download::before{content:"\F0997"}.mdi-progress-helper::before{content:"\F1BA2"}.mdi-progress-pencil::before{content:"\F1787"}.mdi-progress-question::before{content:"\F1522"}.mdi-progress-star::before{content:"\F1788"}.mdi-progress-star-four-points::before{content:"\F1C3D"}.mdi-progress-tag::before{content:"\F1D0D"}.mdi-progress-upload::before{content:"\F0998"}.mdi-progress-wrench::before{content:"\F0CBD"}.mdi-projector::before{content:"\F042E"}.mdi-projector-off::before{content:"\F1A23"}.mdi-projector-screen::before{content:"\F042F"}.mdi-projector-screen-off::before{content:"\F180D"}.mdi-projector-screen-off-outline::before{content:"\F180E"}.mdi-projector-screen-outline::before{content:"\F1724"}.mdi-projector-screen-variant::before{content:"\F180F"}.mdi-projector-screen-variant-off::before{content:"\F1810"}.mdi-projector-screen-variant-off-outline::before{content:"\F1811"}.mdi-projector-screen-variant-outline::before{content:"\F1812"}.mdi-propane-tank::before{content:"\F1357"}.mdi-propane-tank-outline::before{content:"\F1358"}.mdi-protocol::before{content:"\F0FD8"}.mdi-publish::before{content:"\F06A7"}.mdi-publish-off::before{content:"\F1945"}.mdi-pulse::before{content:"\F0430"}.mdi-pump::before{content:"\F1402"}.mdi-pump-off::before{content:"\F1B22"}.mdi-pumpkin::before{content:"\F0BBF"}.mdi-purse::before{content:"\F0F1C"}.mdi-purse-outline::before{content:"\F0F1D"}.mdi-puzzle::before{content:"\F0431"}.mdi-puzzle-check::before{content:"\F1426"}.mdi-puzzle-check-outline::before{content:"\F1427"}.mdi-puzzle-edit::before{content:"\F14D3"}.mdi-puzzle-edit-outline::before{content:"\F14D9"}.mdi-puzzle-heart::before{content:"\F14D4"}.mdi-puzzle-heart-outline::before{content:"\F14DA"}.mdi-puzzle-minus::before{content:"\F14D1"}.mdi-puzzle-minus-outline::before{content:"\F14D7"}.mdi-puzzle-outline::before{content:"\F0A66"}.mdi-puzzle-plus::before{content:"\F14D0"}.mdi-puzzle-plus-outline::before{content:"\F14D6"}.mdi-puzzle-remove::before{content:"\F14D2"}.mdi-puzzle-remove-outline::before{content:"\F14D8"}.mdi-puzzle-star::before{content:"\F14D5"}.mdi-puzzle-star-outline::before{content:"\F14DB"}.mdi-pyramid::before{content:"\F1952"}.mdi-pyramid-off::before{content:"\F1953"}.mdi-qi::before{content:"\F0999"}.mdi-qqchat::before{content:"\F0605"}.mdi-qrcode::before{content:"\F0432"}.mdi-qrcode-edit::before{content:"\F08B8"}.mdi-qrcode-minus::before{content:"\F118C"}.mdi-qrcode-plus::before{content:"\F118B"}.mdi-qrcode-remove::before{content:"\F118D"}.mdi-qrcode-scan::before{content:"\F0433"}.mdi-quadcopter::before{content:"\F0434"}.mdi-quality-high::before{content:"\F0435"}.mdi-quality-low::before{content:"\F0A0C"}.mdi-quality-medium::before{content:"\F0A0D"}.mdi-queue-first-in-last-out::before{content:"\F1CAF"}.mdi-quora::before{content:"\F0D29"}.mdi-rabbit::before{content:"\F0907"}.mdi-rabbit-variant::before{content:"\F1A61"}.mdi-rabbit-variant-outline::before{content:"\F1A62"}.mdi-racing-helmet::before{content:"\F0D93"}.mdi-racquetball::before{content:"\F0D94"}.mdi-radar::before{content:"\F0437"}.mdi-radiator::before{content:"\F0438"}.mdi-radiator-disabled::before{content:"\F0AD7"}.mdi-radiator-off::before{content:"\F0AD8"}.mdi-radio::before{content:"\F0439"}.mdi-radio-am::before{content:"\F0CBE"}.mdi-radio-fm::before{content:"\F0CBF"}.mdi-radio-handheld::before{content:"\F043A"}.mdi-radio-off::before{content:"\F121C"}.mdi-radio-tower::before{content:"\F043B"}.mdi-radioactive::before{content:"\F043C"}.mdi-radioactive-circle::before{content:"\F185D"}.mdi-radioactive-circle-outline::before{content:"\F185E"}.mdi-radioactive-off::before{content:"\F0EC1"}.mdi-radiobox-blank::before{content:"\F043D"}.mdi-radiobox-indeterminate-variant::before{content:"\F1C5E"}.mdi-radiobox-marked::before{content:"\F043E"}.mdi-radiology-box::before{content:"\F14C5"}.mdi-radiology-box-outline::before{content:"\F14C6"}.mdi-radius::before{content:"\F0CC0"}.mdi-radius-outline::before{content:"\F0CC1"}.mdi-railroad-light::before{content:"\F0F1E"}.mdi-rake::before{content:"\F1544"}.mdi-raspberry-pi::before{content:"\F043F"}.mdi-raw::before{content:"\F1A0F"}.mdi-raw-off::before{content:"\F1A10"}.mdi-ray-end::before{content:"\F0440"}.mdi-ray-end-arrow::before{content:"\F0441"}.mdi-ray-start::before{content:"\F0442"}.mdi-ray-start-arrow::before{content:"\F0443"}.mdi-ray-start-end::before{content:"\F0444"}.mdi-ray-start-vertex-end::before{content:"\F15D8"}.mdi-ray-vertex::before{content:"\F0445"}.mdi-razor-double-edge::before{content:"\F1997"}.mdi-razor-single-edge::before{content:"\F1998"}.mdi-react::before{content:"\F0708"}.mdi-read::before{content:"\F0447"}.mdi-receipt::before{content:"\F0824"}.mdi-receipt-clock::before{content:"\F1C3E"}.mdi-receipt-clock-outline::before{content:"\F1C3F"}.mdi-receipt-outline::before{content:"\F04F7"}.mdi-receipt-send::before{content:"\F1C40"}.mdi-receipt-send-outline::before{content:"\F1C41"}.mdi-receipt-text::before{content:"\F0449"}.mdi-receipt-text-arrow-left::before{content:"\F1C42"}.mdi-receipt-text-arrow-left-outline::before{content:"\F1C43"}.mdi-receipt-text-arrow-right::before{content:"\F1C44"}.mdi-receipt-text-arrow-right-outline::before{content:"\F1C45"}.mdi-receipt-text-check::before{content:"\F1A63"}.mdi-receipt-text-check-outline::before{content:"\F1A64"}.mdi-receipt-text-clock::before{content:"\F1C46"}.mdi-receipt-text-clock-outline::before{content:"\F1C47"}.mdi-receipt-text-edit::before{content:"\F1C48"}.mdi-receipt-text-edit-outline::before{content:"\F1C49"}.mdi-receipt-text-minus::before{content:"\F1A65"}.mdi-receipt-text-minus-outline::before{content:"\F1A66"}.mdi-receipt-text-outline::before{content:"\F19DC"}.mdi-receipt-text-plus::before{content:"\F1A67"}.mdi-receipt-text-plus-outline::before{content:"\F1A68"}.mdi-receipt-text-remove::before{content:"\F1A69"}.mdi-receipt-text-remove-outline::before{content:"\F1A6A"}.mdi-receipt-text-send::before{content:"\F1C4A"}.mdi-receipt-text-send-outline::before{content:"\F1C4B"}.mdi-record::before{content:"\F044A"}.mdi-record-circle::before{content:"\F0EC2"}.mdi-record-circle-outline::before{content:"\F0EC3"}.mdi-record-player::before{content:"\F099A"}.mdi-record-rec::before{content:"\F044B"}.mdi-rectangle::before{content:"\F0E5E"}.mdi-rectangle-outline::before{content:"\F0E5F"}.mdi-recycle::before{content:"\F044C"}.mdi-recycle-variant::before{content:"\F139D"}.mdi-reddit::before{content:"\F044D"}.mdi-redhat::before{content:"\F111B"}.mdi-redo::before{content:"\F044E"}.mdi-redo-variant::before{content:"\F044F"}.mdi-reflect-horizontal::before{content:"\F0A0E"}.mdi-reflect-vertical::before{content:"\F0A0F"}.mdi-refresh::before{content:"\F0450"}.mdi-refresh-auto::before{content:"\F18F2"}.mdi-refresh-circle::before{content:"\F1377"}.mdi-regex::before{content:"\F0451"}.mdi-registered-trademark::before{content:"\F0A67"}.mdi-reiterate::before{content:"\F1588"}.mdi-relation-many-to-many::before{content:"\F1496"}.mdi-relation-many-to-one::before{content:"\F1497"}.mdi-relation-many-to-one-or-many::before{content:"\F1498"}.mdi-relation-many-to-only-one::before{content:"\F1499"}.mdi-relation-many-to-zero-or-many::before{content:"\F149A"}.mdi-relation-many-to-zero-or-one::before{content:"\F149B"}.mdi-relation-one-or-many-to-many::before{content:"\F149C"}.mdi-relation-one-or-many-to-one::before{content:"\F149D"}.mdi-relation-one-or-many-to-one-or-many::before{content:"\F149E"}.mdi-relation-one-or-many-to-only-one::before{content:"\F149F"}.mdi-relation-one-or-many-to-zero-or-many::before{content:"\F14A0"}.mdi-relation-one-or-many-to-zero-or-one::before{content:"\F14A1"}.mdi-relation-one-to-many::before{content:"\F14A2"}.mdi-relation-one-to-one::before{content:"\F14A3"}.mdi-relation-one-to-one-or-many::before{content:"\F14A4"}.mdi-relation-one-to-only-one::before{content:"\F14A5"}.mdi-relation-one-to-zero-or-many::before{content:"\F14A6"}.mdi-relation-one-to-zero-or-one::before{content:"\F14A7"}.mdi-relation-only-one-to-many::before{content:"\F14A8"}.mdi-relation-only-one-to-one::before{content:"\F14A9"}.mdi-relation-only-one-to-one-or-many::before{content:"\F14AA"}.mdi-relation-only-one-to-only-one::before{content:"\F14AB"}.mdi-relation-only-one-to-zero-or-many::before{content:"\F14AC"}.mdi-relation-only-one-to-zero-or-one::before{content:"\F14AD"}.mdi-relation-zero-or-many-to-many::before{content:"\F14AE"}.mdi-relation-zero-or-many-to-one::before{content:"\F14AF"}.mdi-relation-zero-or-many-to-one-or-many::before{content:"\F14B0"}.mdi-relation-zero-or-many-to-only-one::before{content:"\F14B1"}.mdi-relation-zero-or-many-to-zero-or-many::before{content:"\F14B2"}.mdi-relation-zero-or-many-to-zero-or-one::before{content:"\F14B3"}.mdi-relation-zero-or-one-to-many::before{content:"\F14B4"}.mdi-relation-zero-or-one-to-one::before{content:"\F14B5"}.mdi-relation-zero-or-one-to-one-or-many::before{content:"\F14B6"}.mdi-relation-zero-or-one-to-only-one::before{content:"\F14B7"}.mdi-relation-zero-or-one-to-zero-or-many::before{content:"\F14B8"}.mdi-relation-zero-or-one-to-zero-or-one::before{content:"\F14B9"}.mdi-relative-scale::before{content:"\F0452"}.mdi-reload::before{content:"\F0453"}.mdi-reload-alert::before{content:"\F110B"}.mdi-reminder::before{content:"\F088C"}.mdi-remote::before{content:"\F0454"}.mdi-remote-desktop::before{content:"\F08B9"}.mdi-remote-off::before{content:"\F0EC4"}.mdi-remote-tv::before{content:"\F0EC5"}.mdi-remote-tv-off::before{content:"\F0EC6"}.mdi-rename::before{content:"\F1C18"}.mdi-rename-box::before{content:"\F0455"}.mdi-rename-box-outline::before{content:"\F1C19"}.mdi-rename-outline::before{content:"\F1C1A"}.mdi-reorder-horizontal::before{content:"\F0688"}.mdi-reorder-vertical::before{content:"\F0689"}.mdi-repeat::before{content:"\F0456"}.mdi-repeat-off::before{content:"\F0457"}.mdi-repeat-once::before{content:"\F0458"}.mdi-repeat-variant::before{content:"\F0547"}.mdi-replay::before{content:"\F0459"}.mdi-reply::before{content:"\F045A"}.mdi-reply-all::before{content:"\F045B"}.mdi-reply-all-outline::before{content:"\F0F1F"}.mdi-reply-circle::before{content:"\F11AE"}.mdi-reply-outline::before{content:"\F0F20"}.mdi-reproduction::before{content:"\F045C"}.mdi-resistor::before{content:"\F0B44"}.mdi-resistor-nodes::before{content:"\F0B45"}.mdi-resize::before{content:"\F0A68"}.mdi-resize-bottom-right::before{content:"\F045D"}.mdi-responsive::before{content:"\F045E"}.mdi-restart::before{content:"\F0709"}.mdi-restart-alert::before{content:"\F110C"}.mdi-restart-off::before{content:"\F0D95"}.mdi-restore::before{content:"\F099B"}.mdi-restore-alert::before{content:"\F110D"}.mdi-rewind::before{content:"\F045F"}.mdi-rewind-10::before{content:"\F0D2A"}.mdi-rewind-15::before{content:"\F1946"}.mdi-rewind-30::before{content:"\F0D96"}.mdi-rewind-45::before{content:"\F1B13"}.mdi-rewind-5::before{content:"\F11F9"}.mdi-rewind-60::before{content:"\F160C"}.mdi-rewind-outline::before{content:"\F070A"}.mdi-rhombus::before{content:"\F070B"}.mdi-rhombus-medium::before{content:"\F0A10"}.mdi-rhombus-medium-outline::before{content:"\F14DC"}.mdi-rhombus-outline::before{content:"\F070C"}.mdi-rhombus-split::before{content:"\F0A11"}.mdi-rhombus-split-outline::before{content:"\F14DD"}.mdi-ribbon::before{content:"\F0460"}.mdi-rice::before{content:"\F07EA"}.mdi-rickshaw::before{content:"\F15BB"}.mdi-rickshaw-electric::before{content:"\F15BC"}.mdi-ring::before{content:"\F07EB"}.mdi-rivet::before{content:"\F0E60"}.mdi-road::before{content:"\F0461"}.mdi-road-variant::before{content:"\F0462"}.mdi-robber::before{content:"\F1058"}.mdi-robot::before{content:"\F06A9"}.mdi-robot-angry::before{content:"\F169D"}.mdi-robot-angry-outline::before{content:"\F169E"}.mdi-robot-confused::before{content:"\F169F"}.mdi-robot-confused-outline::before{content:"\F16A0"}.mdi-robot-dead::before{content:"\F16A1"}.mdi-robot-dead-outline::before{content:"\F16A2"}.mdi-robot-excited::before{content:"\F16A3"}.mdi-robot-excited-outline::before{content:"\F16A4"}.mdi-robot-happy::before{content:"\F1719"}.mdi-robot-happy-outline::before{content:"\F171A"}.mdi-robot-industrial::before{content:"\F0B46"}.mdi-robot-industrial-outline::before{content:"\F1A1A"}.mdi-robot-love::before{content:"\F16A5"}.mdi-robot-love-outline::before{content:"\F16A6"}.mdi-robot-mower::before{content:"\F11F7"}.mdi-robot-mower-outline::before{content:"\F11F3"}.mdi-robot-off::before{content:"\F16A7"}.mdi-robot-off-outline::before{content:"\F167B"}.mdi-robot-outline::before{content:"\F167A"}.mdi-robot-vacuum::before{content:"\F070D"}.mdi-robot-vacuum-alert::before{content:"\F1B5D"}.mdi-robot-vacuum-off::before{content:"\F1C01"}.mdi-robot-vacuum-variant::before{content:"\F0908"}.mdi-robot-vacuum-variant-alert::before{content:"\F1B5E"}.mdi-robot-vacuum-variant-off::before{content:"\F1C02"}.mdi-rocket::before{content:"\F0463"}.mdi-rocket-launch::before{content:"\F14DE"}.mdi-rocket-launch-outline::before{content:"\F14DF"}.mdi-rocket-outline::before{content:"\F13AF"}.mdi-rodent::before{content:"\F1327"}.mdi-roller-shade::before{content:"\F1A6B"}.mdi-roller-shade-closed::before{content:"\F1A6C"}.mdi-roller-skate::before{content:"\F0D2B"}.mdi-roller-skate-off::before{content:"\F0145"}.mdi-rollerblade::before{content:"\F0D2C"}.mdi-rollerblade-off::before{content:"\F002E"}.mdi-rollupjs::before{content:"\F0BC0"}.mdi-rolodex::before{content:"\F1AB9"}.mdi-rolodex-outline::before{content:"\F1ABA"}.mdi-roman-numeral-1::before{content:"\F1088"}.mdi-roman-numeral-10::before{content:"\F1091"}.mdi-roman-numeral-2::before{content:"\F1089"}.mdi-roman-numeral-3::before{content:"\F108A"}.mdi-roman-numeral-4::before{content:"\F108B"}.mdi-roman-numeral-5::before{content:"\F108C"}.mdi-roman-numeral-6::before{content:"\F108D"}.mdi-roman-numeral-7::before{content:"\F108E"}.mdi-roman-numeral-8::before{content:"\F108F"}.mdi-roman-numeral-9::before{content:"\F1090"}.mdi-room-service::before{content:"\F088D"}.mdi-room-service-outline::before{content:"\F0D97"}.mdi-rotate-360::before{content:"\F1999"}.mdi-rotate-3d::before{content:"\F0EC7"}.mdi-rotate-3d-variant::before{content:"\F0464"}.mdi-rotate-left::before{content:"\F0465"}.mdi-rotate-left-variant::before{content:"\F0466"}.mdi-rotate-orbit::before{content:"\F0D98"}.mdi-rotate-right::before{content:"\F0467"}.mdi-rotate-right-variant::before{content:"\F0468"}.mdi-rounded-corner::before{content:"\F0607"}.mdi-router::before{content:"\F11E2"}.mdi-router-network::before{content:"\F1087"}.mdi-router-network-wireless::before{content:"\F1C97"}.mdi-router-wireless::before{content:"\F0469"}.mdi-router-wireless-off::before{content:"\F15A3"}.mdi-router-wireless-settings::before{content:"\F0A69"}.mdi-routes::before{content:"\F046A"}.mdi-routes-clock::before{content:"\F1059"}.mdi-rowing::before{content:"\F0608"}.mdi-rss::before{content:"\F046B"}.mdi-rss-box::before{content:"\F046C"}.mdi-rss-off::before{content:"\F0F21"}.mdi-rug::before{content:"\F1475"}.mdi-rugby::before{content:"\F0D99"}.mdi-ruler::before{content:"\F046D"}.mdi-ruler-square::before{content:"\F0CC2"}.mdi-ruler-square-compass::before{content:"\F0EBE"}.mdi-run::before{content:"\F070E"}.mdi-run-fast::before{content:"\F046E"}.mdi-rv-truck::before{content:"\F11D4"}.mdi-sack::before{content:"\F0D2E"}.mdi-sack-outline::before{content:"\F1C4C"}.mdi-sack-percent::before{content:"\F0D2F"}.mdi-safe::before{content:"\F0A6A"}.mdi-safe-square::before{content:"\F127C"}.mdi-safe-square-outline::before{content:"\F127D"}.mdi-safety-goggles::before{content:"\F0D30"}.mdi-sail-boat::before{content:"\F0EC8"}.mdi-sail-boat-sink::before{content:"\F1AEF"}.mdi-sale::before{content:"\F046F"}.mdi-sale-outline::before{content:"\F1A06"}.mdi-salesforce::before{content:"\F088E"}.mdi-sass::before{content:"\F07EC"}.mdi-satellite::before{content:"\F0470"}.mdi-satellite-uplink::before{content:"\F0909"}.mdi-satellite-variant::before{content:"\F0471"}.mdi-sausage::before{content:"\F08BA"}.mdi-sausage-off::before{content:"\F1789"}.mdi-saw-blade::before{content:"\F0E61"}.mdi-sawtooth-wave::before{content:"\F147A"}.mdi-saxophone::before{content:"\F0609"}.mdi-scale::before{content:"\F0472"}.mdi-scale-balance::before{content:"\F05D1"}.mdi-scale-bathroom::before{content:"\F0473"}.mdi-scale-off::before{content:"\F105A"}.mdi-scale-unbalanced::before{content:"\F19B8"}.mdi-scan-helper::before{content:"\F13D8"}.mdi-scanner::before{content:"\F06AB"}.mdi-scanner-off::before{content:"\F090A"}.mdi-scatter-plot::before{content:"\F0EC9"}.mdi-scatter-plot-outline::before{content:"\F0ECA"}.mdi-scent::before{content:"\F1958"}.mdi-scent-off::before{content:"\F1959"}.mdi-school::before{content:"\F0474"}.mdi-school-outline::before{content:"\F1180"}.mdi-scissors-cutting::before{content:"\F0A6B"}.mdi-scooter::before{content:"\F15BD"}.mdi-scooter-electric::before{content:"\F15BE"}.mdi-scoreboard::before{content:"\F127E"}.mdi-scoreboard-outline::before{content:"\F127F"}.mdi-screen-rotation::before{content:"\F0475"}.mdi-screen-rotation-lock::before{content:"\F0478"}.mdi-screw-flat-top::before{content:"\F0DF3"}.mdi-screw-lag::before{content:"\F0DF4"}.mdi-screw-machine-flat-top::before{content:"\F0DF5"}.mdi-screw-machine-round-top::before{content:"\F0DF6"}.mdi-screw-round-top::before{content:"\F0DF7"}.mdi-screwdriver::before{content:"\F0476"}.mdi-script::before{content:"\F0BC1"}.mdi-script-outline::before{content:"\F0477"}.mdi-script-text::before{content:"\F0BC2"}.mdi-script-text-key::before{content:"\F1725"}.mdi-script-text-key-outline::before{content:"\F1726"}.mdi-script-text-outline::before{content:"\F0BC3"}.mdi-script-text-play::before{content:"\F1727"}.mdi-script-text-play-outline::before{content:"\F1728"}.mdi-sd::before{content:"\F0479"}.mdi-seal::before{content:"\F047A"}.mdi-seal-variant::before{content:"\F0FD9"}.mdi-search-web::before{content:"\F070F"}.mdi-seat::before{content:"\F0CC3"}.mdi-seat-flat::before{content:"\F047B"}.mdi-seat-flat-angled::before{content:"\F047C"}.mdi-seat-individual-suite::before{content:"\F047D"}.mdi-seat-legroom-extra::before{content:"\F047E"}.mdi-seat-legroom-normal::before{content:"\F047F"}.mdi-seat-legroom-reduced::before{content:"\F0480"}.mdi-seat-outline::before{content:"\F0CC4"}.mdi-seat-passenger::before{content:"\F1249"}.mdi-seat-recline-extra::before{content:"\F0481"}.mdi-seat-recline-normal::before{content:"\F0482"}.mdi-seatbelt::before{content:"\F0CC5"}.mdi-security::before{content:"\F0483"}.mdi-security-network::before{content:"\F0484"}.mdi-seed::before{content:"\F0E62"}.mdi-seed-off::before{content:"\F13FD"}.mdi-seed-off-outline::before{content:"\F13FE"}.mdi-seed-outline::before{content:"\F0E63"}.mdi-seed-plus::before{content:"\F1A6D"}.mdi-seed-plus-outline::before{content:"\F1A6E"}.mdi-seesaw::before{content:"\F15A4"}.mdi-segment::before{content:"\F0ECB"}.mdi-select::before{content:"\F0485"}.mdi-select-all::before{content:"\F0486"}.mdi-select-arrow-down::before{content:"\F1B59"}.mdi-select-arrow-up::before{content:"\F1B58"}.mdi-select-color::before{content:"\F0D31"}.mdi-select-compare::before{content:"\F0AD9"}.mdi-select-drag::before{content:"\F0A6C"}.mdi-select-group::before{content:"\F0F82"}.mdi-select-inverse::before{content:"\F0487"}.mdi-select-marker::before{content:"\F1280"}.mdi-select-multiple::before{content:"\F1281"}.mdi-select-multiple-marker::before{content:"\F1282"}.mdi-select-off::before{content:"\F0488"}.mdi-select-place::before{content:"\F0FDA"}.mdi-select-remove::before{content:"\F17C1"}.mdi-select-search::before{content:"\F1204"}.mdi-selection::before{content:"\F0489"}.mdi-selection-drag::before{content:"\F0A6D"}.mdi-selection-ellipse::before{content:"\F0D32"}.mdi-selection-ellipse-arrow-inside::before{content:"\F0F22"}.mdi-selection-ellipse-remove::before{content:"\F17C2"}.mdi-selection-marker::before{content:"\F1283"}.mdi-selection-multiple::before{content:"\F1285"}.mdi-selection-multiple-marker::before{content:"\F1284"}.mdi-selection-off::before{content:"\F0777"}.mdi-selection-remove::before{content:"\F17C3"}.mdi-selection-search::before{content:"\F1205"}.mdi-semantic-web::before{content:"\F1316"}.mdi-send::before{content:"\F048A"}.mdi-send-check::before{content:"\F1161"}.mdi-send-check-outline::before{content:"\F1162"}.mdi-send-circle::before{content:"\F0DF8"}.mdi-send-circle-outline::before{content:"\F0DF9"}.mdi-send-clock::before{content:"\F1163"}.mdi-send-clock-outline::before{content:"\F1164"}.mdi-send-lock::before{content:"\F07ED"}.mdi-send-lock-outline::before{content:"\F1166"}.mdi-send-outline::before{content:"\F1165"}.mdi-send-variant::before{content:"\F1C4D"}.mdi-send-variant-clock::before{content:"\F1C7E"}.mdi-send-variant-clock-outline::before{content:"\F1C7F"}.mdi-send-variant-outline::before{content:"\F1C4E"}.mdi-serial-port::before{content:"\F065C"}.mdi-server::before{content:"\F048B"}.mdi-server-minus::before{content:"\F048C"}.mdi-server-minus-outline::before{content:"\F1C98"}.mdi-server-network::before{content:"\F048D"}.mdi-server-network-off::before{content:"\F048E"}.mdi-server-network-outline::before{content:"\F1C99"}.mdi-server-off::before{content:"\F048F"}.mdi-server-outline::before{content:"\F1C9A"}.mdi-server-plus::before{content:"\F0490"}.mdi-server-plus-outline::before{content:"\F1C9B"}.mdi-server-remove::before{content:"\F0491"}.mdi-server-security::before{content:"\F0492"}.mdi-set-all::before{content:"\F0778"}.mdi-set-center::before{content:"\F0779"}.mdi-set-center-right::before{content:"\F077A"}.mdi-set-left::before{content:"\F077B"}.mdi-set-left-center::before{content:"\F077C"}.mdi-set-left-right::before{content:"\F077D"}.mdi-set-merge::before{content:"\F14E0"}.mdi-set-none::before{content:"\F077E"}.mdi-set-right::before{content:"\F077F"}.mdi-set-split::before{content:"\F14E1"}.mdi-set-square::before{content:"\F145D"}.mdi-set-top-box::before{content:"\F099F"}.mdi-settings-helper::before{content:"\F0A6E"}.mdi-shaker::before{content:"\F110E"}.mdi-shaker-outline::before{content:"\F110F"}.mdi-shape::before{content:"\F0831"}.mdi-shape-circle-plus::before{content:"\F065D"}.mdi-shape-outline::before{content:"\F0832"}.mdi-shape-oval-plus::before{content:"\F11FA"}.mdi-shape-plus::before{content:"\F0495"}.mdi-shape-plus-outline::before{content:"\F1C4F"}.mdi-shape-polygon-plus::before{content:"\F065E"}.mdi-shape-rectangle-plus::before{content:"\F065F"}.mdi-shape-square-plus::before{content:"\F0660"}.mdi-shape-square-rounded-plus::before{content:"\F14FA"}.mdi-share::before{content:"\F0496"}.mdi-share-all::before{content:"\F11F4"}.mdi-share-all-outline::before{content:"\F11F5"}.mdi-share-circle::before{content:"\F11AD"}.mdi-share-off::before{content:"\F0F23"}.mdi-share-off-outline::before{content:"\F0F24"}.mdi-share-outline::before{content:"\F0932"}.mdi-share-variant::before{content:"\F0497"}.mdi-share-variant-outline::before{content:"\F1514"}.mdi-shark::before{content:"\F18BA"}.mdi-shark-fin::before{content:"\F1673"}.mdi-shark-fin-outline::before{content:"\F1674"}.mdi-shark-off::before{content:"\F18BB"}.mdi-sheep::before{content:"\F0CC6"}.mdi-shield::before{content:"\F0498"}.mdi-shield-account::before{content:"\F088F"}.mdi-shield-account-outline::before{content:"\F0A12"}.mdi-shield-account-variant::before{content:"\F15A7"}.mdi-shield-account-variant-outline::before{content:"\F15A8"}.mdi-shield-airplane::before{content:"\F06BB"}.mdi-shield-airplane-outline::before{content:"\F0CC7"}.mdi-shield-alert::before{content:"\F0ECC"}.mdi-shield-alert-outline::before{content:"\F0ECD"}.mdi-shield-bug::before{content:"\F13DA"}.mdi-shield-bug-outline::before{content:"\F13DB"}.mdi-shield-car::before{content:"\F0F83"}.mdi-shield-check::before{content:"\F0565"}.mdi-shield-check-outline::before{content:"\F0CC8"}.mdi-shield-cross::before{content:"\F0CC9"}.mdi-shield-cross-outline::before{content:"\F0CCA"}.mdi-shield-crown::before{content:"\F18BC"}.mdi-shield-crown-outline::before{content:"\F18BD"}.mdi-shield-edit::before{content:"\F11A0"}.mdi-shield-edit-outline::before{content:"\F11A1"}.mdi-shield-half::before{content:"\F1360"}.mdi-shield-half-full::before{content:"\F0780"}.mdi-shield-home::before{content:"\F068A"}.mdi-shield-home-outline::before{content:"\F0CCB"}.mdi-shield-key::before{content:"\F0BC4"}.mdi-shield-key-outline::before{content:"\F0BC5"}.mdi-shield-link-variant::before{content:"\F0D33"}.mdi-shield-link-variant-outline::before{content:"\F0D34"}.mdi-shield-lock::before{content:"\F099D"}.mdi-shield-lock-open::before{content:"\F199A"}.mdi-shield-lock-open-outline::before{content:"\F199B"}.mdi-shield-lock-outline::before{content:"\F0CCC"}.mdi-shield-moon::before{content:"\F1828"}.mdi-shield-moon-outline::before{content:"\F1829"}.mdi-shield-off::before{content:"\F099E"}.mdi-shield-off-outline::before{content:"\F099C"}.mdi-shield-outline::before{content:"\F0499"}.mdi-shield-plus::before{content:"\F0ADA"}.mdi-shield-plus-outline::before{content:"\F0ADB"}.mdi-shield-refresh::before{content:"\F00AA"}.mdi-shield-refresh-outline::before{content:"\F01E0"}.mdi-shield-remove::before{content:"\F0ADC"}.mdi-shield-remove-outline::before{content:"\F0ADD"}.mdi-shield-search::before{content:"\F0D9A"}.mdi-shield-star::before{content:"\F113B"}.mdi-shield-star-outline::before{content:"\F113C"}.mdi-shield-sun::before{content:"\F105D"}.mdi-shield-sun-outline::before{content:"\F105E"}.mdi-shield-sword::before{content:"\F18BE"}.mdi-shield-sword-outline::before{content:"\F18BF"}.mdi-shield-sync::before{content:"\F11A2"}.mdi-shield-sync-outline::before{content:"\F11A3"}.mdi-shimmer::before{content:"\F1545"}.mdi-ship-wheel::before{content:"\F0833"}.mdi-shipping-pallet::before{content:"\F184E"}.mdi-shoe-ballet::before{content:"\F15CA"}.mdi-shoe-cleat::before{content:"\F15C7"}.mdi-shoe-formal::before{content:"\F0B47"}.mdi-shoe-heel::before{content:"\F0B48"}.mdi-shoe-print::before{content:"\F0DFA"}.mdi-shoe-sneaker::before{content:"\F15C8"}.mdi-shopping::before{content:"\F049A"}.mdi-shopping-music::before{content:"\F049B"}.mdi-shopping-outline::before{content:"\F11D5"}.mdi-shopping-search::before{content:"\F0F84"}.mdi-shopping-search-outline::before{content:"\F1A6F"}.mdi-shore::before{content:"\F14F9"}.mdi-shovel::before{content:"\F0710"}.mdi-shovel-off::before{content:"\F0711"}.mdi-shower::before{content:"\F09A0"}.mdi-shower-head::before{content:"\F09A1"}.mdi-shredder::before{content:"\F049C"}.mdi-shuffle::before{content:"\F049D"}.mdi-shuffle-disabled::before{content:"\F049E"}.mdi-shuffle-variant::before{content:"\F049F"}.mdi-shuriken::before{content:"\F137F"}.mdi-sickle::before{content:"\F18C0"}.mdi-sigma::before{content:"\F04A0"}.mdi-sigma-lower::before{content:"\F062B"}.mdi-sign-caution::before{content:"\F04A1"}.mdi-sign-direction::before{content:"\F0781"}.mdi-sign-direction-minus::before{content:"\F1000"}.mdi-sign-direction-plus::before{content:"\F0FDC"}.mdi-sign-direction-remove::before{content:"\F0FDD"}.mdi-sign-language::before{content:"\F1B4D"}.mdi-sign-language-outline::before{content:"\F1B4E"}.mdi-sign-pole::before{content:"\F14F8"}.mdi-sign-real-estate::before{content:"\F1118"}.mdi-sign-text::before{content:"\F0782"}.mdi-sign-yield::before{content:"\F1BAF"}.mdi-signal::before{content:"\F04A2"}.mdi-signal-2g::before{content:"\F0712"}.mdi-signal-3g::before{content:"\F0713"}.mdi-signal-4g::before{content:"\F0714"}.mdi-signal-5g::before{content:"\F0A6F"}.mdi-signal-cellular-1::before{content:"\F08BC"}.mdi-signal-cellular-2::before{content:"\F08BD"}.mdi-signal-cellular-3::before{content:"\F08BE"}.mdi-signal-cellular-outline::before{content:"\F08BF"}.mdi-signal-distance-variant::before{content:"\F0E64"}.mdi-signal-hspa::before{content:"\F0715"}.mdi-signal-hspa-plus::before{content:"\F0716"}.mdi-signal-off::before{content:"\F0783"}.mdi-signal-variant::before{content:"\F060A"}.mdi-signature::before{content:"\F0DFB"}.mdi-signature-freehand::before{content:"\F0DFC"}.mdi-signature-image::before{content:"\F0DFD"}.mdi-signature-text::before{content:"\F0DFE"}.mdi-silo::before{content:"\F1B9F"}.mdi-silo-outline::before{content:"\F0B49"}.mdi-silverware::before{content:"\F04A3"}.mdi-silverware-clean::before{content:"\F0FDE"}.mdi-silverware-fork::before{content:"\F04A4"}.mdi-silverware-fork-knife::before{content:"\F0A70"}.mdi-silverware-spoon::before{content:"\F04A5"}.mdi-silverware-variant::before{content:"\F04A6"}.mdi-sim::before{content:"\F04A7"}.mdi-sim-alert::before{content:"\F04A8"}.mdi-sim-alert-outline::before{content:"\F15D3"}.mdi-sim-off::before{content:"\F04A9"}.mdi-sim-off-outline::before{content:"\F15D4"}.mdi-sim-outline::before{content:"\F15D5"}.mdi-simple-icons::before{content:"\F131D"}.mdi-sina-weibo::before{content:"\F0ADF"}.mdi-sine-wave::before{content:"\F095B"}.mdi-sitemap::before{content:"\F04AA"}.mdi-sitemap-outline::before{content:"\F199C"}.mdi-size-l::before{content:"\F13A6"}.mdi-size-m::before{content:"\F13A5"}.mdi-size-s::before{content:"\F13A4"}.mdi-size-xl::before{content:"\F13A7"}.mdi-size-xs::before{content:"\F13A3"}.mdi-size-xxl::before{content:"\F13A8"}.mdi-size-xxs::before{content:"\F13A2"}.mdi-size-xxxl::before{content:"\F13A9"}.mdi-skate::before{content:"\F0D35"}.mdi-skate-off::before{content:"\F0699"}.mdi-skateboard::before{content:"\F14C2"}.mdi-skateboarding::before{content:"\F0501"}.mdi-skew-less::before{content:"\F0D36"}.mdi-skew-more::before{content:"\F0D37"}.mdi-ski::before{content:"\F1304"}.mdi-ski-cross-country::before{content:"\F1305"}.mdi-ski-water::before{content:"\F1306"}.mdi-skip-backward::before{content:"\F04AB"}.mdi-skip-backward-outline::before{content:"\F0F25"}.mdi-skip-forward::before{content:"\F04AC"}.mdi-skip-forward-outline::before{content:"\F0F26"}.mdi-skip-next::before{content:"\F04AD"}.mdi-skip-next-circle::before{content:"\F0661"}.mdi-skip-next-circle-outline::before{content:"\F0662"}.mdi-skip-next-outline::before{content:"\F0F27"}.mdi-skip-previous::before{content:"\F04AE"}.mdi-skip-previous-circle::before{content:"\F0663"}.mdi-skip-previous-circle-outline::before{content:"\F0664"}.mdi-skip-previous-outline::before{content:"\F0F28"}.mdi-skull::before{content:"\F068C"}.mdi-skull-crossbones::before{content:"\F0BC6"}.mdi-skull-crossbones-outline::before{content:"\F0BC7"}.mdi-skull-outline::before{content:"\F0BC8"}.mdi-skull-scan::before{content:"\F14C7"}.mdi-skull-scan-outline::before{content:"\F14C8"}.mdi-skype::before{content:"\F04AF"}.mdi-skype-business::before{content:"\F04B0"}.mdi-slack::before{content:"\F04B1"}.mdi-slash-forward::before{content:"\F0FDF"}.mdi-slash-forward-box::before{content:"\F0FE0"}.mdi-sledding::before{content:"\F041B"}.mdi-sleep::before{content:"\F04B2"}.mdi-sleep-off::before{content:"\F04B3"}.mdi-slide::before{content:"\F15A5"}.mdi-slope-downhill::before{content:"\F0DFF"}.mdi-slope-uphill::before{content:"\F0E00"}.mdi-slot-machine::before{content:"\F1114"}.mdi-slot-machine-outline::before{content:"\F1115"}.mdi-smart-card::before{content:"\F10BD"}.mdi-smart-card-off::before{content:"\F18F7"}.mdi-smart-card-off-outline::before{content:"\F18F8"}.mdi-smart-card-outline::before{content:"\F10BE"}.mdi-smart-card-reader::before{content:"\F10BF"}.mdi-smart-card-reader-outline::before{content:"\F10C0"}.mdi-smog::before{content:"\F0A71"}.mdi-smoke::before{content:"\F1799"}.mdi-smoke-detector::before{content:"\F0392"}.mdi-smoke-detector-alert::before{content:"\F192E"}.mdi-smoke-detector-alert-outline::before{content:"\F192F"}.mdi-smoke-detector-off::before{content:"\F1809"}.mdi-smoke-detector-off-outline::before{content:"\F180A"}.mdi-smoke-detector-outline::before{content:"\F1808"}.mdi-smoke-detector-variant::before{content:"\F180B"}.mdi-smoke-detector-variant-alert::before{content:"\F1930"}.mdi-smoke-detector-variant-off::before{content:"\F180C"}.mdi-smoking::before{content:"\F04B4"}.mdi-smoking-off::before{content:"\F04B5"}.mdi-smoking-pipe::before{content:"\F140D"}.mdi-smoking-pipe-off::before{content:"\F1428"}.mdi-snail::before{content:"\F1677"}.mdi-snake::before{content:"\F150E"}.mdi-snapchat::before{content:"\F04B6"}.mdi-snowboard::before{content:"\F1307"}.mdi-snowflake::before{content:"\F0717"}.mdi-snowflake-alert::before{content:"\F0F29"}.mdi-snowflake-check::before{content:"\F1A70"}.mdi-snowflake-melt::before{content:"\F12CB"}.mdi-snowflake-off::before{content:"\F14E3"}.mdi-snowflake-thermometer::before{content:"\F1A71"}.mdi-snowflake-variant::before{content:"\F0F2A"}.mdi-snowman::before{content:"\F04B7"}.mdi-snowmobile::before{content:"\F06DD"}.mdi-snowshoeing::before{content:"\F1A72"}.mdi-soccer::before{content:"\F04B8"}.mdi-soccer-field::before{content:"\F0834"}.mdi-social-distance-2-meters::before{content:"\F1579"}.mdi-social-distance-6-feet::before{content:"\F157A"}.mdi-sofa::before{content:"\F04B9"}.mdi-sofa-outline::before{content:"\F156D"}.mdi-sofa-single::before{content:"\F156E"}.mdi-sofa-single-outline::before{content:"\F156F"}.mdi-solar-panel::before{content:"\F0D9B"}.mdi-solar-panel-large::before{content:"\F0D9C"}.mdi-solar-power::before{content:"\F0A72"}.mdi-solar-power-variant::before{content:"\F1A73"}.mdi-solar-power-variant-outline::before{content:"\F1A74"}.mdi-soldering-iron::before{content:"\F1092"}.mdi-solid::before{content:"\F068D"}.mdi-sony-playstation::before{content:"\F0414"}.mdi-sort::before{content:"\F04BA"}.mdi-sort-alphabetical-ascending::before{content:"\F05BD"}.mdi-sort-alphabetical-ascending-variant::before{content:"\F1148"}.mdi-sort-alphabetical-descending::before{content:"\F05BF"}.mdi-sort-alphabetical-descending-variant::before{content:"\F1149"}.mdi-sort-alphabetical-variant::before{content:"\F04BB"}.mdi-sort-ascending::before{content:"\F04BC"}.mdi-sort-bool-ascending::before{content:"\F1385"}.mdi-sort-bool-ascending-variant::before{content:"\F1386"}.mdi-sort-bool-descending::before{content:"\F1387"}.mdi-sort-bool-descending-variant::before{content:"\F1388"}.mdi-sort-calendar-ascending::before{content:"\F1547"}.mdi-sort-calendar-descending::before{content:"\F1548"}.mdi-sort-clock-ascending::before{content:"\F1549"}.mdi-sort-clock-ascending-outline::before{content:"\F154A"}.mdi-sort-clock-descending::before{content:"\F154B"}.mdi-sort-clock-descending-outline::before{content:"\F154C"}.mdi-sort-descending::before{content:"\F04BD"}.mdi-sort-numeric-ascending::before{content:"\F1389"}.mdi-sort-numeric-ascending-variant::before{content:"\F090D"}.mdi-sort-numeric-descending::before{content:"\F138A"}.mdi-sort-numeric-descending-variant::before{content:"\F0AD2"}.mdi-sort-numeric-variant::before{content:"\F04BE"}.mdi-sort-reverse-variant::before{content:"\F033C"}.mdi-sort-variant::before{content:"\F04BF"}.mdi-sort-variant-lock::before{content:"\F0CCD"}.mdi-sort-variant-lock-open::before{content:"\F0CCE"}.mdi-sort-variant-off::before{content:"\F1ABB"}.mdi-sort-variant-remove::before{content:"\F1147"}.mdi-soundbar::before{content:"\F17DB"}.mdi-soundcloud::before{content:"\F04C0"}.mdi-source-branch::before{content:"\F062C"}.mdi-source-branch-check::before{content:"\F14CF"}.mdi-source-branch-minus::before{content:"\F14CB"}.mdi-source-branch-plus::before{content:"\F14CA"}.mdi-source-branch-refresh::before{content:"\F14CD"}.mdi-source-branch-remove::before{content:"\F14CC"}.mdi-source-branch-sync::before{content:"\F14CE"}.mdi-source-commit::before{content:"\F0718"}.mdi-source-commit-end::before{content:"\F0719"}.mdi-source-commit-end-local::before{content:"\F071A"}.mdi-source-commit-local::before{content:"\F071B"}.mdi-source-commit-next-local::before{content:"\F071C"}.mdi-source-commit-start::before{content:"\F071D"}.mdi-source-commit-start-next-local::before{content:"\F071E"}.mdi-source-fork::before{content:"\F04C1"}.mdi-source-merge::before{content:"\F062D"}.mdi-source-pull::before{content:"\F04C2"}.mdi-source-repository::before{content:"\F0CCF"}.mdi-source-repository-multiple::before{content:"\F0CD0"}.mdi-soy-sauce::before{content:"\F07EE"}.mdi-soy-sauce-off::before{content:"\F13FC"}.mdi-spa::before{content:"\F0CD1"}.mdi-spa-outline::before{content:"\F0CD2"}.mdi-space-invaders::before{content:"\F0BC9"}.mdi-space-station::before{content:"\F1383"}.mdi-spade::before{content:"\F0E65"}.mdi-speaker::before{content:"\F04C3"}.mdi-speaker-bluetooth::before{content:"\F09A2"}.mdi-speaker-message::before{content:"\F1B11"}.mdi-speaker-multiple::before{content:"\F0D38"}.mdi-speaker-off::before{content:"\F04C4"}.mdi-speaker-pause::before{content:"\F1B73"}.mdi-speaker-play::before{content:"\F1B72"}.mdi-speaker-stop::before{content:"\F1B74"}.mdi-speaker-wireless::before{content:"\F071F"}.mdi-spear::before{content:"\F1845"}.mdi-speedometer::before{content:"\F04C5"}.mdi-speedometer-medium::before{content:"\F0F85"}.mdi-speedometer-slow::before{content:"\F0F86"}.mdi-spellcheck::before{content:"\F04C6"}.mdi-sphere::before{content:"\F1954"}.mdi-sphere-off::before{content:"\F1955"}.mdi-spider::before{content:"\F11EA"}.mdi-spider-outline::before{content:"\F1C75"}.mdi-spider-thread::before{content:"\F11EB"}.mdi-spider-web::before{content:"\F0BCA"}.mdi-spirit-level::before{content:"\F14F1"}.mdi-spoon-sugar::before{content:"\F1429"}.mdi-spotify::before{content:"\F04C7"}.mdi-spotlight::before{content:"\F04C8"}.mdi-spotlight-beam::before{content:"\F04C9"}.mdi-spray::before{content:"\F0665"}.mdi-spray-bottle::before{content:"\F0AE0"}.mdi-sprinkler::before{content:"\F105F"}.mdi-sprinkler-fire::before{content:"\F199D"}.mdi-sprinkler-variant::before{content:"\F1060"}.mdi-sprout::before{content:"\F0E66"}.mdi-sprout-outline::before{content:"\F0E67"}.mdi-square::before{content:"\F0764"}.mdi-square-circle::before{content:"\F1500"}.mdi-square-circle-outline::before{content:"\F1C50"}.mdi-square-edit-outline::before{content:"\F090C"}.mdi-square-medium::before{content:"\F0A13"}.mdi-square-medium-outline::before{content:"\F0A14"}.mdi-square-off::before{content:"\F12EE"}.mdi-square-off-outline::before{content:"\F12EF"}.mdi-square-opacity::before{content:"\F1854"}.mdi-square-outline::before{content:"\F0763"}.mdi-square-root::before{content:"\F0784"}.mdi-square-root-box::before{content:"\F09A3"}.mdi-square-rounded::before{content:"\F14FB"}.mdi-square-rounded-badge::before{content:"\F1A07"}.mdi-square-rounded-badge-outline::before{content:"\F1A08"}.mdi-square-rounded-outline::before{content:"\F14FC"}.mdi-square-small::before{content:"\F0A15"}.mdi-square-wave::before{content:"\F147B"}.mdi-squeegee::before{content:"\F0AE1"}.mdi-ssh::before{content:"\F08C0"}.mdi-stack-exchange::before{content:"\F060B"}.mdi-stack-overflow::before{content:"\F04CC"}.mdi-stackpath::before{content:"\F0359"}.mdi-stadium::before{content:"\F0FF9"}.mdi-stadium-outline::before{content:"\F1B03"}.mdi-stadium-variant::before{content:"\F0720"}.mdi-stairs::before{content:"\F04CD"}.mdi-stairs-box::before{content:"\F139E"}.mdi-stairs-down::before{content:"\F12BE"}.mdi-stairs-up::before{content:"\F12BD"}.mdi-stamper::before{content:"\F0D39"}.mdi-standard-definition::before{content:"\F07EF"}.mdi-star::before{content:"\F04CE"}.mdi-star-box::before{content:"\F0A73"}.mdi-star-box-multiple::before{content:"\F1286"}.mdi-star-box-multiple-outline::before{content:"\F1287"}.mdi-star-box-outline::before{content:"\F0A74"}.mdi-star-check::before{content:"\F1566"}.mdi-star-check-outline::before{content:"\F156A"}.mdi-star-circle::before{content:"\F04CF"}.mdi-star-circle-outline::before{content:"\F09A4"}.mdi-star-cog::before{content:"\F1668"}.mdi-star-cog-outline::before{content:"\F1669"}.mdi-star-crescent::before{content:"\F0979"}.mdi-star-david::before{content:"\F097A"}.mdi-star-face::before{content:"\F09A5"}.mdi-star-four-points::before{content:"\F0AE2"}.mdi-star-four-points-box::before{content:"\F1C51"}.mdi-star-four-points-box-outline::before{content:"\F1C52"}.mdi-star-four-points-circle::before{content:"\F1C53"}.mdi-star-four-points-circle-outline::before{content:"\F1C54"}.mdi-star-four-points-outline::before{content:"\F0AE3"}.mdi-star-four-points-small::before{content:"\F1C55"}.mdi-star-half::before{content:"\F0246"}.mdi-star-half-full::before{content:"\F04D0"}.mdi-star-minus::before{content:"\F1564"}.mdi-star-minus-outline::before{content:"\F1568"}.mdi-star-off::before{content:"\F04D1"}.mdi-star-off-outline::before{content:"\F155B"}.mdi-star-outline::before{content:"\F04D2"}.mdi-star-plus::before{content:"\F1563"}.mdi-star-plus-outline::before{content:"\F1567"}.mdi-star-remove::before{content:"\F1565"}.mdi-star-remove-outline::before{content:"\F1569"}.mdi-star-settings::before{content:"\F166A"}.mdi-star-settings-outline::before{content:"\F166B"}.mdi-star-shooting::before{content:"\F1741"}.mdi-star-shooting-outline::before{content:"\F1742"}.mdi-star-three-points::before{content:"\F0AE4"}.mdi-star-three-points-outline::before{content:"\F0AE5"}.mdi-state-machine::before{content:"\F11EF"}.mdi-steam::before{content:"\F04D3"}.mdi-steering::before{content:"\F04D4"}.mdi-steering-off::before{content:"\F090E"}.mdi-step-backward::before{content:"\F04D5"}.mdi-step-backward-2::before{content:"\F04D6"}.mdi-step-forward::before{content:"\F04D7"}.mdi-step-forward-2::before{content:"\F04D8"}.mdi-stethoscope::before{content:"\F04D9"}.mdi-sticker::before{content:"\F1364"}.mdi-sticker-alert::before{content:"\F1365"}.mdi-sticker-alert-outline::before{content:"\F1366"}.mdi-sticker-check::before{content:"\F1367"}.mdi-sticker-check-outline::before{content:"\F1368"}.mdi-sticker-circle-outline::before{content:"\F05D0"}.mdi-sticker-emoji::before{content:"\F0785"}.mdi-sticker-minus::before{content:"\F1369"}.mdi-sticker-minus-outline::before{content:"\F136A"}.mdi-sticker-outline::before{content:"\F136B"}.mdi-sticker-plus::before{content:"\F136C"}.mdi-sticker-plus-outline::before{content:"\F136D"}.mdi-sticker-remove::before{content:"\F136E"}.mdi-sticker-remove-outline::before{content:"\F136F"}.mdi-sticker-text::before{content:"\F178E"}.mdi-sticker-text-outline::before{content:"\F178F"}.mdi-stocking::before{content:"\F04DA"}.mdi-stomach::before{content:"\F1093"}.mdi-stool::before{content:"\F195D"}.mdi-stool-outline::before{content:"\F195E"}.mdi-stop::before{content:"\F04DB"}.mdi-stop-circle::before{content:"\F0666"}.mdi-stop-circle-outline::before{content:"\F0667"}.mdi-storage-tank::before{content:"\F1A75"}.mdi-storage-tank-outline::before{content:"\F1A76"}.mdi-store::before{content:"\F04DC"}.mdi-store-24-hour::before{content:"\F04DD"}.mdi-store-alert::before{content:"\F18C1"}.mdi-store-alert-outline::before{content:"\F18C2"}.mdi-store-check::before{content:"\F18C3"}.mdi-store-check-outline::before{content:"\F18C4"}.mdi-store-clock::before{content:"\F18C5"}.mdi-store-clock-outline::before{content:"\F18C6"}.mdi-store-cog::before{content:"\F18C7"}.mdi-store-cog-outline::before{content:"\F18C8"}.mdi-store-edit::before{content:"\F18C9"}.mdi-store-edit-outline::before{content:"\F18CA"}.mdi-store-marker::before{content:"\F18CB"}.mdi-store-marker-outline::before{content:"\F18CC"}.mdi-store-minus::before{content:"\F165E"}.mdi-store-minus-outline::before{content:"\F18CD"}.mdi-store-off::before{content:"\F18CE"}.mdi-store-off-outline::before{content:"\F18CF"}.mdi-store-outline::before{content:"\F1361"}.mdi-store-plus::before{content:"\F165F"}.mdi-store-plus-outline::before{content:"\F18D0"}.mdi-store-remove::before{content:"\F1660"}.mdi-store-remove-outline::before{content:"\F18D1"}.mdi-store-search::before{content:"\F18D2"}.mdi-store-search-outline::before{content:"\F18D3"}.mdi-store-settings::before{content:"\F18D4"}.mdi-store-settings-outline::before{content:"\F18D5"}.mdi-storefront::before{content:"\F07C7"}.mdi-storefront-check::before{content:"\F1B7D"}.mdi-storefront-check-outline::before{content:"\F1B7E"}.mdi-storefront-edit::before{content:"\F1B7F"}.mdi-storefront-edit-outline::before{content:"\F1B80"}.mdi-storefront-minus::before{content:"\F1B83"}.mdi-storefront-minus-outline::before{content:"\F1B84"}.mdi-storefront-outline::before{content:"\F10C1"}.mdi-storefront-plus::before{content:"\F1B81"}.mdi-storefront-plus-outline::before{content:"\F1B82"}.mdi-storefront-remove::before{content:"\F1B85"}.mdi-storefront-remove-outline::before{content:"\F1B86"}.mdi-stove::before{content:"\F04DE"}.mdi-strategy::before{content:"\F11D6"}.mdi-stretch-to-page::before{content:"\F0F2B"}.mdi-stretch-to-page-outline::before{content:"\F0F2C"}.mdi-string-lights::before{content:"\F12BA"}.mdi-string-lights-off::before{content:"\F12BB"}.mdi-subdirectory-arrow-left::before{content:"\F060C"}.mdi-subdirectory-arrow-right::before{content:"\F060D"}.mdi-submarine::before{content:"\F156C"}.mdi-subtitles::before{content:"\F0A16"}.mdi-subtitles-outline::before{content:"\F0A17"}.mdi-subway::before{content:"\F06AC"}.mdi-subway-alert-variant::before{content:"\F0D9D"}.mdi-subway-variant::before{content:"\F04DF"}.mdi-summit::before{content:"\F0786"}.mdi-sun-angle::before{content:"\F1B27"}.mdi-sun-angle-outline::before{content:"\F1B28"}.mdi-sun-clock::before{content:"\F1A77"}.mdi-sun-clock-outline::before{content:"\F1A78"}.mdi-sun-compass::before{content:"\F19A5"}.mdi-sun-snowflake::before{content:"\F1796"}.mdi-sun-snowflake-variant::before{content:"\F1A79"}.mdi-sun-thermometer::before{content:"\F18D6"}.mdi-sun-thermometer-outline::before{content:"\F18D7"}.mdi-sun-wireless::before{content:"\F17FE"}.mdi-sun-wireless-outline::before{content:"\F17FF"}.mdi-sunglasses::before{content:"\F04E0"}.mdi-surfing::before{content:"\F1746"}.mdi-surround-sound::before{content:"\F05C5"}.mdi-surround-sound-2-0::before{content:"\F07F0"}.mdi-surround-sound-2-1::before{content:"\F1729"}.mdi-surround-sound-3-1::before{content:"\F07F1"}.mdi-surround-sound-5-1::before{content:"\F07F2"}.mdi-surround-sound-5-1-2::before{content:"\F172A"}.mdi-surround-sound-7-1::before{content:"\F07F3"}.mdi-svg::before{content:"\F0721"}.mdi-swap-horizontal::before{content:"\F04E1"}.mdi-swap-horizontal-bold::before{content:"\F0BCD"}.mdi-swap-horizontal-circle::before{content:"\F0FE1"}.mdi-swap-horizontal-circle-outline::before{content:"\F0FE2"}.mdi-swap-horizontal-hidden::before{content:"\F1D0E"}.mdi-swap-horizontal-variant::before{content:"\F08C1"}.mdi-swap-vertical::before{content:"\F04E2"}.mdi-swap-vertical-bold::before{content:"\F0BCE"}.mdi-swap-vertical-circle::before{content:"\F0FE3"}.mdi-swap-vertical-circle-outline::before{content:"\F0FE4"}.mdi-swap-vertical-variant::before{content:"\F08C2"}.mdi-swim::before{content:"\F04E3"}.mdi-switch::before{content:"\F04E4"}.mdi-sword::before{content:"\F04E5"}.mdi-sword-cross::before{content:"\F0787"}.mdi-syllabary-hangul::before{content:"\F1333"}.mdi-syllabary-hiragana::before{content:"\F1334"}.mdi-syllabary-katakana::before{content:"\F1335"}.mdi-syllabary-katakana-halfwidth::before{content:"\F1336"}.mdi-symbol::before{content:"\F1501"}.mdi-symfony::before{content:"\F0AE6"}.mdi-synagogue::before{content:"\F1B04"}.mdi-synagogue-outline::before{content:"\F1B05"}.mdi-sync::before{content:"\F04E6"}.mdi-sync-alert::before{content:"\F04E7"}.mdi-sync-circle::before{content:"\F1378"}.mdi-sync-off::before{content:"\F04E8"}.mdi-tab::before{content:"\F04E9"}.mdi-tab-minus::before{content:"\F0B4B"}.mdi-tab-plus::before{content:"\F075C"}.mdi-tab-remove::before{content:"\F0B4C"}.mdi-tab-search::before{content:"\F199E"}.mdi-tab-unselected::before{content:"\F04EA"}.mdi-table::before{content:"\F04EB"}.mdi-table-account::before{content:"\F13B9"}.mdi-table-alert::before{content:"\F13BA"}.mdi-table-arrow-down::before{content:"\F13BB"}.mdi-table-arrow-left::before{content:"\F13BC"}.mdi-table-arrow-right::before{content:"\F13BD"}.mdi-table-arrow-up::before{content:"\F13BE"}.mdi-table-border::before{content:"\F0A18"}.mdi-table-cancel::before{content:"\F13BF"}.mdi-table-chair::before{content:"\F1061"}.mdi-table-check::before{content:"\F13C0"}.mdi-table-clock::before{content:"\F13C1"}.mdi-table-cog::before{content:"\F13C2"}.mdi-table-column::before{content:"\F0835"}.mdi-table-column-plus-after::before{content:"\F04EC"}.mdi-table-column-plus-before::before{content:"\F04ED"}.mdi-table-column-remove::before{content:"\F04EE"}.mdi-table-column-width::before{content:"\F04EF"}.mdi-table-edit::before{content:"\F04F0"}.mdi-table-eye::before{content:"\F1094"}.mdi-table-eye-off::before{content:"\F13C3"}.mdi-table-filter::before{content:"\F1B8C"}.mdi-table-furniture::before{content:"\F05BC"}.mdi-table-headers-eye::before{content:"\F121D"}.mdi-table-headers-eye-off::before{content:"\F121E"}.mdi-table-heart::before{content:"\F13C4"}.mdi-table-key::before{content:"\F13C5"}.mdi-table-large::before{content:"\F04F1"}.mdi-table-large-plus::before{content:"\F0F87"}.mdi-table-large-remove::before{content:"\F0F88"}.mdi-table-lock::before{content:"\F13C6"}.mdi-table-merge-cells::before{content:"\F09A6"}.mdi-table-minus::before{content:"\F13C7"}.mdi-table-multiple::before{content:"\F13C8"}.mdi-table-network::before{content:"\F13C9"}.mdi-table-of-contents::before{content:"\F0836"}.mdi-table-off::before{content:"\F13CA"}.mdi-table-picnic::before{content:"\F1743"}.mdi-table-pivot::before{content:"\F183C"}.mdi-table-plus::before{content:"\F0A75"}.mdi-table-question::before{content:"\F1B21"}.mdi-table-refresh::before{content:"\F13A0"}.mdi-table-remove::before{content:"\F0A76"}.mdi-table-row::before{content:"\F0837"}.mdi-table-row-height::before{content:"\F04F2"}.mdi-table-row-plus-after::before{content:"\F04F3"}.mdi-table-row-plus-before::before{content:"\F04F4"}.mdi-table-row-remove::before{content:"\F04F5"}.mdi-table-search::before{content:"\F090F"}.mdi-table-settings::before{content:"\F0838"}.mdi-table-split-cell::before{content:"\F142A"}.mdi-table-star::before{content:"\F13CB"}.mdi-table-sync::before{content:"\F13A1"}.mdi-table-tennis::before{content:"\F0E68"}.mdi-tablet::before{content:"\F04F6"}.mdi-tablet-cellphone::before{content:"\F09A7"}.mdi-tablet-dashboard::before{content:"\F0ECE"}.mdi-taco::before{content:"\F0762"}.mdi-tag::before{content:"\F04F9"}.mdi-tag-arrow-down::before{content:"\F172B"}.mdi-tag-arrow-down-outline::before{content:"\F172C"}.mdi-tag-arrow-left::before{content:"\F172D"}.mdi-tag-arrow-left-outline::before{content:"\F172E"}.mdi-tag-arrow-right::before{content:"\F172F"}.mdi-tag-arrow-right-outline::before{content:"\F1730"}.mdi-tag-arrow-up::before{content:"\F1731"}.mdi-tag-arrow-up-outline::before{content:"\F1732"}.mdi-tag-check::before{content:"\F1A7A"}.mdi-tag-check-outline::before{content:"\F1A7B"}.mdi-tag-edit::before{content:"\F1C9C"}.mdi-tag-edit-outline::before{content:"\F1C9D"}.mdi-tag-faces::before{content:"\F04FA"}.mdi-tag-heart::before{content:"\F068B"}.mdi-tag-heart-outline::before{content:"\F0BCF"}.mdi-tag-hidden::before{content:"\F1C76"}.mdi-tag-minus::before{content:"\F0910"}.mdi-tag-minus-outline::before{content:"\F121F"}.mdi-tag-multiple::before{content:"\F04FB"}.mdi-tag-multiple-outline::before{content:"\F12F7"}.mdi-tag-off::before{content:"\F1220"}.mdi-tag-off-outline::before{content:"\F1221"}.mdi-tag-outline::before{content:"\F04FC"}.mdi-tag-plus::before{content:"\F0722"}.mdi-tag-plus-outline::before{content:"\F1222"}.mdi-tag-remove::before{content:"\F0723"}.mdi-tag-remove-outline::before{content:"\F1223"}.mdi-tag-search::before{content:"\F1907"}.mdi-tag-search-outline::before{content:"\F1908"}.mdi-tag-text::before{content:"\F1224"}.mdi-tag-text-outline::before{content:"\F04FD"}.mdi-tailwind::before{content:"\F13FF"}.mdi-tally-mark-1::before{content:"\F1ABC"}.mdi-tally-mark-2::before{content:"\F1ABD"}.mdi-tally-mark-3::before{content:"\F1ABE"}.mdi-tally-mark-4::before{content:"\F1ABF"}.mdi-tally-mark-5::before{content:"\F1AC0"}.mdi-tangram::before{content:"\F04F8"}.mdi-tank::before{content:"\F0D3A"}.mdi-tanker-truck::before{content:"\F0FE5"}.mdi-tape-drive::before{content:"\F16DF"}.mdi-tape-measure::before{content:"\F0B4D"}.mdi-target::before{content:"\F04FE"}.mdi-target-account::before{content:"\F0BD0"}.mdi-target-variant::before{content:"\F0A77"}.mdi-taxi::before{content:"\F04FF"}.mdi-tea::before{content:"\F0D9E"}.mdi-tea-outline::before{content:"\F0D9F"}.mdi-teamviewer::before{content:"\F0500"}.mdi-teddy-bear::before{content:"\F18FB"}.mdi-telescope::before{content:"\F0B4E"}.mdi-television::before{content:"\F0502"}.mdi-television-ambient-light::before{content:"\F1356"}.mdi-television-box::before{content:"\F0839"}.mdi-television-classic::before{content:"\F07F4"}.mdi-television-classic-off::before{content:"\F083A"}.mdi-television-guide::before{content:"\F0503"}.mdi-television-off::before{content:"\F083B"}.mdi-television-pause::before{content:"\F0F89"}.mdi-television-play::before{content:"\F0ECF"}.mdi-television-shimmer::before{content:"\F1110"}.mdi-television-speaker::before{content:"\F1B1B"}.mdi-television-speaker-off::before{content:"\F1B1C"}.mdi-television-stop::before{content:"\F0F8A"}.mdi-temperature-celsius::before{content:"\F0504"}.mdi-temperature-fahrenheit::before{content:"\F0505"}.mdi-temperature-kelvin::before{content:"\F0506"}.mdi-temple-buddhist::before{content:"\F1B06"}.mdi-temple-buddhist-outline::before{content:"\F1B07"}.mdi-temple-hindu::before{content:"\F1B08"}.mdi-temple-hindu-outline::before{content:"\F1B09"}.mdi-tennis::before{content:"\F0DA0"}.mdi-tennis-ball::before{content:"\F0507"}.mdi-tennis-ball-outline::before{content:"\F1C5F"}.mdi-tent::before{content:"\F0508"}.mdi-terraform::before{content:"\F1062"}.mdi-terrain::before{content:"\F0509"}.mdi-test-tube::before{content:"\F0668"}.mdi-test-tube-empty::before{content:"\F0911"}.mdi-test-tube-off::before{content:"\F0912"}.mdi-text::before{content:"\F09A8"}.mdi-text-account::before{content:"\F1570"}.mdi-text-box::before{content:"\F021A"}.mdi-text-box-check::before{content:"\F0EA6"}.mdi-text-box-check-outline::before{content:"\F0EA7"}.mdi-text-box-edit::before{content:"\F1A7C"}.mdi-text-box-edit-outline::before{content:"\F1A7D"}.mdi-text-box-minus::before{content:"\F0EA8"}.mdi-text-box-minus-outline::before{content:"\F0EA9"}.mdi-text-box-multiple::before{content:"\F0AB7"}.mdi-text-box-multiple-outline::before{content:"\F0AB8"}.mdi-text-box-outline::before{content:"\F09ED"}.mdi-text-box-plus::before{content:"\F0EAA"}.mdi-text-box-plus-outline::before{content:"\F0EAB"}.mdi-text-box-remove::before{content:"\F0EAC"}.mdi-text-box-remove-outline::before{content:"\F0EAD"}.mdi-text-box-search::before{content:"\F0EAE"}.mdi-text-box-search-outline::before{content:"\F0EAF"}.mdi-text-long::before{content:"\F09AA"}.mdi-text-recognition::before{content:"\F113D"}.mdi-text-search::before{content:"\F13B8"}.mdi-text-search-variant::before{content:"\F1A7E"}.mdi-text-shadow::before{content:"\F0669"}.mdi-text-short::before{content:"\F09A9"}.mdi-texture::before{content:"\F050C"}.mdi-texture-box::before{content:"\F0FE6"}.mdi-theater::before{content:"\F050D"}.mdi-theme-light-dark::before{content:"\F050E"}.mdi-thermometer::before{content:"\F050F"}.mdi-thermometer-alert::before{content:"\F0E01"}.mdi-thermometer-auto::before{content:"\F1B0F"}.mdi-thermometer-bluetooth::before{content:"\F1895"}.mdi-thermometer-check::before{content:"\F1A7F"}.mdi-thermometer-chevron-down::before{content:"\F0E02"}.mdi-thermometer-chevron-up::before{content:"\F0E03"}.mdi-thermometer-high::before{content:"\F10C2"}.mdi-thermometer-lines::before{content:"\F0510"}.mdi-thermometer-low::before{content:"\F10C3"}.mdi-thermometer-minus::before{content:"\F0E04"}.mdi-thermometer-off::before{content:"\F1531"}.mdi-thermometer-plus::before{content:"\F0E05"}.mdi-thermometer-probe::before{content:"\F1B2B"}.mdi-thermometer-probe-off::before{content:"\F1B2C"}.mdi-thermometer-water::before{content:"\F1A80"}.mdi-thermostat::before{content:"\F0393"}.mdi-thermostat-auto::before{content:"\F1B17"}.mdi-thermostat-box::before{content:"\F0891"}.mdi-thermostat-box-auto::before{content:"\F1B18"}.mdi-thermostat-cog::before{content:"\F1C80"}.mdi-thought-bubble::before{content:"\F07F6"}.mdi-thought-bubble-outline::before{content:"\F07F7"}.mdi-thumb-down::before{content:"\F0511"}.mdi-thumb-down-outline::before{content:"\F0512"}.mdi-thumb-up::before{content:"\F0513"}.mdi-thumb-up-outline::before{content:"\F0514"}.mdi-thumbs-up-down::before{content:"\F0515"}.mdi-thumbs-up-down-outline::before{content:"\F1914"}.mdi-ticket::before{content:"\F0516"}.mdi-ticket-account::before{content:"\F0517"}.mdi-ticket-confirmation::before{content:"\F0518"}.mdi-ticket-confirmation-outline::before{content:"\F13AA"}.mdi-ticket-outline::before{content:"\F0913"}.mdi-ticket-percent::before{content:"\F0724"}.mdi-ticket-percent-outline::before{content:"\F142B"}.mdi-tie::before{content:"\F0519"}.mdi-tilde::before{content:"\F0725"}.mdi-tilde-off::before{content:"\F18F3"}.mdi-timelapse::before{content:"\F051A"}.mdi-timeline::before{content:"\F0BD1"}.mdi-timeline-alert::before{content:"\F0F95"}.mdi-timeline-alert-outline::before{content:"\F0F98"}.mdi-timeline-check::before{content:"\F1532"}.mdi-timeline-check-outline::before{content:"\F1533"}.mdi-timeline-clock::before{content:"\F11FB"}.mdi-timeline-clock-outline::before{content:"\F11FC"}.mdi-timeline-minus::before{content:"\F1534"}.mdi-timeline-minus-outline::before{content:"\F1535"}.mdi-timeline-outline::before{content:"\F0BD2"}.mdi-timeline-plus::before{content:"\F0F96"}.mdi-timeline-plus-outline::before{content:"\F0F97"}.mdi-timeline-question::before{content:"\F0F99"}.mdi-timeline-question-outline::before{content:"\F0F9A"}.mdi-timeline-remove::before{content:"\F1536"}.mdi-timeline-remove-outline::before{content:"\F1537"}.mdi-timeline-text::before{content:"\F0BD3"}.mdi-timeline-text-outline::before{content:"\F0BD4"}.mdi-timer::before{content:"\F13AB"}.mdi-timer-10::before{content:"\F051C"}.mdi-timer-3::before{content:"\F051D"}.mdi-timer-alert::before{content:"\F1ACC"}.mdi-timer-alert-outline::before{content:"\F1ACD"}.mdi-timer-cancel::before{content:"\F1ACE"}.mdi-timer-cancel-outline::before{content:"\F1ACF"}.mdi-timer-check::before{content:"\F1AD0"}.mdi-timer-check-outline::before{content:"\F1AD1"}.mdi-timer-cog::before{content:"\F1925"}.mdi-timer-cog-outline::before{content:"\F1926"}.mdi-timer-edit::before{content:"\F1AD2"}.mdi-timer-edit-outline::before{content:"\F1AD3"}.mdi-timer-lock::before{content:"\F1AD4"}.mdi-timer-lock-open::before{content:"\F1AD5"}.mdi-timer-lock-open-outline::before{content:"\F1AD6"}.mdi-timer-lock-outline::before{content:"\F1AD7"}.mdi-timer-marker::before{content:"\F1AD8"}.mdi-timer-marker-outline::before{content:"\F1AD9"}.mdi-timer-minus::before{content:"\F1ADA"}.mdi-timer-minus-outline::before{content:"\F1ADB"}.mdi-timer-music::before{content:"\F1ADC"}.mdi-timer-music-outline::before{content:"\F1ADD"}.mdi-timer-off::before{content:"\F13AC"}.mdi-timer-off-outline::before{content:"\F051E"}.mdi-timer-outline::before{content:"\F051B"}.mdi-timer-pause::before{content:"\F1ADE"}.mdi-timer-pause-outline::before{content:"\F1ADF"}.mdi-timer-play::before{content:"\F1AE0"}.mdi-timer-play-outline::before{content:"\F1AE1"}.mdi-timer-plus::before{content:"\F1AE2"}.mdi-timer-plus-outline::before{content:"\F1AE3"}.mdi-timer-refresh::before{content:"\F1AE4"}.mdi-timer-refresh-outline::before{content:"\F1AE5"}.mdi-timer-remove::before{content:"\F1AE6"}.mdi-timer-remove-outline::before{content:"\F1AE7"}.mdi-timer-sand::before{content:"\F051F"}.mdi-timer-sand-complete::before{content:"\F199F"}.mdi-timer-sand-empty::before{content:"\F06AD"}.mdi-timer-sand-full::before{content:"\F078C"}.mdi-timer-sand-paused::before{content:"\F19A0"}.mdi-timer-settings::before{content:"\F1923"}.mdi-timer-settings-outline::before{content:"\F1924"}.mdi-timer-star::before{content:"\F1AE8"}.mdi-timer-star-outline::before{content:"\F1AE9"}.mdi-timer-stop::before{content:"\F1AEA"}.mdi-timer-stop-outline::before{content:"\F1AEB"}.mdi-timer-sync::before{content:"\F1AEC"}.mdi-timer-sync-outline::before{content:"\F1AED"}.mdi-timetable::before{content:"\F0520"}.mdi-tire::before{content:"\F1896"}.mdi-toaster::before{content:"\F1063"}.mdi-toaster-off::before{content:"\F11B7"}.mdi-toaster-oven::before{content:"\F0CD3"}.mdi-toggle-switch::before{content:"\F0521"}.mdi-toggle-switch-off::before{content:"\F0522"}.mdi-toggle-switch-off-outline::before{content:"\F0A19"}.mdi-toggle-switch-outline::before{content:"\F0A1A"}.mdi-toggle-switch-variant::before{content:"\F1A25"}.mdi-toggle-switch-variant-off::before{content:"\F1A26"}.mdi-toilet::before{content:"\F09AB"}.mdi-toolbox::before{content:"\F09AC"}.mdi-toolbox-outline::before{content:"\F09AD"}.mdi-tools::before{content:"\F1064"}.mdi-tooltip::before{content:"\F0523"}.mdi-tooltip-account::before{content:"\F000C"}.mdi-tooltip-cellphone::before{content:"\F183B"}.mdi-tooltip-check::before{content:"\F155C"}.mdi-tooltip-check-outline::before{content:"\F155D"}.mdi-tooltip-edit::before{content:"\F0524"}.mdi-tooltip-edit-outline::before{content:"\F12C5"}.mdi-tooltip-image::before{content:"\F0525"}.mdi-tooltip-image-outline::before{content:"\F0BD5"}.mdi-tooltip-minus::before{content:"\F155E"}.mdi-tooltip-minus-outline::before{content:"\F155F"}.mdi-tooltip-outline::before{content:"\F0526"}.mdi-tooltip-plus::before{content:"\F0BD6"}.mdi-tooltip-plus-outline::before{content:"\F0527"}.mdi-tooltip-question::before{content:"\F1BBA"}.mdi-tooltip-question-outline::before{content:"\F1BBB"}.mdi-tooltip-remove::before{content:"\F1560"}.mdi-tooltip-remove-outline::before{content:"\F1561"}.mdi-tooltip-text::before{content:"\F0528"}.mdi-tooltip-text-outline::before{content:"\F0BD7"}.mdi-tooth::before{content:"\F08C3"}.mdi-tooth-outline::before{content:"\F0529"}.mdi-toothbrush::before{content:"\F1129"}.mdi-toothbrush-electric::before{content:"\F112C"}.mdi-toothbrush-paste::before{content:"\F112A"}.mdi-torch::before{content:"\F1606"}.mdi-tortoise::before{content:"\F0D3B"}.mdi-toslink::before{content:"\F12B8"}.mdi-touch-text-outline::before{content:"\F1C60"}.mdi-tournament::before{content:"\F09AE"}.mdi-tow-truck::before{content:"\F083C"}.mdi-tower-beach::before{content:"\F0681"}.mdi-tower-fire::before{content:"\F0682"}.mdi-town-hall::before{content:"\F1875"}.mdi-toy-brick::before{content:"\F1288"}.mdi-toy-brick-marker::before{content:"\F1289"}.mdi-toy-brick-marker-outline::before{content:"\F128A"}.mdi-toy-brick-minus::before{content:"\F128B"}.mdi-toy-brick-minus-outline::before{content:"\F128C"}.mdi-toy-brick-outline::before{content:"\F128D"}.mdi-toy-brick-plus::before{content:"\F128E"}.mdi-toy-brick-plus-outline::before{content:"\F128F"}.mdi-toy-brick-remove::before{content:"\F1290"}.mdi-toy-brick-remove-outline::before{content:"\F1291"}.mdi-toy-brick-search::before{content:"\F1292"}.mdi-toy-brick-search-outline::before{content:"\F1293"}.mdi-track-light::before{content:"\F0914"}.mdi-track-light-off::before{content:"\F1B01"}.mdi-trackpad::before{content:"\F07F8"}.mdi-trackpad-lock::before{content:"\F0933"}.mdi-tractor::before{content:"\F0892"}.mdi-tractor-variant::before{content:"\F14C4"}.mdi-trademark::before{content:"\F0A78"}.mdi-traffic-cone::before{content:"\F137C"}.mdi-traffic-light::before{content:"\F052B"}.mdi-traffic-light-outline::before{content:"\F182A"}.mdi-train::before{content:"\F052C"}.mdi-train-bus::before{content:"\F1CC7"}.mdi-train-car::before{content:"\F0BD8"}.mdi-train-car-autorack::before{content:"\F1B2D"}.mdi-train-car-box::before{content:"\F1B2E"}.mdi-train-car-box-full::before{content:"\F1B2F"}.mdi-train-car-box-open::before{content:"\F1B30"}.mdi-train-car-caboose::before{content:"\F1B31"}.mdi-train-car-centerbeam::before{content:"\F1B32"}.mdi-train-car-centerbeam-full::before{content:"\F1B33"}.mdi-train-car-container::before{content:"\F1B34"}.mdi-train-car-flatbed::before{content:"\F1B35"}.mdi-train-car-flatbed-car::before{content:"\F1B36"}.mdi-train-car-flatbed-tank::before{content:"\F1B37"}.mdi-train-car-gondola::before{content:"\F1B38"}.mdi-train-car-gondola-full::before{content:"\F1B39"}.mdi-train-car-hopper::before{content:"\F1B3A"}.mdi-train-car-hopper-covered::before{content:"\F1B3B"}.mdi-train-car-hopper-full::before{content:"\F1B3C"}.mdi-train-car-intermodal::before{content:"\F1B3D"}.mdi-train-car-passenger::before{content:"\F1733"}.mdi-train-car-passenger-door::before{content:"\F1734"}.mdi-train-car-passenger-door-open::before{content:"\F1735"}.mdi-train-car-passenger-variant::before{content:"\F1736"}.mdi-train-car-tank::before{content:"\F1B3E"}.mdi-train-variant::before{content:"\F08C4"}.mdi-tram::before{content:"\F052D"}.mdi-tram-side::before{content:"\F0FE7"}.mdi-transcribe::before{content:"\F052E"}.mdi-transcribe-close::before{content:"\F052F"}.mdi-transfer::before{content:"\F1065"}.mdi-transfer-down::before{content:"\F0DA1"}.mdi-transfer-left::before{content:"\F0DA2"}.mdi-transfer-right::before{content:"\F0530"}.mdi-transfer-up::before{content:"\F0DA3"}.mdi-transit-connection::before{content:"\F0D3C"}.mdi-transit-connection-horizontal::before{content:"\F1546"}.mdi-transit-connection-variant::before{content:"\F0D3D"}.mdi-transit-detour::before{content:"\F0F8B"}.mdi-transit-skip::before{content:"\F1515"}.mdi-transit-transfer::before{content:"\F06AE"}.mdi-transition::before{content:"\F0915"}.mdi-transition-masked::before{content:"\F0916"}.mdi-translate::before{content:"\F05CA"}.mdi-translate-off::before{content:"\F0E06"}.mdi-translate-variant::before{content:"\F1B99"}.mdi-transmission-tower::before{content:"\F0D3E"}.mdi-transmission-tower-export::before{content:"\F192C"}.mdi-transmission-tower-import::before{content:"\F192D"}.mdi-transmission-tower-off::before{content:"\F19DD"}.mdi-trash-can::before{content:"\F0A79"}.mdi-trash-can-outline::before{content:"\F0A7A"}.mdi-tray::before{content:"\F1294"}.mdi-tray-alert::before{content:"\F1295"}.mdi-tray-arrow-down::before{content:"\F0120"}.mdi-tray-arrow-up::before{content:"\F011D"}.mdi-tray-full::before{content:"\F1296"}.mdi-tray-minus::before{content:"\F1297"}.mdi-tray-plus::before{content:"\F1298"}.mdi-tray-remove::before{content:"\F1299"}.mdi-treasure-chest::before{content:"\F0726"}.mdi-treasure-chest-outline::before{content:"\F1C77"}.mdi-tree::before{content:"\F0531"}.mdi-tree-outline::before{content:"\F0E69"}.mdi-trello::before{content:"\F0532"}.mdi-trending-down::before{content:"\F0533"}.mdi-trending-neutral::before{content:"\F0534"}.mdi-trending-up::before{content:"\F0535"}.mdi-triangle::before{content:"\F0536"}.mdi-triangle-down::before{content:"\F1C56"}.mdi-triangle-down-outline::before{content:"\F1C57"}.mdi-triangle-outline::before{content:"\F0537"}.mdi-triangle-small-down::before{content:"\F1A09"}.mdi-triangle-small-up::before{content:"\F1A0A"}.mdi-triangle-wave::before{content:"\F147C"}.mdi-triforce::before{content:"\F0BD9"}.mdi-trophy::before{content:"\F0538"}.mdi-trophy-award::before{content:"\F0539"}.mdi-trophy-broken::before{content:"\F0DA4"}.mdi-trophy-outline::before{content:"\F053A"}.mdi-trophy-variant::before{content:"\F053B"}.mdi-trophy-variant-outline::before{content:"\F053C"}.mdi-truck::before{content:"\F053D"}.mdi-truck-alert::before{content:"\F19DE"}.mdi-truck-alert-outline::before{content:"\F19DF"}.mdi-truck-cargo-container::before{content:"\F18D8"}.mdi-truck-check::before{content:"\F0CD4"}.mdi-truck-check-outline::before{content:"\F129A"}.mdi-truck-delivery::before{content:"\F053E"}.mdi-truck-delivery-outline::before{content:"\F129B"}.mdi-truck-fast::before{content:"\F0788"}.mdi-truck-fast-outline::before{content:"\F129C"}.mdi-truck-flatbed::before{content:"\F1891"}.mdi-truck-minus::before{content:"\F19AE"}.mdi-truck-minus-outline::before{content:"\F19BD"}.mdi-truck-off-road::before{content:"\F1C9E"}.mdi-truck-off-road-off::before{content:"\F1C9F"}.mdi-truck-outline::before{content:"\F129D"}.mdi-truck-plus::before{content:"\F19AD"}.mdi-truck-plus-outline::before{content:"\F19BC"}.mdi-truck-remove::before{content:"\F19AF"}.mdi-truck-remove-outline::before{content:"\F19BE"}.mdi-truck-snowflake::before{content:"\F19A6"}.mdi-truck-trailer::before{content:"\F0727"}.mdi-trumpet::before{content:"\F1096"}.mdi-tshirt-crew::before{content:"\F0A7B"}.mdi-tshirt-crew-outline::before{content:"\F053F"}.mdi-tshirt-v::before{content:"\F0A7C"}.mdi-tshirt-v-outline::before{content:"\F0540"}.mdi-tsunami::before{content:"\F1A81"}.mdi-tumble-dryer::before{content:"\F0917"}.mdi-tumble-dryer-alert::before{content:"\F11BA"}.mdi-tumble-dryer-off::before{content:"\F11BB"}.mdi-tune::before{content:"\F062E"}.mdi-tune-variant::before{content:"\F1542"}.mdi-tune-vertical::before{content:"\F066A"}.mdi-tune-vertical-variant::before{content:"\F1543"}.mdi-tunnel::before{content:"\F183D"}.mdi-tunnel-outline::before{content:"\F183E"}.mdi-turbine::before{content:"\F1A82"}.mdi-turkey::before{content:"\F171B"}.mdi-turnstile::before{content:"\F0CD5"}.mdi-turnstile-outline::before{content:"\F0CD6"}.mdi-turtle::before{content:"\F0CD7"}.mdi-twitch::before{content:"\F0543"}.mdi-twitter::before{content:"\F0544"}.mdi-two-factor-authentication::before{content:"\F09AF"}.mdi-typewriter::before{content:"\F0F2D"}.mdi-ubisoft::before{content:"\F0BDA"}.mdi-ubuntu::before{content:"\F0548"}.mdi-ufo::before{content:"\F10C4"}.mdi-ufo-outline::before{content:"\F10C5"}.mdi-ultra-high-definition::before{content:"\F07F9"}.mdi-umbraco::before{content:"\F0549"}.mdi-umbrella::before{content:"\F054A"}.mdi-umbrella-beach::before{content:"\F188A"}.mdi-umbrella-beach-outline::before{content:"\F188B"}.mdi-umbrella-closed::before{content:"\F09B0"}.mdi-umbrella-closed-outline::before{content:"\F13E2"}.mdi-umbrella-closed-variant::before{content:"\F13E1"}.mdi-umbrella-outline::before{content:"\F054B"}.mdi-underwear-outline::before{content:"\F1D0F"}.mdi-undo::before{content:"\F054C"}.mdi-undo-variant::before{content:"\F054D"}.mdi-unfold-less-horizontal::before{content:"\F054E"}.mdi-unfold-less-vertical::before{content:"\F0760"}.mdi-unfold-more-horizontal::before{content:"\F054F"}.mdi-unfold-more-vertical::before{content:"\F0761"}.mdi-ungroup::before{content:"\F0550"}.mdi-unicode::before{content:"\F0ED0"}.mdi-unicorn::before{content:"\F15C2"}.mdi-unicorn-variant::before{content:"\F15C3"}.mdi-unicycle::before{content:"\F15E5"}.mdi-unity::before{content:"\F06AF"}.mdi-unreal::before{content:"\F09B1"}.mdi-update::before{content:"\F06B0"}.mdi-upload::before{content:"\F0552"}.mdi-upload-box::before{content:"\F1D10"}.mdi-upload-box-outline::before{content:"\F1D11"}.mdi-upload-circle::before{content:"\F1D12"}.mdi-upload-circle-outline::before{content:"\F1D13"}.mdi-upload-lock::before{content:"\F1373"}.mdi-upload-lock-outline::before{content:"\F1374"}.mdi-upload-multiple::before{content:"\F083D"}.mdi-upload-multiple-outline::before{content:"\F1D14"}.mdi-upload-network::before{content:"\F06F6"}.mdi-upload-network-outline::before{content:"\F0CD8"}.mdi-upload-off::before{content:"\F10C6"}.mdi-upload-off-outline::before{content:"\F10C7"}.mdi-upload-outline::before{content:"\F0E07"}.mdi-usb::before{content:"\F0553"}.mdi-usb-c-port::before{content:"\F1CBF"}.mdi-usb-flash-drive::before{content:"\F129E"}.mdi-usb-flash-drive-outline::before{content:"\F129F"}.mdi-usb-port::before{content:"\F11F0"}.mdi-vacuum::before{content:"\F19A1"}.mdi-vacuum-outline::before{content:"\F19A2"}.mdi-valve::before{content:"\F1066"}.mdi-valve-closed::before{content:"\F1067"}.mdi-valve-open::before{content:"\F1068"}.mdi-van-passenger::before{content:"\F07FA"}.mdi-van-utility::before{content:"\F07FB"}.mdi-vanish::before{content:"\F07FC"}.mdi-vanish-quarter::before{content:"\F1554"}.mdi-vanity-light::before{content:"\F11E1"}.mdi-variable::before{content:"\F0AE7"}.mdi-variable-box::before{content:"\F1111"}.mdi-vector-arrange-above::before{content:"\F0554"}.mdi-vector-arrange-below::before{content:"\F0555"}.mdi-vector-bezier::before{content:"\F0AE8"}.mdi-vector-circle::before{content:"\F0556"}.mdi-vector-circle-variant::before{content:"\F0557"}.mdi-vector-combine::before{content:"\F0558"}.mdi-vector-curve::before{content:"\F0559"}.mdi-vector-difference::before{content:"\F055A"}.mdi-vector-difference-ab::before{content:"\F055B"}.mdi-vector-difference-ba::before{content:"\F055C"}.mdi-vector-ellipse::before{content:"\F0893"}.mdi-vector-intersection::before{content:"\F055D"}.mdi-vector-line::before{content:"\F055E"}.mdi-vector-link::before{content:"\F0FE8"}.mdi-vector-point::before{content:"\F01C4"}.mdi-vector-point-edit::before{content:"\F09E8"}.mdi-vector-point-minus::before{content:"\F1B78"}.mdi-vector-point-plus::before{content:"\F1B79"}.mdi-vector-point-select::before{content:"\F055F"}.mdi-vector-polygon::before{content:"\F0560"}.mdi-vector-polygon-variant::before{content:"\F1856"}.mdi-vector-polyline::before{content:"\F0561"}.mdi-vector-polyline-edit::before{content:"\F1225"}.mdi-vector-polyline-minus::before{content:"\F1226"}.mdi-vector-polyline-plus::before{content:"\F1227"}.mdi-vector-polyline-remove::before{content:"\F1228"}.mdi-vector-radius::before{content:"\F074A"}.mdi-vector-rectangle::before{content:"\F05C6"}.mdi-vector-selection::before{content:"\F0562"}.mdi-vector-square::before{content:"\F0001"}.mdi-vector-square-close::before{content:"\F1857"}.mdi-vector-square-edit::before{content:"\F18D9"}.mdi-vector-square-minus::before{content:"\F18DA"}.mdi-vector-square-open::before{content:"\F1858"}.mdi-vector-square-plus::before{content:"\F18DB"}.mdi-vector-square-remove::before{content:"\F18DC"}.mdi-vector-triangle::before{content:"\F0563"}.mdi-vector-union::before{content:"\F0564"}.mdi-vhs::before{content:"\F0A1B"}.mdi-vibrate::before{content:"\F0566"}.mdi-vibrate-off::before{content:"\F0CD9"}.mdi-video::before{content:"\F0567"}.mdi-video-2d::before{content:"\F1A1C"}.mdi-video-3d::before{content:"\F07FD"}.mdi-video-3d-off::before{content:"\F13D9"}.mdi-video-3d-variant::before{content:"\F0ED1"}.mdi-video-4k-box::before{content:"\F083E"}.mdi-video-account::before{content:"\F0919"}.mdi-video-box::before{content:"\F00FD"}.mdi-video-box-off::before{content:"\F00FE"}.mdi-video-check::before{content:"\F1069"}.mdi-video-check-outline::before{content:"\F106A"}.mdi-video-high-definition::before{content:"\F152E"}.mdi-video-image::before{content:"\F091A"}.mdi-video-input-antenna::before{content:"\F083F"}.mdi-video-input-component::before{content:"\F0840"}.mdi-video-input-hdmi::before{content:"\F0841"}.mdi-video-input-scart::before{content:"\F0F8C"}.mdi-video-input-svideo::before{content:"\F0842"}.mdi-video-marker::before{content:"\F19A9"}.mdi-video-marker-outline::before{content:"\F19AA"}.mdi-video-minus::before{content:"\F09B2"}.mdi-video-minus-outline::before{content:"\F02BA"}.mdi-video-off::before{content:"\F0568"}.mdi-video-off-outline::before{content:"\F0BDB"}.mdi-video-outline::before{content:"\F0BDC"}.mdi-video-plus::before{content:"\F09B3"}.mdi-video-plus-outline::before{content:"\F01D3"}.mdi-video-stabilization::before{content:"\F091B"}.mdi-video-standard-definition::before{content:"\F1CA0"}.mdi-video-switch::before{content:"\F0569"}.mdi-video-switch-outline::before{content:"\F0790"}.mdi-video-vintage::before{content:"\F0A1C"}.mdi-video-wireless::before{content:"\F0ED2"}.mdi-video-wireless-outline::before{content:"\F0ED3"}.mdi-view-agenda::before{content:"\F056A"}.mdi-view-agenda-outline::before{content:"\F11D8"}.mdi-view-array::before{content:"\F056B"}.mdi-view-array-outline::before{content:"\F1485"}.mdi-view-carousel::before{content:"\F056C"}.mdi-view-carousel-outline::before{content:"\F1486"}.mdi-view-column::before{content:"\F056D"}.mdi-view-column-outline::before{content:"\F1487"}.mdi-view-comfy::before{content:"\F0E6A"}.mdi-view-comfy-outline::before{content:"\F1488"}.mdi-view-compact::before{content:"\F0E6B"}.mdi-view-compact-outline::before{content:"\F0E6C"}.mdi-view-dashboard::before{content:"\F056E"}.mdi-view-dashboard-edit::before{content:"\F1947"}.mdi-view-dashboard-edit-outline::before{content:"\F1948"}.mdi-view-dashboard-outline::before{content:"\F0A1D"}.mdi-view-dashboard-variant::before{content:"\F0843"}.mdi-view-dashboard-variant-outline::before{content:"\F1489"}.mdi-view-day::before{content:"\F056F"}.mdi-view-day-outline::before{content:"\F148A"}.mdi-view-gallery::before{content:"\F1888"}.mdi-view-gallery-outline::before{content:"\F1889"}.mdi-view-grid::before{content:"\F0570"}.mdi-view-grid-compact::before{content:"\F1C61"}.mdi-view-grid-outline::before{content:"\F11D9"}.mdi-view-grid-plus::before{content:"\F0F8D"}.mdi-view-grid-plus-outline::before{content:"\F11DA"}.mdi-view-headline::before{content:"\F0571"}.mdi-view-list::before{content:"\F0572"}.mdi-view-list-outline::before{content:"\F148B"}.mdi-view-module::before{content:"\F0573"}.mdi-view-module-outline::before{content:"\F148C"}.mdi-view-parallel::before{content:"\F0728"}.mdi-view-parallel-outline::before{content:"\F148D"}.mdi-view-quilt::before{content:"\F0574"}.mdi-view-quilt-outline::before{content:"\F148E"}.mdi-view-sequential::before{content:"\F0729"}.mdi-view-sequential-outline::before{content:"\F148F"}.mdi-view-split-horizontal::before{content:"\F0BCB"}.mdi-view-split-vertical::before{content:"\F0BCC"}.mdi-view-stream::before{content:"\F0575"}.mdi-view-stream-outline::before{content:"\F1490"}.mdi-view-week::before{content:"\F0576"}.mdi-view-week-outline::before{content:"\F1491"}.mdi-vimeo::before{content:"\F0577"}.mdi-violin::before{content:"\F060F"}.mdi-virtual-reality::before{content:"\F0894"}.mdi-virus::before{content:"\F13B6"}.mdi-virus-off::before{content:"\F18E1"}.mdi-virus-off-outline::before{content:"\F18E2"}.mdi-virus-outline::before{content:"\F13B7"}.mdi-vlc::before{content:"\F057C"}.mdi-voicemail::before{content:"\F057D"}.mdi-volcano::before{content:"\F1A83"}.mdi-volcano-outline::before{content:"\F1A84"}.mdi-volleyball::before{content:"\F09B4"}.mdi-volume-equal::before{content:"\F1B10"}.mdi-volume-high::before{content:"\F057E"}.mdi-volume-low::before{content:"\F057F"}.mdi-volume-medium::before{content:"\F0580"}.mdi-volume-minus::before{content:"\F075E"}.mdi-volume-mute::before{content:"\F075F"}.mdi-volume-off::before{content:"\F0581"}.mdi-volume-plus::before{content:"\F075D"}.mdi-volume-source::before{content:"\F1120"}.mdi-volume-variant-off::before{content:"\F0E08"}.mdi-volume-vibrate::before{content:"\F1121"}.mdi-vote::before{content:"\F0A1F"}.mdi-vote-outline::before{content:"\F0A20"}.mdi-vpn::before{content:"\F0582"}.mdi-vuejs::before{content:"\F0844"}.mdi-vuetify::before{content:"\F0E6D"}.mdi-walk::before{content:"\F0583"}.mdi-wall::before{content:"\F07FE"}.mdi-wall-fire::before{content:"\F1A11"}.mdi-wall-sconce::before{content:"\F091C"}.mdi-wall-sconce-flat::before{content:"\F091D"}.mdi-wall-sconce-flat-outline::before{content:"\F17C9"}.mdi-wall-sconce-flat-variant::before{content:"\F041C"}.mdi-wall-sconce-flat-variant-outline::before{content:"\F17CA"}.mdi-wall-sconce-outline::before{content:"\F17CB"}.mdi-wall-sconce-round::before{content:"\F0748"}.mdi-wall-sconce-round-outline::before{content:"\F17CC"}.mdi-wall-sconce-round-variant::before{content:"\F091E"}.mdi-wall-sconce-round-variant-outline::before{content:"\F17CD"}.mdi-wallet::before{content:"\F0584"}.mdi-wallet-bifold::before{content:"\F1C58"}.mdi-wallet-bifold-outline::before{content:"\F1C59"}.mdi-wallet-giftcard::before{content:"\F0585"}.mdi-wallet-membership::before{content:"\F0586"}.mdi-wallet-outline::before{content:"\F0BDD"}.mdi-wallet-plus::before{content:"\F0F8E"}.mdi-wallet-plus-outline::before{content:"\F0F8F"}.mdi-wallet-travel::before{content:"\F0587"}.mdi-wallpaper::before{content:"\F0E09"}.mdi-wan::before{content:"\F0588"}.mdi-wardrobe::before{content:"\F0F90"}.mdi-wardrobe-outline::before{content:"\F0F91"}.mdi-warehouse::before{content:"\F0F81"}.mdi-washing-machine::before{content:"\F072A"}.mdi-washing-machine-alert::before{content:"\F11BC"}.mdi-washing-machine-off::before{content:"\F11BD"}.mdi-watch::before{content:"\F0589"}.mdi-watch-export::before{content:"\F058A"}.mdi-watch-export-variant::before{content:"\F0895"}.mdi-watch-import::before{content:"\F058B"}.mdi-watch-import-variant::before{content:"\F0896"}.mdi-watch-variant::before{content:"\F0897"}.mdi-watch-vibrate::before{content:"\F06B1"}.mdi-watch-vibrate-off::before{content:"\F0CDA"}.mdi-water::before{content:"\F058C"}.mdi-water-alert::before{content:"\F1502"}.mdi-water-alert-outline::before{content:"\F1503"}.mdi-water-boiler::before{content:"\F0F92"}.mdi-water-boiler-alert::before{content:"\F11B3"}.mdi-water-boiler-auto::before{content:"\F1B98"}.mdi-water-boiler-off::before{content:"\F11B4"}.mdi-water-check::before{content:"\F1504"}.mdi-water-check-outline::before{content:"\F1505"}.mdi-water-circle::before{content:"\F1806"}.mdi-water-minus::before{content:"\F1506"}.mdi-water-minus-outline::before{content:"\F1507"}.mdi-water-off::before{content:"\F058D"}.mdi-water-off-outline::before{content:"\F1508"}.mdi-water-opacity::before{content:"\F1855"}.mdi-water-outline::before{content:"\F0E0A"}.mdi-water-percent::before{content:"\F058E"}.mdi-water-percent-alert::before{content:"\F1509"}.mdi-water-plus::before{content:"\F150A"}.mdi-water-plus-outline::before{content:"\F150B"}.mdi-water-polo::before{content:"\F12A0"}.mdi-water-pump::before{content:"\F058F"}.mdi-water-pump-off::before{content:"\F0F93"}.mdi-water-remove::before{content:"\F150C"}.mdi-water-remove-outline::before{content:"\F150D"}.mdi-water-sync::before{content:"\F17C6"}.mdi-water-thermometer::before{content:"\F1A85"}.mdi-water-thermometer-outline::before{content:"\F1A86"}.mdi-water-well::before{content:"\F106B"}.mdi-water-well-outline::before{content:"\F106C"}.mdi-waterfall::before{content:"\F1849"}.mdi-watering-can::before{content:"\F1481"}.mdi-watering-can-outline::before{content:"\F1482"}.mdi-watermark::before{content:"\F0612"}.mdi-wave::before{content:"\F0F2E"}.mdi-wave-arrow-down::before{content:"\F1CB0"}.mdi-wave-arrow-up::before{content:"\F1CB1"}.mdi-wave-undercurrent::before{content:"\F1CC0"}.mdi-waveform::before{content:"\F147D"}.mdi-waves::before{content:"\F078D"}.mdi-waves-arrow-left::before{content:"\F1859"}.mdi-waves-arrow-right::before{content:"\F185A"}.mdi-waves-arrow-up::before{content:"\F185B"}.mdi-waze::before{content:"\F0BDE"}.mdi-weather-cloudy::before{content:"\F0590"}.mdi-weather-cloudy-alert::before{content:"\F0F2F"}.mdi-weather-cloudy-arrow-right::before{content:"\F0E6E"}.mdi-weather-cloudy-clock::before{content:"\F18F6"}.mdi-weather-dust::before{content:"\F1B5A"}.mdi-weather-fog::before{content:"\F0591"}.mdi-weather-hail::before{content:"\F0592"}.mdi-weather-hazy::before{content:"\F0F30"}.mdi-weather-hurricane::before{content:"\F0898"}.mdi-weather-hurricane-outline::before{content:"\F1C78"}.mdi-weather-lightning::before{content:"\F0593"}.mdi-weather-lightning-rainy::before{content:"\F067E"}.mdi-weather-moonset::before{content:"\F1D15"}.mdi-weather-moonset-down::before{content:"\F1D16"}.mdi-weather-moonset-up::before{content:"\F1D17"}.mdi-weather-night::before{content:"\F0594"}.mdi-weather-night-partly-cloudy::before{content:"\F0F31"}.mdi-weather-partly-cloudy::before{content:"\F0595"}.mdi-weather-partly-lightning::before{content:"\F0F32"}.mdi-weather-partly-rainy::before{content:"\F0F33"}.mdi-weather-partly-snowy::before{content:"\F0F34"}.mdi-weather-partly-snowy-rainy::before{content:"\F0F35"}.mdi-weather-pouring::before{content:"\F0596"}.mdi-weather-rainy::before{content:"\F0597"}.mdi-weather-snowy::before{content:"\F0598"}.mdi-weather-snowy-heavy::before{content:"\F0F36"}.mdi-weather-snowy-rainy::before{content:"\F067F"}.mdi-weather-sunny::before{content:"\F0599"}.mdi-weather-sunny-alert::before{content:"\F0F37"}.mdi-weather-sunny-off::before{content:"\F14E4"}.mdi-weather-sunset::before{content:"\F059A"}.mdi-weather-sunset-down::before{content:"\F059B"}.mdi-weather-sunset-up::before{content:"\F059C"}.mdi-weather-tornado::before{content:"\F0F38"}.mdi-weather-windy::before{content:"\F059D"}.mdi-weather-windy-variant::before{content:"\F059E"}.mdi-web::before{content:"\F059F"}.mdi-web-box::before{content:"\F0F94"}.mdi-web-cancel::before{content:"\F1790"}.mdi-web-check::before{content:"\F0789"}.mdi-web-clock::before{content:"\F124A"}.mdi-web-minus::before{content:"\F10A0"}.mdi-web-off::before{content:"\F0A8E"}.mdi-web-plus::before{content:"\F0033"}.mdi-web-refresh::before{content:"\F1791"}.mdi-web-remove::before{content:"\F0551"}.mdi-web-sync::before{content:"\F1792"}.mdi-webcam::before{content:"\F05A0"}.mdi-webcam-off::before{content:"\F1737"}.mdi-webhook::before{content:"\F062F"}.mdi-webpack::before{content:"\F072B"}.mdi-webrtc::before{content:"\F1248"}.mdi-wechat::before{content:"\F0611"}.mdi-weight::before{content:"\F05A1"}.mdi-weight-gram::before{content:"\F0D3F"}.mdi-weight-kilogram::before{content:"\F05A2"}.mdi-weight-lifter::before{content:"\F115D"}.mdi-weight-pound::before{content:"\F09B5"}.mdi-whatsapp::before{content:"\F05A3"}.mdi-wheel-barrow::before{content:"\F14F2"}.mdi-wheelchair::before{content:"\F1A87"}.mdi-wheelchair-accessibility::before{content:"\F05A4"}.mdi-whistle::before{content:"\F09B6"}.mdi-whistle-outline::before{content:"\F12BC"}.mdi-white-balance-auto::before{content:"\F05A5"}.mdi-white-balance-incandescent::before{content:"\F05A6"}.mdi-white-balance-iridescent::before{content:"\F05A7"}.mdi-white-balance-sunny::before{content:"\F05A8"}.mdi-widgets::before{content:"\F072C"}.mdi-widgets-outline::before{content:"\F1355"}.mdi-wifi::before{content:"\F05A9"}.mdi-wifi-alert::before{content:"\F16B5"}.mdi-wifi-arrow-down::before{content:"\F16B6"}.mdi-wifi-arrow-left::before{content:"\F16B7"}.mdi-wifi-arrow-left-right::before{content:"\F16B8"}.mdi-wifi-arrow-right::before{content:"\F16B9"}.mdi-wifi-arrow-up::before{content:"\F16BA"}.mdi-wifi-arrow-up-down::before{content:"\F16BB"}.mdi-wifi-cancel::before{content:"\F16BC"}.mdi-wifi-check::before{content:"\F16BD"}.mdi-wifi-cog::before{content:"\F16BE"}.mdi-wifi-lock::before{content:"\F16BF"}.mdi-wifi-lock-open::before{content:"\F16C0"}.mdi-wifi-marker::before{content:"\F16C1"}.mdi-wifi-minus::before{content:"\F16C2"}.mdi-wifi-off::before{content:"\F05AA"}.mdi-wifi-plus::before{content:"\F16C3"}.mdi-wifi-refresh::before{content:"\F16C4"}.mdi-wifi-remove::before{content:"\F16C5"}.mdi-wifi-settings::before{content:"\F16C6"}.mdi-wifi-star::before{content:"\F0E0B"}.mdi-wifi-strength-1::before{content:"\F091F"}.mdi-wifi-strength-1-alert::before{content:"\F0920"}.mdi-wifi-strength-1-lock::before{content:"\F0921"}.mdi-wifi-strength-1-lock-open::before{content:"\F16CB"}.mdi-wifi-strength-2::before{content:"\F0922"}.mdi-wifi-strength-2-alert::before{content:"\F0923"}.mdi-wifi-strength-2-lock::before{content:"\F0924"}.mdi-wifi-strength-2-lock-open::before{content:"\F16CC"}.mdi-wifi-strength-3::before{content:"\F0925"}.mdi-wifi-strength-3-alert::before{content:"\F0926"}.mdi-wifi-strength-3-lock::before{content:"\F0927"}.mdi-wifi-strength-3-lock-open::before{content:"\F16CD"}.mdi-wifi-strength-4::before{content:"\F0928"}.mdi-wifi-strength-4-alert::before{content:"\F0929"}.mdi-wifi-strength-4-lock::before{content:"\F092A"}.mdi-wifi-strength-4-lock-open::before{content:"\F16CE"}.mdi-wifi-strength-alert-outline::before{content:"\F092B"}.mdi-wifi-strength-lock-open-outline::before{content:"\F16CF"}.mdi-wifi-strength-lock-outline::before{content:"\F092C"}.mdi-wifi-strength-off::before{content:"\F092D"}.mdi-wifi-strength-off-outline::before{content:"\F092E"}.mdi-wifi-strength-outline::before{content:"\F092F"}.mdi-wifi-sync::before{content:"\F16C7"}.mdi-wikipedia::before{content:"\F05AC"}.mdi-wind-power::before{content:"\F1A88"}.mdi-wind-power-outline::before{content:"\F1A89"}.mdi-wind-turbine::before{content:"\F0DA5"}.mdi-wind-turbine-alert::before{content:"\F19AB"}.mdi-wind-turbine-check::before{content:"\F19AC"}.mdi-window-close::before{content:"\F05AD"}.mdi-window-closed::before{content:"\F05AE"}.mdi-window-closed-variant::before{content:"\F11DB"}.mdi-window-maximize::before{content:"\F05AF"}.mdi-window-minimize::before{content:"\F05B0"}.mdi-window-open::before{content:"\F05B1"}.mdi-window-open-variant::before{content:"\F11DC"}.mdi-window-restore::before{content:"\F05B2"}.mdi-window-shutter::before{content:"\F111C"}.mdi-window-shutter-alert::before{content:"\F111D"}.mdi-window-shutter-auto::before{content:"\F1BA3"}.mdi-window-shutter-cog::before{content:"\F1A8A"}.mdi-window-shutter-open::before{content:"\F111E"}.mdi-window-shutter-settings::before{content:"\F1A8B"}.mdi-windsock::before{content:"\F15FA"}.mdi-wiper::before{content:"\F0AE9"}.mdi-wiper-wash::before{content:"\F0DA6"}.mdi-wiper-wash-alert::before{content:"\F18DF"}.mdi-wizard-hat::before{content:"\F1477"}.mdi-wordpress::before{content:"\F05B4"}.mdi-wrap::before{content:"\F05B6"}.mdi-wrap-disabled::before{content:"\F0BDF"}.mdi-wrench::before{content:"\F05B7"}.mdi-wrench-check::before{content:"\F1B8F"}.mdi-wrench-check-outline::before{content:"\F1B90"}.mdi-wrench-clock::before{content:"\F19A3"}.mdi-wrench-clock-outline::before{content:"\F1B93"}.mdi-wrench-cog::before{content:"\F1B91"}.mdi-wrench-cog-outline::before{content:"\F1B92"}.mdi-wrench-outline::before{content:"\F0BE0"}.mdi-xamarin::before{content:"\F0845"}.mdi-xml::before{content:"\F05C0"}.mdi-xmpp::before{content:"\F07FF"}.mdi-yahoo::before{content:"\F0B4F"}.mdi-yeast::before{content:"\F05C1"}.mdi-yin-yang::before{content:"\F0680"}.mdi-yoga::before{content:"\F117C"}.mdi-youtube::before{content:"\F05C3"}.mdi-youtube-gaming::before{content:"\F0848"}.mdi-youtube-studio::before{content:"\F0847"}.mdi-youtube-subscription::before{content:"\F0D40"}.mdi-youtube-tv::before{content:"\F0448"}.mdi-yurt::before{content:"\F1516"}.mdi-z-wave::before{content:"\F0AEA"}.mdi-zend::before{content:"\F0AEB"}.mdi-zigbee::before{content:"\F0D41"}.mdi-zip-box::before{content:"\F05C4"}.mdi-zip-box-outline::before{content:"\F0FFA"}.mdi-zip-disk::before{content:"\F0A23"}.mdi-zodiac-aquarius::before{content:"\F0A7D"}.mdi-zodiac-aries::before{content:"\F0A7E"}.mdi-zodiac-cancer::before{content:"\F0A7F"}.mdi-zodiac-capricorn::before{content:"\F0A80"}.mdi-zodiac-gemini::before{content:"\F0A81"}.mdi-zodiac-leo::before{content:"\F0A82"}.mdi-zodiac-libra::before{content:"\F0A83"}.mdi-zodiac-pisces::before{content:"\F0A84"}.mdi-zodiac-sagittarius::before{content:"\F0A85"}.mdi-zodiac-scorpio::before{content:"\F0A86"}.mdi-zodiac-taurus::before{content:"\F0A87"}.mdi-zodiac-virgo::before{content:"\F0A88"}.mdi-blank::before{content:"\F68C";visibility:hidden}.mdi-18px.mdi-set,.mdi-18px.mdi:before{font-size:18px}.mdi-24px.mdi-set,.mdi-24px.mdi:before{font-size:24px}.mdi-36px.mdi-set,.mdi-36px.mdi:before{font-size:36px}.mdi-48px.mdi-set,.mdi-48px.mdi:before{font-size:48px}.mdi-dark:before{color:rgba(0,0,0,0.54)}.mdi-dark.mdi-inactive:before{color:rgba(0,0,0,0.26)}.mdi-light:before{color:#fff}.mdi-light.mdi-inactive:before{color:rgba(255,255,255,0.3)}.mdi-rotate-45:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.mdi-rotate-90:before{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.mdi-rotate-135:before{-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg)}.mdi-rotate-180:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.mdi-rotate-225:before{-webkit-transform:rotate(225deg);-ms-transform:rotate(225deg);transform:rotate(225deg)}.mdi-rotate-270:before{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.mdi-rotate-315:before{-webkit-transform:rotate(315deg);-ms-transform:rotate(315deg);transform:rotate(315deg)}.mdi-flip-h:before{-webkit-transform:scaleX(-1);transform:scaleX(-1);filter:FlipH;-ms-filter:"FlipH"}.mdi-flip-v:before{-webkit-transform:scaleY(-1);transform:scaleY(-1);filter:FlipV;-ms-filter:"FlipV"}.mdi-spin:before{-webkit-animation:mdi-spin 2s infinite linear;animation:mdi-spin 2s infinite linear}@-webkit-keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} + +/*# sourceMappingURL=materialdesignicons.css.map */ diff --git a/web/scripts/api.js b/web/scripts/api.js new file mode 100644 index 0000000000000000000000000000000000000000..e022d4e16a51b0363bb836358d085e77f536cf11 --- /dev/null +++ b/web/scripts/api.js @@ -0,0 +1,3 @@ +// Shim for scripts/api.ts +export const ComfyApi = window.comfyAPI.api.ComfyApi; +export const api = window.comfyAPI.api.api; diff --git a/web/scripts/app.js b/web/scripts/app.js new file mode 100644 index 0000000000000000000000000000000000000000..3ae1a239d9d3e1c76cded267eb96e18f16c5058c --- /dev/null +++ b/web/scripts/app.js @@ -0,0 +1,4 @@ +// Shim for scripts/app.ts +export const ANIM_PREVIEW_WIDGET = window.comfyAPI.app.ANIM_PREVIEW_WIDGET; +export const ComfyApp = window.comfyAPI.app.ComfyApp; +export const app = window.comfyAPI.app.app; diff --git a/web/scripts/changeTracker.js b/web/scripts/changeTracker.js new file mode 100644 index 0000000000000000000000000000000000000000..c4c391cf2e4e2be29e3b3f708f358a3d03c50a02 --- /dev/null +++ b/web/scripts/changeTracker.js @@ -0,0 +1,2 @@ +// Shim for scripts/changeTracker.ts +export const ChangeTracker = window.comfyAPI.changeTracker.ChangeTracker; diff --git a/web/scripts/defaultGraph.js b/web/scripts/defaultGraph.js new file mode 100644 index 0000000000000000000000000000000000000000..eaefc5b0c5f53c92f70b436c1a2b1231b98011c5 --- /dev/null +++ b/web/scripts/defaultGraph.js @@ -0,0 +1,4 @@ +// Shim for scripts/defaultGraph.ts +export const defaultGraph = window.comfyAPI.defaultGraph.defaultGraph; +export const defaultGraphJSON = window.comfyAPI.defaultGraph.defaultGraphJSON; +export const blankGraph = window.comfyAPI.defaultGraph.blankGraph; diff --git a/web/scripts/metadata/flac.js b/web/scripts/metadata/flac.js new file mode 100644 index 0000000000000000000000000000000000000000..3b247b43cb08db7b69424450a61b8ea2bd15c10b --- /dev/null +++ b/web/scripts/metadata/flac.js @@ -0,0 +1,3 @@ +// Shim for scripts/metadata/flac.ts +export const getFromFlacBuffer = window.comfyAPI.flac.getFromFlacBuffer; +export const getFromFlacFile = window.comfyAPI.flac.getFromFlacFile; diff --git a/web/scripts/metadata/png.js b/web/scripts/metadata/png.js new file mode 100644 index 0000000000000000000000000000000000000000..789ef4f0ff28e8b2840ed9708258f905d72ec4ec --- /dev/null +++ b/web/scripts/metadata/png.js @@ -0,0 +1,3 @@ +// Shim for scripts/metadata/png.ts +export const getFromPngBuffer = window.comfyAPI.png.getFromPngBuffer; +export const getFromPngFile = window.comfyAPI.png.getFromPngFile; diff --git a/web/scripts/pnginfo.js b/web/scripts/pnginfo.js new file mode 100644 index 0000000000000000000000000000000000000000..991d2929c6d10fde1bbea111b9ff2eb45efbe8ac --- /dev/null +++ b/web/scripts/pnginfo.js @@ -0,0 +1,6 @@ +// Shim for scripts/pnginfo.ts +export const getPngMetadata = window.comfyAPI.pnginfo.getPngMetadata; +export const getFlacMetadata = window.comfyAPI.pnginfo.getFlacMetadata; +export const getWebpMetadata = window.comfyAPI.pnginfo.getWebpMetadata; +export const getLatentMetadata = window.comfyAPI.pnginfo.getLatentMetadata; +export const importA1111 = window.comfyAPI.pnginfo.importA1111; diff --git a/web/scripts/ui.js b/web/scripts/ui.js new file mode 100644 index 0000000000000000000000000000000000000000..948a039b8de1d7c1c53b74183908a68acd48c864 --- /dev/null +++ b/web/scripts/ui.js @@ -0,0 +1,4 @@ +// Shim for scripts/ui.ts +export const ComfyDialog = window.comfyAPI.ui.ComfyDialog; +export const $el = window.comfyAPI.ui.$el; +export const ComfyUI = window.comfyAPI.ui.ComfyUI; diff --git a/web/scripts/ui/components/asyncDialog.js b/web/scripts/ui/components/asyncDialog.js new file mode 100644 index 0000000000000000000000000000000000000000..43a8e19e696ade2104c64fff2f0acfca5d7b5f65 --- /dev/null +++ b/web/scripts/ui/components/asyncDialog.js @@ -0,0 +1,2 @@ +// Shim for scripts/ui/components/asyncDialog.ts +export const ComfyAsyncDialog = window.comfyAPI.asyncDialog.ComfyAsyncDialog; diff --git a/web/scripts/ui/components/button.js b/web/scripts/ui/components/button.js new file mode 100644 index 0000000000000000000000000000000000000000..7fe39ee29bde796cdb8e191ce8856b49c884d1d5 --- /dev/null +++ b/web/scripts/ui/components/button.js @@ -0,0 +1,2 @@ +// Shim for scripts/ui/components/button.ts +export const ComfyButton = window.comfyAPI.button.ComfyButton; diff --git a/web/scripts/ui/components/buttonGroup.js b/web/scripts/ui/components/buttonGroup.js new file mode 100644 index 0000000000000000000000000000000000000000..5fa0021ab1c5076750a05db26f9ce393e6764955 --- /dev/null +++ b/web/scripts/ui/components/buttonGroup.js @@ -0,0 +1,2 @@ +// Shim for scripts/ui/components/buttonGroup.ts +export const ComfyButtonGroup = window.comfyAPI.buttonGroup.ComfyButtonGroup; diff --git a/web/scripts/ui/components/popup.js b/web/scripts/ui/components/popup.js new file mode 100644 index 0000000000000000000000000000000000000000..93f9f093dc323d70c241cbe499c5393a9a2f00a5 --- /dev/null +++ b/web/scripts/ui/components/popup.js @@ -0,0 +1,2 @@ +// Shim for scripts/ui/components/popup.ts +export const ComfyPopup = window.comfyAPI.popup.ComfyPopup; diff --git a/web/scripts/ui/components/splitButton.js b/web/scripts/ui/components/splitButton.js new file mode 100644 index 0000000000000000000000000000000000000000..53a21b69b7fbbcd02e42aa7e311b82c4b31b1ae1 --- /dev/null +++ b/web/scripts/ui/components/splitButton.js @@ -0,0 +1,2 @@ +// Shim for scripts/ui/components/splitButton.ts +export const ComfySplitButton = window.comfyAPI.splitButton.ComfySplitButton; diff --git a/web/scripts/ui/dialog.js b/web/scripts/ui/dialog.js new file mode 100644 index 0000000000000000000000000000000000000000..7475d42fa90c456f45815c9e0732d5ec3b644f85 --- /dev/null +++ b/web/scripts/ui/dialog.js @@ -0,0 +1,2 @@ +// Shim for scripts/ui/dialog.ts +export const ComfyDialog = window.comfyAPI.dialog.ComfyDialog; diff --git a/web/scripts/ui/draggableList.js b/web/scripts/ui/draggableList.js new file mode 100644 index 0000000000000000000000000000000000000000..2c9596550ef8301a4da3e2c8d9d5c158286aff91 --- /dev/null +++ b/web/scripts/ui/draggableList.js @@ -0,0 +1,2 @@ +// Shim for scripts/ui/draggableList.ts +export const DraggableList = window.comfyAPI.draggableList.DraggableList; diff --git a/web/scripts/ui/imagePreview.js b/web/scripts/ui/imagePreview.js new file mode 100644 index 0000000000000000000000000000000000000000..4153bbf5fbfad97c8f744ab2175e4f404428c3c6 --- /dev/null +++ b/web/scripts/ui/imagePreview.js @@ -0,0 +1,3 @@ +// Shim for scripts/ui/imagePreview.ts +export const calculateImageGrid = window.comfyAPI.imagePreview.calculateImageGrid; +export const createImageHost = window.comfyAPI.imagePreview.createImageHost; diff --git a/web/scripts/ui/menu/index.js b/web/scripts/ui/menu/index.js new file mode 100644 index 0000000000000000000000000000000000000000..777b5b9930b40b630b6bbe3a2b9a1a1505e1353d --- /dev/null +++ b/web/scripts/ui/menu/index.js @@ -0,0 +1,2 @@ +// Shim for scripts/ui/menu/index.ts +export const ComfyAppMenu = window.comfyAPI.index.ComfyAppMenu; diff --git a/web/scripts/ui/settings.js b/web/scripts/ui/settings.js new file mode 100644 index 0000000000000000000000000000000000000000..3fd01c755fa8ea7ffa7c10701ff508491e063c85 --- /dev/null +++ b/web/scripts/ui/settings.js @@ -0,0 +1,2 @@ +// Shim for scripts/ui/settings.ts +export const ComfySettingsDialog = window.comfyAPI.settings.ComfySettingsDialog; diff --git a/web/scripts/ui/toggleSwitch.js b/web/scripts/ui/toggleSwitch.js new file mode 100644 index 0000000000000000000000000000000000000000..21be93d173e49405bc2d21b2500a5ee70c002d89 --- /dev/null +++ b/web/scripts/ui/toggleSwitch.js @@ -0,0 +1,2 @@ +// Shim for scripts/ui/toggleSwitch.ts +export const toggleSwitch = window.comfyAPI.toggleSwitch.toggleSwitch; diff --git a/web/scripts/ui/utils.js b/web/scripts/ui/utils.js new file mode 100644 index 0000000000000000000000000000000000000000..cd4b49137358530c255cd8c8ef21b297174fac0c --- /dev/null +++ b/web/scripts/ui/utils.js @@ -0,0 +1,3 @@ +// Shim for scripts/ui/utils.ts +export const applyClasses = window.comfyAPI.utils.applyClasses; +export const toggleElement = window.comfyAPI.utils.toggleElement; diff --git a/web/scripts/utils.js b/web/scripts/utils.js new file mode 100644 index 0000000000000000000000000000000000000000..8bff241fa04904340d68501e43c0c65ddbad5aac --- /dev/null +++ b/web/scripts/utils.js @@ -0,0 +1,9 @@ +// Shim for scripts/utils.ts +export const clone = window.comfyAPI.utils.clone; +export const applyTextReplacements = window.comfyAPI.utils.applyTextReplacements; +export const addStylesheet = window.comfyAPI.utils.addStylesheet; +export const downloadBlob = window.comfyAPI.utils.downloadBlob; +export const uploadFile = window.comfyAPI.utils.uploadFile; +export const prop = window.comfyAPI.utils.prop; +export const getStorageValue = window.comfyAPI.utils.getStorageValue; +export const setStorageValue = window.comfyAPI.utils.setStorageValue; diff --git a/web/scripts/widgets.js b/web/scripts/widgets.js new file mode 100644 index 0000000000000000000000000000000000000000..dd4dcb4e375b39ff9944d063ed3576ca097632de --- /dev/null +++ b/web/scripts/widgets.js @@ -0,0 +1,6 @@ +// Shim for scripts/widgets.ts +export const updateControlWidgetLabel = window.comfyAPI.widgets.updateControlWidgetLabel; +export const IS_CONTROL_WIDGET = window.comfyAPI.widgets.IS_CONTROL_WIDGET; +export const addValueControlWidget = window.comfyAPI.widgets.addValueControlWidget; +export const addValueControlWidgets = window.comfyAPI.widgets.addValueControlWidgets; +export const ComfyWidgets = window.comfyAPI.widgets.ComfyWidgets; diff --git a/web/templates/default.jpg b/web/templates/default.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2b870cef72112082e940fbf9fa00ee05ce62d37 Binary files /dev/null and b/web/templates/default.jpg differ diff --git a/web/templates/default.json b/web/templates/default.json new file mode 100644 index 0000000000000000000000000000000000000000..5a97075d897287d335694a848fadacf7504855fa --- /dev/null +++ b/web/templates/default.json @@ -0,0 +1,356 @@ +{ + "last_node_id": 9, + "last_link_id": 9, + "nodes": [ + { + "id": 7, + "type": "CLIPTextEncode", + "pos": [ + 413, + 389 + ], + "size": [ + 425.27801513671875, + 180.6060791015625 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 6 + ], + "slot_index": 0 + } + ], + "properties": {}, + "widgets_values": [ + "text, watermark" + ] + }, + { + "id": 6, + "type": "CLIPTextEncode", + "pos": [ + 415, + 186 + ], + "size": [ + 422.84503173828125, + 164.31304931640625 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 3 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4 + ], + "slot_index": 0 + } + ], + "properties": {}, + "widgets_values": [ + "beautiful scenery nature glass bottle landscape, , purple galaxy bottle," + ] + }, + { + "id": 5, + "type": "EmptyLatentImage", + "pos": [ + 473, + 609 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 2 + ], + "slot_index": 0 + } + ], + "properties": {}, + "widgets_values": [ + 512, + 512, + 1 + ] + }, + { + "id": 3, + "type": "KSampler", + "pos": [ + 863, + 186 + ], + "size": [ + 315, + 262 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 6 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 2 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 7 + ], + "slot_index": 0 + } + ], + "properties": {}, + "widgets_values": [ + 156680208700286, + true, + 20, + 8, + "euler", + "normal", + 1 + ] + }, + { + "id": 8, + "type": "VAEDecode", + "pos": [ + 1209, + 188 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": 8 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 9 + ], + "slot_index": 0 + } + ], + "properties": {} + }, + { + "id": 9, + "type": "SaveImage", + "pos": [ + 1451, + 189 + ], + "size": [ + 210, + 26 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 9 + } + ], + "properties": {} + }, + { + "id": 4, + "type": "CheckpointLoaderSimple", + "pos": [ + 26, + 474 + ], + "size": [ + 315, + 98 + ], + "flags": {}, + "order": 0, + "mode": 0, + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1 + ], + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 3, + 5 + ], + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 8 + ], + "slot_index": 2 + } + ], + "properties": {}, + "widgets_values": [ + "v1-5-pruned-emaonly-fp16.safetensors" + ] + } + ], + "links": [ + [ + 1, + 4, + 0, + 3, + 0, + "MODEL" + ], + [ + 2, + 5, + 0, + 3, + 3, + "LATENT" + ], + [ + 3, + 4, + 1, + 6, + 0, + "CLIP" + ], + [ + 4, + 6, + 0, + 3, + 1, + "CONDITIONING" + ], + [ + 5, + 4, + 1, + 7, + 0, + "CLIP" + ], + [ + 6, + 7, + 0, + 3, + 2, + "CONDITIONING" + ], + [ + 7, + 3, + 0, + 8, + 0, + "LATENT" + ], + [ + 8, + 4, + 2, + 8, + 1, + "VAE" + ], + [ + 9, + 8, + 0, + 9, + 0, + "IMAGE" + ] + ], + "groups": [], + "config": {}, + "extra": {}, + "version": 0.4, + "models": [{ + "name": "v1-5-pruned-emaonly-fp16.safetensors", + "url": "https://huggingface.co/Comfy-Org/stable-diffusion-v1-5-archive/resolve/main/v1-5-pruned-emaonly-fp16.safetensors?download=true", + "directory": "checkpoints" + }] +} diff --git a/web/templates/flux_schnell.jpg b/web/templates/flux_schnell.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0663c04120b6efc2f1d1e910da423eecf622f70 Binary files /dev/null and b/web/templates/flux_schnell.jpg differ diff --git a/web/templates/flux_schnell.json b/web/templates/flux_schnell.json new file mode 100644 index 0000000000000000000000000000000000000000..9a6858faf66256ab2e5bc3ed22a1fa2ce3574021 --- /dev/null +++ b/web/templates/flux_schnell.json @@ -0,0 +1,420 @@ +{ + "last_node_id": 36, + "last_link_id": 58, + "nodes": [ + { + "id": 33, + "type": "CLIPTextEncode", + "pos": [ + 390, + 400 + ], + "size": { + "0": 422.84503173828125, + "1": 164.31304931640625 + }, + "flags": { + "collapsed": true + }, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 54, + "slot_index": 0 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 55 + ], + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 27, + "type": "EmptySD3LatentImage", + "pos": [ + 471, + 455 + ], + "size": { + "0": 315, + "1": 106 + }, + "flags": {}, + "order": 0, + "mode": 0, + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 51 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "EmptySD3LatentImage" + }, + "widgets_values": [ + 1024, + 1024, + 1 + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 8, + "type": "VAEDecode", + "pos": [ + 1151, + 195 + ], + "size": { + "0": 210, + "1": 46 + }, + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 52 + }, + { + "name": "vae", + "type": "VAE", + "link": 46 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 9 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + } + }, + { + "id": 9, + "type": "SaveImage", + "pos": [ + 1375, + 194 + ], + "size": { + "0": 985.3012084960938, + "1": 1060.3828125 + }, + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 9 + } + ], + "properties": {}, + "widgets_values": [ + "ComfyUI" + ] + }, + { + "id": 31, + "type": "KSampler", + "pos": [ + 816, + 192 + ], + "size": { + "0": 315, + "1": 262 + }, + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 47 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 58 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 55 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 51 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 52 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 173805153958730, + "randomize", + 4, + 1, + "euler", + "simple", + 1 + ] + }, + { + "id": 30, + "type": "CheckpointLoaderSimple", + "pos": [ + 48, + 192 + ], + "size": { + "0": 315, + "1": 98 + }, + "flags": {}, + "order": 1, + "mode": 0, + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 47 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 45, + 54 + ], + "shape": 3, + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 46 + ], + "shape": 3, + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "flux1-schnell-fp8.safetensors" + ] + }, + { + "id": 6, + "type": "CLIPTextEncode", + "pos": [ + 384, + 192 + ], + "size": { + "0": 422.84503173828125, + "1": 164.31304931640625 + }, + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 45 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 58 + ], + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Positive Prompt)", + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "a bottle with a beautiful rainbow galaxy inside it on top of a wooden table in the middle of a modern kitchen beside a plate of vegetables and mushrooms and a wine glasse that contains a planet earth with a plate with a half eaten apple pie on it" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 34, + "type": "Note", + "pos": [ + 831, + 501 + ], + "size": { + "0": 282.8617858886719, + "1": 164.08004760742188 + }, + "flags": {}, + "order": 2, + "mode": 0, + "properties": { + "text": "" + }, + "widgets_values": [ + "Note that Flux dev and schnell do not have any negative prompt so CFG should be set to 1.0. Setting CFG to 1.0 means the negative prompt is ignored.\n\nThe schnell model is a distilled model that can generate a good image with only 4 steps." + ], + "color": "#432", + "bgcolor": "#653" + } + ], + "links": [ + [ + 9, + 8, + 0, + 9, + 0, + "IMAGE" + ], + [ + 45, + 30, + 1, + 6, + 0, + "CLIP" + ], + [ + 46, + 30, + 2, + 8, + 1, + "VAE" + ], + [ + 47, + 30, + 0, + 31, + 0, + "MODEL" + ], + [ + 51, + 27, + 0, + 31, + 3, + "LATENT" + ], + [ + 52, + 31, + 0, + 8, + 0, + "LATENT" + ], + [ + 54, + 30, + 1, + 33, + 0, + "CLIP" + ], + [ + 55, + 33, + 0, + 31, + 2, + "CONDITIONING" + ], + [ + 58, + 6, + 0, + 31, + 1, + "CONDITIONING" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 1.1, + "offset": [ + 0.6836674124529055, + 1.8290357611967831 + ] + } + }, + "models": [ + { + "name": "flux1-schnell-fp8.safetensors", + "url": "https://huggingface.co/Comfy-Org/flux1-schnell/resolve/main/flux1-schnell-fp8.safetensors?download=true", + "directory": "checkpoints" + } + ], + "version": 0.4 + } diff --git a/web/templates/image2image.jpg b/web/templates/image2image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc8e3ab61cfbd4316bd08730222b636c4c4eee92 Binary files /dev/null and b/web/templates/image2image.jpg differ diff --git a/web/templates/image2image.json b/web/templates/image2image.json new file mode 100644 index 0000000000000000000000000000000000000000..81da539d0f35445afd7aa862e06aa55efccfb44b --- /dev/null +++ b/web/templates/image2image.json @@ -0,0 +1,447 @@ +{ + "last_node_id": 14, + "last_link_id": 17, + "nodes": [ + { + "id": 7, + "type": "CLIPTextEncode", + "pos": [ + 413, + 389 + ], + "size": { + "0": 425.27801513671875, + "1": 180.6060791015625 + }, + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 15 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 6 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "watermark, text\n" + ] + }, + { + "id": 6, + "type": "CLIPTextEncode", + "pos": [ + 415, + 186 + ], + "size": { + "0": 422.84503173828125, + "1": 164.31304931640625 + }, + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 14 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "photograph of victorian woman with wings, sky clouds, meadow grass\n" + ] + }, + { + "id": 8, + "type": "VAEDecode", + "pos": [ + 1209, + 188 + ], + "size": { + "0": 210, + "1": 46 + }, + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": 17 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 9 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + } + }, + { + "id": 9, + "type": "SaveImage", + "pos": [ + 1451, + 189 + ], + "size": { + "0": 210, + "1": 58 + }, + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 9 + } + ], + "properties": {}, + "widgets_values": [ + "ComfyUI" + ] + }, + { + "id": 10, + "type": "LoadImage", + "pos": [ + 215.9799597167969, + 703.6800268554688 + ], + "size": [ + 315, + 314.00002670288086 + ], + "flags": {}, + "order": 0, + "mode": 0, + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 10 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "example.png", + "image" + ] + }, + { + "id": 12, + "type": "VAEEncode", + "pos": [ + 614.979959716797, + 707.6800268554688 + ], + "size": { + "0": 210, + "1": 46 + }, + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "pixels", + "type": "IMAGE", + "link": 10 + }, + { + "name": "vae", + "type": "VAE", + "link": 16 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 11 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEEncode" + } + }, + { + "id": 3, + "type": "KSampler", + "pos": [ + 863, + 186 + ], + "size": { + "0": 315, + "1": 262 + }, + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 13 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 6 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 11 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 7 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 280823642470253, + "randomize", + 20, + 8, + "dpmpp_2m", + "normal", + 0.8700000000000001 + ] + }, + { + "id": 14, + "type": "CheckpointLoaderSimple", + "pos": [ + 19, + 433 + ], + "size": { + "0": 315, + "1": 98 + }, + "flags": {}, + "order": 1, + "mode": 0, + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 13 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 14, + 15 + ], + "shape": 3, + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 16, + 17 + ], + "shape": 3, + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "v1-5-pruned-emaonly.safetensors" + ] + } + ], + "links": [ + [ + 4, + 6, + 0, + 3, + 1, + "CONDITIONING" + ], + [ + 6, + 7, + 0, + 3, + 2, + "CONDITIONING" + ], + [ + 7, + 3, + 0, + 8, + 0, + "LATENT" + ], + [ + 9, + 8, + 0, + 9, + 0, + "IMAGE" + ], + [ + 10, + 10, + 0, + 12, + 0, + "IMAGE" + ], + [ + 11, + 12, + 0, + 3, + 3, + "LATENT" + ], + [ + 13, + 14, + 0, + 3, + 0, + "MODEL" + ], + [ + 14, + 14, + 1, + 6, + 0, + "CLIP" + ], + [ + 15, + 14, + 1, + 7, + 0, + "CLIP" + ], + [ + 16, + 14, + 2, + 12, + 1, + "VAE" + ], + [ + 17, + 14, + 2, + 8, + 1, + "VAE" + ] + ], + "groups": [ + { + "title": "Loading images", + "bounding": [ + 150, + 630, + 726, + 171 + ], + "color": "#3f789e" + } + ], + "config": {}, + "extra": {}, + "version": 0.4, + "models": [{ + "name": "v1-5-pruned-emaonly.safetensors", + "url": "https://huggingface.co/Comfy-Org/stable-diffusion-v1-5-archive/resolve/main/v1-5-pruned-emaonly.safetensors?download=true", + "directory": "checkpoints" + }] +} diff --git a/web/templates/upscale.jpg b/web/templates/upscale.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e8523535f84128e9d7d894c9a760462c444d0e86 Binary files /dev/null and b/web/templates/upscale.jpg differ diff --git a/web/templates/upscale.json b/web/templates/upscale.json new file mode 100644 index 0000000000000000000000000000000000000000..5d568b1c50ce1436326341e97ca3e962372a52d4 --- /dev/null +++ b/web/templates/upscale.json @@ -0,0 +1,652 @@ +{ + "last_node_id": 16, + "last_link_id": 23, + "nodes": [ + { + "id": 8, + "type": "VAEDecode", + "pos": [ + 1235.7215957031258, + 577.1878720703122 + ], + "size": { + "0": 210, + "1": 46 + }, + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": 21 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 9 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + } + }, + { + "id": 10, + "type": "LatentUpscale", + "pos": [ + 1238, + 170 + ], + "size": { + "0": 315, + "1": 130 + }, + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 10 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 14 + ] + } + ], + "properties": { + "Node name for S&R": "LatentUpscale" + }, + "widgets_values": [ + "nearest-exact", + 1152, + 1152, + "disabled" + ] + }, + { + "id": 13, + "type": "VAEDecode", + "pos": [ + 1961, + 125 + ], + "size": { + "0": 210, + "1": 46 + }, + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 15 + }, + { + "name": "vae", + "type": "VAE", + "link": 22 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 17 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + } + }, + { + "id": 6, + "type": "CLIPTextEncode", + "pos": [ + 374, + 171 + ], + "size": { + "0": 422.84503173828125, + "1": 164.31304931640625 + }, + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 19 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4, + 12 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "masterpiece HDR victorian portrait painting of woman, blonde hair, mountain nature, blue sky\n" + ] + }, + { + "id": 7, + "type": "CLIPTextEncode", + "pos": [ + 377, + 381 + ], + "size": { + "0": 425.27801513671875, + "1": 180.6060791015625 + }, + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 20 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 6, + 13 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "bad hands, text, watermark\n" + ] + }, + { + "id": 5, + "type": "EmptyLatentImage", + "pos": [ + 435, + 600 + ], + "size": { + "0": 315, + "1": 106 + }, + "flags": {}, + "order": 0, + "mode": 0, + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 2 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "EmptyLatentImage" + }, + "widgets_values": [ + 768, + 768, + 1 + ] + }, + { + "id": 11, + "type": "KSampler", + "pos": [ + 1585, + 114 + ], + "size": { + "0": 315, + "1": 262 + }, + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 23, + "slot_index": 0 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 12, + "slot_index": 1 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 13, + "slot_index": 2 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 14, + "slot_index": 3 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 15 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 469771404043268, + "randomize", + 14, + 8, + "dpmpp_2m", + "simple", + 0.5 + ] + }, + { + "id": 12, + "type": "SaveImage", + "pos": [ + 2203, + 123 + ], + "size": { + "0": 407.53717041015625, + "1": 468.13226318359375 + }, + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 17 + } + ], + "properties": {}, + "widgets_values": [ + "ComfyUI" + ] + }, + { + "id": 3, + "type": "KSampler", + "pos": [ + 845, + 172 + ], + "size": { + "0": 315, + "1": 262 + }, + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 18 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 6 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 2 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 7, + 10 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 89848141647836, + "randomize", + 12, + 8, + "dpmpp_sde", + "normal", + 1 + ] + }, + { + "id": 16, + "type": "CheckpointLoaderSimple", + "pos": [ + 24, + 315 + ], + "size": { + "0": 315, + "1": 98 + }, + "flags": {}, + "order": 1, + "mode": 0, + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 18, + 23 + ], + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 19, + 20 + ], + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 21, + 22 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "v2-1_768-ema-pruned.safetensors" + ] + }, + { + "id": 9, + "type": "SaveImage", + "pos": [ + 1495.7215957031258, + 576.1878720703122 + ], + "size": [ + 232.9403301043692, + 282.4336258387117 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 9 + } + ], + "properties": {}, + "widgets_values": [ + "ComfyUI" + ] + } + ], + "links": [ + [ + 2, + 5, + 0, + 3, + 3, + "LATENT" + ], + [ + 4, + 6, + 0, + 3, + 1, + "CONDITIONING" + ], + [ + 6, + 7, + 0, + 3, + 2, + "CONDITIONING" + ], + [ + 7, + 3, + 0, + 8, + 0, + "LATENT" + ], + [ + 9, + 8, + 0, + 9, + 0, + "IMAGE" + ], + [ + 10, + 3, + 0, + 10, + 0, + "LATENT" + ], + [ + 12, + 6, + 0, + 11, + 1, + "CONDITIONING" + ], + [ + 13, + 7, + 0, + 11, + 2, + "CONDITIONING" + ], + [ + 14, + 10, + 0, + 11, + 3, + "LATENT" + ], + [ + 15, + 11, + 0, + 13, + 0, + "LATENT" + ], + [ + 17, + 13, + 0, + 12, + 0, + "IMAGE" + ], + [ + 18, + 16, + 0, + 3, + 0, + "MODEL" + ], + [ + 19, + 16, + 1, + 6, + 0, + "CLIP" + ], + [ + 20, + 16, + 1, + 7, + 0, + "CLIP" + ], + [ + 21, + 16, + 2, + 8, + 1, + "VAE" + ], + [ + 22, + 16, + 2, + 13, + 1, + "VAE" + ], + [ + 23, + 16, + 0, + 11, + 0, + "MODEL" + ] + ], + "groups": [ + { + "title": "Txt2Img", + "bounding": [ + -1, + 30, + 1211, + 708 + ], + "color": "#a1309b" + }, + { + "title": "Save Intermediate Image", + "bounding": [ + 1225, + 500, + 516, + 196 + ], + "color": "#3f789e" + }, + { + "title": "Hires Fix", + "bounding": [ + 1224, + 29, + 710, + 464 + ], + "color": "#b58b2a" + }, + { + "title": "Save Final Image", + "bounding": [ + 1949, + 31, + 483, + 199 + ], + "color": "#3f789e" + } + ], + "config": {}, + "extra": {}, + "version": 0.4, + "models": [ + { + "name": "v2-1_768-ema-pruned.safetensors", + "url": "https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.safetensors?download=true", + "directory": "checkpoints" + } + ] + } diff --git a/web/user.css b/web/user.css new file mode 100644 index 0000000000000000000000000000000000000000..8b1af38689e5853fb065714d6a6d322c52f17e72 --- /dev/null +++ b/web/user.css @@ -0,0 +1 @@ +/* Put custom styles here */ \ No newline at end of file