@clyrex-digital/clyrex-controls-dev 0.8.1-dev.20260925110206 → 0.8.1-dev.20260926063530

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -4601,19 +4601,6 @@ var init_InputControlClient = __esm({
4601
4601
  }
4602
4602
  });
4603
4603
 
4604
- // src/components/controls/edit/InputControl.tsx
4605
- var import_dynamic7, InputControl2, InputControl_default;
4606
- var init_InputControl = __esm({
4607
- "src/components/controls/edit/InputControl.tsx"() {
4608
- "use strict";
4609
- import_dynamic7 = __toESM(require("next/dynamic"));
4610
- InputControl2 = (0, import_dynamic7.default)(() => Promise.resolve().then(() => (init_InputControlClient(), InputControlClient_exports)), {
4611
- ssr: false
4612
- });
4613
- InputControl_default = InputControl2;
4614
- }
4615
- });
4616
-
4617
4604
  // src/clients/CacheManage.tsx
4618
4605
  var import_node_cache, CacheManager;
4619
4606
  var init_CacheManage = __esm({
@@ -5686,7 +5673,7 @@ var DataBindingControls_exports = {};
5686
5673
  __export(DataBindingControls_exports, {
5687
5674
  default: () => DataBindingControls_default
5688
5675
  });
5689
- var import_react59, import_navigation, import_jsx_runtime86, humanize, escapeODataString, parseFacetSelections, buildFacetFilter, parseODataSearch, SearchIcon, ResetIcon, FilterSlidersIcon, ChevronDownIcon, CheckIcon, CloseIcon, normalizeSortOption, DataBindingControls, DataBindingControls_default;
5676
+ var import_react59, import_navigation, import_jsx_runtime86, humanize, escapeODataString, parseFacetSelections, buildFacetFilter, parseODataSearch, SearchIcon, ResetIcon, FilterSlidersIcon, ChevronDownIcon, CheckIcon, CloseIcon, MapPinIcon, BriefcaseIcon, FileTextIcon, TagIcon, getCategoryIcon, normalizeSortOption, DataBindingControls, DataBindingControls_default;
5690
5677
  var init_DataBindingControls = __esm({
5691
5678
  "src/components/pageRenderingEngine/nodes/DataBindingControls.tsx"() {
5692
5679
  "use strict";
@@ -5694,8 +5681,6 @@ var init_DataBindingControls = __esm({
5694
5681
  import_react59 = require("react");
5695
5682
  import_navigation = require("next/navigation");
5696
5683
  init_Button();
5697
- init_InputControl();
5698
- init_InputControlType();
5699
5684
  init_StyleTypes();
5700
5685
  import_jsx_runtime86 = require("react/jsx-runtime");
5701
5686
  humanize = (value) => value.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ").trim();
@@ -5810,6 +5795,105 @@ var init_DataBindingControls = __esm({
5810
5795
  children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" })
5811
5796
  }
5812
5797
  );
5798
+ MapPinIcon = ({ className = "" }) => /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
5799
+ "svg",
5800
+ {
5801
+ "aria-hidden": "true",
5802
+ className,
5803
+ fill: "none",
5804
+ viewBox: "0 0 24 24",
5805
+ stroke: "currentColor",
5806
+ strokeWidth: "2",
5807
+ children: [
5808
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
5809
+ "path",
5810
+ {
5811
+ strokeLinecap: "round",
5812
+ strokeLinejoin: "round",
5813
+ d: "M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"
5814
+ }
5815
+ ),
5816
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
5817
+ "path",
5818
+ {
5819
+ strokeLinecap: "round",
5820
+ strokeLinejoin: "round",
5821
+ d: "M15 11a3 3 0 11-6 0 3 3 0 016 0z"
5822
+ }
5823
+ )
5824
+ ]
5825
+ }
5826
+ );
5827
+ BriefcaseIcon = ({ className = "" }) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
5828
+ "svg",
5829
+ {
5830
+ "aria-hidden": "true",
5831
+ className,
5832
+ fill: "none",
5833
+ viewBox: "0 0 24 24",
5834
+ stroke: "currentColor",
5835
+ strokeWidth: "2",
5836
+ children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
5837
+ "path",
5838
+ {
5839
+ strokeLinecap: "round",
5840
+ strokeLinejoin: "round",
5841
+ d: "M21 13.255A23.931 23.931 0 0112 15c-3.183 0-6.22-.62-9-1.745M16 6V4a2 2 0 00-2-2h-4a2 2 0 00-2 2v2m4 6h.01M5 20h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
5842
+ }
5843
+ )
5844
+ }
5845
+ );
5846
+ FileTextIcon = ({ className = "" }) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
5847
+ "svg",
5848
+ {
5849
+ "aria-hidden": "true",
5850
+ className,
5851
+ fill: "none",
5852
+ viewBox: "0 0 24 24",
5853
+ stroke: "currentColor",
5854
+ strokeWidth: "2",
5855
+ children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
5856
+ "path",
5857
+ {
5858
+ strokeLinecap: "round",
5859
+ strokeLinejoin: "round",
5860
+ d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
5861
+ }
5862
+ )
5863
+ }
5864
+ );
5865
+ TagIcon = ({ className = "" }) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
5866
+ "svg",
5867
+ {
5868
+ "aria-hidden": "true",
5869
+ className,
5870
+ fill: "none",
5871
+ viewBox: "0 0 24 24",
5872
+ stroke: "currentColor",
5873
+ strokeWidth: "2",
5874
+ children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
5875
+ "path",
5876
+ {
5877
+ strokeLinecap: "round",
5878
+ strokeLinejoin: "round",
5879
+ d: "M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z"
5880
+ }
5881
+ )
5882
+ }
5883
+ );
5884
+ getCategoryIcon = (category) => {
5885
+ const lower = category.toLowerCase();
5886
+ if (lower.includes("location") || lower.includes("city") || lower.includes("country") || lower.includes("state") || lower.includes("address")) {
5887
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(MapPinIcon, { className: "h-4 w-4" });
5888
+ }
5889
+ if (lower.includes("type") || lower.includes("work") || lower.includes("employment") || lower.includes("experience")) {
5890
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(BriefcaseIcon, { className: "h-4 w-4" });
5891
+ }
5892
+ if (lower.includes("department") || lower.includes("category") || lower.includes("role") || lower.includes("industry")) {
5893
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(FileTextIcon, { className: "h-4 w-4" });
5894
+ }
5895
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(TagIcon, { className: "h-4 w-4" });
5896
+ };
5813
5897
  normalizeSortOption = (option) => {
5814
5898
  const direction = option.direction.trim();
5815
5899
  const title = option.title || humanize(option.name);
@@ -5832,10 +5916,16 @@ var init_DataBindingControls = __esm({
5832
5916
  const searchParams = (0, import_navigation.useSearchParams)();
5833
5917
  const [collapsedCategories, setCollapsedCategories] = (0, import_react59.useState)({});
5834
5918
  const [isSortOpen, setIsSortOpen] = (0, import_react59.useState)(false);
5835
- const sortDropdownRef = (0, import_react59.useRef)(null);
5919
+ const [isMobileFiltersOpen, setIsMobileFiltersOpen] = (0, import_react59.useState)(false);
5920
+ const [facetCategorySearch, setFacetCategorySearch] = (0, import_react59.useState)({});
5921
+ const desktopSortDropdownRef = (0, import_react59.useRef)(null);
5922
+ const mobileSortDropdownRef = (0, import_react59.useRef)(null);
5836
5923
  (0, import_react59.useEffect)(() => {
5837
5924
  const handleClickOutside = (event) => {
5838
- if (sortDropdownRef.current && !sortDropdownRef.current.contains(event.target)) {
5925
+ const target = event.target;
5926
+ const clickedInsideDesktop = desktopSortDropdownRef.current?.contains(target);
5927
+ const clickedInsideMobile = mobileSortDropdownRef.current?.contains(target);
5928
+ if (!clickedInsideDesktop && !clickedInsideMobile) {
5839
5929
  setIsSortOpen(false);
5840
5930
  }
5841
5931
  };
@@ -5864,19 +5954,53 @@ var init_DataBindingControls = __esm({
5864
5954
  () => parseFacetSelections(currentFilter),
5865
5955
  [currentFilter]
5866
5956
  );
5957
+ (0, import_react59.useEffect)(() => {
5958
+ if (isMobileFiltersOpen) {
5959
+ document.body.style.overflow = "hidden";
5960
+ } else {
5961
+ document.body.style.overflow = "";
5962
+ }
5963
+ return () => {
5964
+ document.body.style.overflow = "";
5965
+ };
5966
+ }, [isMobileFiltersOpen]);
5867
5967
  const activeFacets = (0, import_react59.useMemo)(() => {
5868
- if (!facets) return [];
5869
- return Object.entries(facets).map(([field, values]) => {
5870
- if (!Array.isArray(values)) return null;
5871
- const filteredValues = values.filter(
5872
- (item) => item.count > 0 || selectedFacetValues.get(field) === item.value
5873
- );
5874
- if (filteredValues.length === 0) return null;
5875
- return [field, filteredValues];
5876
- }).filter((group) => group !== null);
5968
+ const facetMap = /* @__PURE__ */ new Map();
5969
+ if (facets) {
5970
+ Object.entries(facets).forEach(([field, values]) => {
5971
+ if (!Array.isArray(values)) return;
5972
+ const filteredValues = values.filter(
5973
+ (item) => item.count > 0 || selectedFacetValues.get(field) === item.value
5974
+ );
5975
+ if (filteredValues.length > 0) {
5976
+ facetMap.set(field, filteredValues);
5977
+ }
5978
+ });
5979
+ }
5980
+ selectedFacetValues.forEach((val, field) => {
5981
+ if (!facetMap.has(field)) {
5982
+ facetMap.set(field, [{ value: val, count: 0 }]);
5983
+ } else {
5984
+ const existing = facetMap.get(field);
5985
+ if (!existing.some((item) => item.value === val)) {
5986
+ existing.push({ value: val, count: 0 });
5987
+ }
5988
+ }
5989
+ });
5990
+ return Array.from(facetMap.entries());
5877
5991
  }, [facets, selectedFacetValues]);
5878
- const normalizedSortOptions = (sortOptions ?? []).filter((option) => option?.name && option?.direction).map(normalizeSortOption).filter((option) => option.value);
5879
- const selectedSortOption = normalizedSortOptions.find((opt) => opt.value === currentSort) || normalizedSortOptions[0];
5992
+ const normalizedSortOptions = (0, import_react59.useMemo)(
5993
+ () => (sortOptions ?? []).filter((option) => option?.name && option?.direction).map(normalizeSortOption).filter((option) => option.value),
5994
+ [sortOptions]
5995
+ );
5996
+ const selectedSortOption = (0, import_react59.useMemo)(() => {
5997
+ if (!normalizedSortOptions.length) return null;
5998
+ const trimmedCurrentSort = currentSort.trim().toLowerCase();
5999
+ if (!trimmedCurrentSort) return normalizedSortOptions[0];
6000
+ return normalizedSortOptions.find(
6001
+ (opt) => opt.value.trim().toLowerCase() === trimmedCurrentSort
6002
+ ) || normalizedSortOptions[0];
6003
+ }, [normalizedSortOptions, currentSort]);
5880
6004
  const selectedSortLabel = selectedSortOption?.label || "";
5881
6005
  const getQueryUrl = (0, import_react59.useCallback)(
5882
6006
  (updates) => {
@@ -5891,9 +6015,7 @@ var init_DataBindingControls = __esm({
5891
6015
  });
5892
6016
  params.delete("$skip");
5893
6017
  params.delete("skip");
5894
- const queryString = Array.from(params.entries()).map(
5895
- ([key, value]) => key === "$filter" || key === "filter" ? `${key}=${encodeURIComponent(value)}` : `${key}=${value}`
5896
- ).join("&");
6018
+ const queryString = Array.from(params.entries()).map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join("&");
5897
6019
  return queryString ? `${path}?${queryString}` : path;
5898
6020
  },
5899
6021
  [path, query, searchParams]
@@ -5902,7 +6024,7 @@ var init_DataBindingControls = __esm({
5902
6024
  (url) => {
5903
6025
  if (typeof window !== "undefined") {
5904
6026
  const targetUrl = new URL(url, window.location.origin);
5905
- if (targetUrl.pathname === window.location.pathname && targetUrl.search === window.location.search) {
6027
+ if (targetUrl.pathname === window.location.pathname && decodeURIComponent(targetUrl.search) === decodeURIComponent(window.location.search)) {
5906
6028
  return;
5907
6029
  }
5908
6030
  }
@@ -5910,6 +6032,18 @@ var init_DataBindingControls = __esm({
5910
6032
  },
5911
6033
  [router]
5912
6034
  );
6035
+ const handleSelectSort = (0, import_react59.useCallback)(
6036
+ (sortValue) => {
6037
+ setIsSortOpen(false);
6038
+ navigateWithoutReload(
6039
+ getQueryUrl({
6040
+ $orderby: sortValue || void 0,
6041
+ orderBy: void 0
6042
+ })
6043
+ );
6044
+ },
6045
+ [getQueryUrl, navigateWithoutReload]
6046
+ );
5913
6047
  const getFacetUrl = (field, value) => {
5914
6048
  const updatedSelections = new Map(selectedFacetValues);
5915
6049
  if (value) {
@@ -5961,15 +6095,15 @@ var init_DataBindingControls = __esm({
5961
6095
  );
5962
6096
  return { isSuccessful: true };
5963
6097
  }, [getQueryUrl, navigateWithoutReload]);
5964
- const hasFacetControls = showFacets && activeFacets.length > 0;
5965
- const hasSortControls = showSortOptions && normalizedSortOptions.length > 0;
6098
+ const hasFacetControls = Boolean(showFacets && (activeFacets.length > 0 || selectedFacetValues.size > 0));
6099
+ const hasSortControls = Boolean(showSortOptions && normalizedSortOptions.length > 0);
5966
6100
  const hasActiveFiltersOrSort = Boolean(
5967
6101
  currentFilter.trim() || currentSort.trim()
5968
6102
  );
5969
6103
  const selectedFacetCount = selectedFacetValues.size;
5970
6104
  const shouldShowToolbarClearAll = hasActiveFiltersOrSort && !hasFacetControls;
5971
- const shouldShowToolbar = mode === "toolbar" && (showSearchBar || hasSortControls || shouldShowToolbarClearAll);
5972
- const shouldShowFacets = mode === "facets" && hasFacetControls;
6105
+ const shouldShowToolbar = mode === "toolbar" && (showSearchBar || hasSortControls || showFacets || shouldShowToolbarClearAll);
6106
+ const shouldShowFacets = mode === "facets" && (hasFacetControls || showFacets && activeFacets.length > 0);
5973
6107
  if (!shouldShowToolbar && !shouldShowFacets) {
5974
6108
  return null;
5975
6109
  }
@@ -5981,13 +6115,13 @@ var init_DataBindingControls = __esm({
5981
6115
  type: "button",
5982
6116
  onClick: () => navigateWithoutReload(getFacetUrl(field, facet.value)),
5983
6117
  "aria-pressed": isSelected,
5984
- className: `group flex w-full cursor-pointer items-center justify-between gap-2.5 rounded-md px-2 py-1.5 text-left text-sm transition-all duration-150 ease-out focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary-base ${isSelected ? "bg-neutral-soft font-medium border " : "hover:bg-neutral-weak border border-transparent"}`,
6118
+ className: `group flex w-full cursor-pointer items-center justify-between gap-2.5 rounded-md px-2 py-1.5 text-left text-sm transition-all duration-150 ease-out focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary-base ${isSelected ? "bg-neutral-soft font-medium border border-neutral-soft" : "hover:bg-neutral-weak border border-transparent"}`,
5985
6119
  children: [
5986
6120
  /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex min-w-0 items-center gap-2.5", children: [
5987
6121
  /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
5988
6122
  "span",
5989
6123
  {
5990
- className: `flex h-4 w-4 shrink-0 items-center justify-center rounded-[3px] border transition-colors duration-150 ${isSelected ? "bg-primary-base border-primary-base" : " group-hover:border-neutral-strong bg-default"}`,
6124
+ className: `flex h-4 w-4 shrink-0 items-center justify-center rounded-[3px] border transition-colors duration-150 ${isSelected ? "bg-primary-base border-primary-base" : " group-hover:border-neutral-strong bg-default border-neutral-soft"}`,
5991
6125
  children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CheckIcon, { className: "h-3 w-3" })
5992
6126
  }
5993
6127
  ),
@@ -6008,100 +6142,338 @@ var init_DataBindingControls = __esm({
6008
6142
  return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6009
6143
  "div",
6010
6144
  {
6011
- className: mode === "toolbar" ? "my-6" : "flex flex-col rounded-md border bg-default p-3.5 shadow-sm",
6145
+ className: mode === "toolbar" ? "my-4 sm:my-6" : "flex flex-col rounded-md border border-neutral-soft bg-default p-4 shadow-sm",
6012
6146
  children: [
6013
- shouldShowToolbar && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between", children: [
6014
- showSearchBar && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6015
- "form",
6016
- {
6017
- role: "search",
6018
- className: "flex w-full items-center gap-2 sm:flex-row md:min-w-0 md:flex-1",
6019
- onSubmit: (event) => {
6020
- event.preventDefault();
6021
- void handleSearch();
6022
- },
6023
- children: [
6024
- /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "relative min-w-0 flex-1", children: [
6025
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(SearchIcon, { className: "pointer-events-none absolute left-3.5 top-1/2 z-10 h-4 w-4 -translate-y-1/2 opacity-60" }),
6026
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6027
- InputControl_default,
6147
+ shouldShowToolbar && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex flex-col gap-3", children: [
6148
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "hidden lg:flex lg:items-center lg:justify-between lg:gap-4", children: [
6149
+ showSearchBar && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6150
+ "form",
6151
+ {
6152
+ role: "search",
6153
+ className: "flex w-full items-center gap-2 md:min-w-0 md:flex-1",
6154
+ onSubmit: (event) => {
6155
+ event.preventDefault();
6156
+ void handleSearch();
6157
+ },
6158
+ children: [
6159
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "relative min-w-0 flex-1", children: [
6160
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(SearchIcon, { className: "pointer-events-none absolute left-3.5 top-1/2 z-10 h-4 w-4 -translate-y-1/2 opacity-60" }),
6161
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6162
+ "input",
6163
+ {
6164
+ type: "text",
6165
+ name: "searchText",
6166
+ value: searchText,
6167
+ onChange: (e) => setSearchText(e.target.value),
6168
+ placeholder: "Search discussions, topics, or keywords...",
6169
+ className: "h-10 w-full rounded-md border border-neutral-soft bg-default py-2 pl-10 pr-4 text-sm shadow-sm transition-colors focus:border-primary-base focus:outline-none focus:ring-1 focus:ring-primary-base"
6170
+ }
6171
+ )
6172
+ ] }),
6173
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6174
+ Button_default,
6028
6175
  {
6029
- name: "searchText",
6030
- controlType: InputControlType_default.lineTextInput,
6031
- value: searchText,
6032
- callback: (updatedValues) => setSearchText(updatedValues.value),
6033
- attributes: {
6034
- placeholder: "Search discussions, topics, or keywords..."
6035
- },
6036
- inputClasses: "!mt-0 !h-10 !rounded-md !border-neutral-soft !bg-default !py-2 !pl-10 !pr-4 !shadow-sm !text-sm focus:!border-primary-base focus:!ring-primary-base"
6176
+ ButtonType: "Primary" /* Solid */,
6177
+ onClick: handleSearch,
6178
+ className: "!h-10 !rounded-md !px-5 !py-0 flex items-center justify-center gap-1.5 shrink-0",
6179
+ children: [
6180
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(SearchIcon, { className: "h-4 w-4" }),
6181
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { children: "Search" })
6182
+ ]
6037
6183
  }
6038
6184
  )
6039
- ] }),
6040
- /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6041
- Button_default,
6185
+ ]
6186
+ }
6187
+ ),
6188
+ hasSortControls && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "relative shrink-0", ref: desktopSortDropdownRef, children: [
6189
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6190
+ "button",
6191
+ {
6192
+ type: "button",
6193
+ onClick: () => setIsSortOpen((prev) => !prev),
6194
+ "aria-expanded": isSortOpen,
6195
+ className: "inline-flex h-10 items-center justify-between gap-2.5 rounded-md border border-neutral-soft bg-default px-3.5 text-sm font-normal shadow-sm transition-all hover:bg-neutral-weak focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-base cursor-pointer whitespace-nowrap",
6196
+ children: [
6197
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { className: "whitespace-nowrap", children: [
6198
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "opacity-70", children: "Sort by: " }),
6199
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "font-semibold", children: selectedSortLabel })
6200
+ ] }),
6201
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6202
+ ChevronDownIcon,
6203
+ {
6204
+ className: `h-4 w-4 shrink-0 transition-transform duration-200 ${isSortOpen ? "rotate-180" : ""}`
6205
+ }
6206
+ )
6207
+ ]
6208
+ }
6209
+ ),
6210
+ isSortOpen && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "absolute right-0 z-50 mt-1.5 w-max min-w-full max-h-80 overflow-y-auto rounded-md border border-neutral-soft bg-default p-1 shadow-lg", children: normalizedSortOptions.map((option) => {
6211
+ const isSelected = selectedSortOption?.value === option.value;
6212
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6213
+ "button",
6042
6214
  {
6043
- ButtonType: "Primary" /* Solid */,
6044
- onClick: handleSearch,
6045
- className: "!h-10 !rounded-md !px-5 !py-0 flex items-center justify-center gap-1.5 shrink-0",
6215
+ type: "button",
6216
+ onClick: () => handleSelectSort(option.value),
6217
+ className: `flex w-full items-center justify-between gap-4 rounded-md px-3 py-1.5 text-left text-sm transition-colors cursor-pointer whitespace-nowrap ${isSelected ? "bg-primary-base font-semibold" : "hover:bg-neutral-soft font-normal"}`,
6046
6218
  children: [
6047
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(SearchIcon, { className: "h-4 w-4" }),
6048
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { children: "Search" })
6219
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "whitespace-nowrap", children: option.label }),
6220
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CheckIcon, { className: "h-4 w-4 shrink-0" })
6049
6221
  ]
6050
- }
6051
- )
6052
- ]
6053
- }
6054
- ),
6055
- hasSortControls && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "relative shrink-0", ref: sortDropdownRef, children: [
6056
- /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6057
- "button",
6222
+ },
6223
+ option.value
6224
+ );
6225
+ }) })
6226
+ ] })
6227
+ ] }),
6228
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex flex-col gap-2.5 lg:hidden", children: [
6229
+ showSearchBar && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6230
+ "form",
6058
6231
  {
6059
- type: "button",
6060
- onClick: () => setIsSortOpen((prev) => !prev),
6061
- "aria-expanded": isSortOpen,
6062
- className: "inline-flex h-10 items-center justify-between gap-2.5 rounded-md border bg-default px-3.5 text-sm font-normal shadow-sm transition-all hover:bg-neutral-weak focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-base cursor-pointer whitespace-nowrap",
6232
+ role: "search",
6233
+ className: "relative w-full",
6234
+ onSubmit: (event) => {
6235
+ event.preventDefault();
6236
+ void handleSearch();
6237
+ },
6063
6238
  children: [
6064
- /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { className: "whitespace-nowrap", children: [
6065
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "opacity-70", children: "Sort by: " }),
6066
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "font-semibold", children: selectedSortLabel })
6067
- ] }),
6239
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(SearchIcon, { className: "pointer-events-none absolute left-3.5 top-1/2 z-10 h-4 w-4 -translate-y-1/2 opacity-50" }),
6068
6240
  /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6069
- ChevronDownIcon,
6241
+ "input",
6070
6242
  {
6071
- className: `h-4 w-4 shrink-0 transition-transform duration-200 ${isSortOpen ? "rotate-180" : ""}`
6243
+ type: "text",
6244
+ name: "searchTextMobile",
6245
+ value: searchText,
6246
+ onChange: (e) => setSearchText(e.target.value),
6247
+ placeholder: "Search jobs, skills, or keywords...",
6248
+ className: "h-11 w-full rounded-md border border-neutral-soft bg-default py-2.5 pl-10 pr-4 text-sm shadow-sm transition-colors focus:border-primary-base focus:outline-none focus:ring-1 focus:ring-primary-base"
6072
6249
  }
6073
6250
  )
6074
6251
  ]
6075
6252
  }
6076
6253
  ),
6077
- isSortOpen && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "absolute right-0 z-50 mt-1.5 w-max min-w-full max-h-80 overflow-y-auto rounded-lg border border-neutral-soft bg-default p-1 shadow-lg", children: normalizedSortOptions.map((option) => {
6078
- const isSelected = currentSort ? option.value === currentSort : option.value === normalizedSortOptions[0]?.value;
6079
- return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6254
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center justify-between gap-2.5 pt-0.5", children: [
6255
+ showFacets && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6080
6256
  "button",
6081
6257
  {
6082
6258
  type: "button",
6083
- onClick: () => {
6084
- setIsSortOpen(false);
6085
- navigateWithoutReload(
6086
- getQueryUrl({
6087
- $orderby: option.value || void 0,
6088
- orderBy: void 0
6089
- })
6090
- );
6091
- },
6092
- className: `flex w-full items-center justify-between gap-4 rounded-md px-3 py-1.5 text-left text-sm transition-colors cursor-pointer whitespace-nowrap ${isSelected ? "bg-primary-base font-semibold" : "hover:bg-neutral-soft font-normal"}`,
6259
+ onClick: () => setIsMobileFiltersOpen(true),
6260
+ className: "inline-flex h-10 items-center justify-center gap-2 rounded-md border border-neutral-soft bg-default px-3.5 text-sm font-medium shadow-sm transition-all hover:bg-neutral-weak cursor-pointer active:scale-95",
6261
+ children: [
6262
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(FilterSlidersIcon, { className: "h-4 w-4" }),
6263
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { children: [
6264
+ "Filters",
6265
+ selectedFacetCount > 0 ? ` (${selectedFacetCount})` : ""
6266
+ ] }),
6267
+ selectedFacetCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { className: "relative flex h-2 w-2", children: [
6268
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "animate-ping absolute inline-flex h-full w-full rounded-full bg-primary-base opacity-75" }),
6269
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "relative inline-flex rounded-full h-2 w-2 bg-primary-base" })
6270
+ ] })
6271
+ ]
6272
+ }
6273
+ ),
6274
+ hasSortControls && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "relative shrink-0 ml-auto", ref: mobileSortDropdownRef, children: [
6275
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6276
+ "button",
6277
+ {
6278
+ type: "button",
6279
+ onClick: () => setIsSortOpen((prev) => !prev),
6280
+ "aria-expanded": isSortOpen,
6281
+ className: "inline-flex h-10 items-center justify-between gap-2 rounded-md border border-neutral-soft bg-default px-3.5 text-sm font-medium shadow-sm transition-all hover:bg-neutral-weak cursor-pointer whitespace-nowrap",
6282
+ children: [
6283
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "whitespace-nowrap font-medium", children: selectedSortLabel }),
6284
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6285
+ ChevronDownIcon,
6286
+ {
6287
+ className: `h-4 w-4 shrink-0 transition-transform duration-200 ${isSortOpen ? "rotate-180" : ""}`
6288
+ }
6289
+ )
6290
+ ]
6291
+ }
6292
+ ),
6293
+ isSortOpen && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "absolute right-0 z-50 mt-1.5 w-max min-w-[160px] max-h-80 overflow-y-auto rounded-md border border-neutral-soft bg-default p-1 shadow-xl", children: normalizedSortOptions.map((option) => {
6294
+ const isSelected = selectedSortOption?.value === option.value;
6295
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6296
+ "button",
6297
+ {
6298
+ type: "button",
6299
+ onClick: () => handleSelectSort(option.value),
6300
+ className: `flex w-full items-center justify-between gap-3 rounded-md px-3 py-2 text-left text-sm transition-colors cursor-pointer whitespace-nowrap ${isSelected ? "bg-primary-base font-semibold" : "hover:bg-neutral-soft font-normal"}`,
6301
+ children: [
6302
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "whitespace-nowrap", children: option.label }),
6303
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CheckIcon, { className: "h-4 w-4 shrink-0" })
6304
+ ]
6305
+ },
6306
+ option.value
6307
+ );
6308
+ }) })
6309
+ ] })
6310
+ ] }),
6311
+ selectedFacetCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex flex-wrap items-center gap-1.5 pt-1", children: [
6312
+ Array.from(selectedFacetValues.entries()).map(([field, value]) => /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6313
+ "button",
6314
+ {
6315
+ type: "button",
6316
+ onClick: () => clearFacetField(field),
6317
+ className: "group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-md border border-neutral-soft bg-neutral-weak px-2.5 py-1 text-xs transition-colors hover:bg-neutral-soft",
6318
+ title: `Remove filter: ${value}`,
6093
6319
  children: [
6094
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "whitespace-nowrap", children: option.label }),
6095
- isSelected && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CheckIcon, { className: "h-4 w-4 shrink-0" })
6320
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "font-medium truncate max-w-[140px]", children: value }),
6321
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CloseIcon, { className: "h-3 w-3 shrink-0 opacity-60 group-hover:opacity-100" })
6096
6322
  ]
6097
6323
  },
6098
- option.value
6099
- );
6100
- }) })
6324
+ `mobile-chip-${field}`
6325
+ )),
6326
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6327
+ "button",
6328
+ {
6329
+ type: "button",
6330
+ onClick: () => void handleClearAll(),
6331
+ className: "inline-flex cursor-pointer items-center rounded-md px-2 py-1 text-xs font-semibold underline underline-offset-2 hover:bg-neutral-weak transition-colors ml-auto",
6332
+ children: "Clear all"
6333
+ }
6334
+ )
6335
+ ] })
6336
+ ] }),
6337
+ isMobileFiltersOpen && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "fixed inset-0 z-50 flex flex-col justify-end lg:hidden", children: [
6338
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6339
+ "div",
6340
+ {
6341
+ className: "fixed inset-0 bg-neutral-stronger/60 backdrop-blur-xs transition-opacity duration-300",
6342
+ onClick: () => setIsMobileFiltersOpen(false),
6343
+ "aria-hidden": "true"
6344
+ }
6345
+ ),
6346
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "relative z-10 flex h-[85vh] max-h-[85vh] w-full flex-col rounded-t-xl border-t border-neutral-soft bg-default shadow-2xl transition-transform duration-300 animate-in slide-in-from-bottom", children: [
6347
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "pt-2.5 pb-1", children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "mx-auto h-1.5 w-12 rounded-full bg-neutral-soft" }) }),
6348
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center justify-between px-5 py-3 border-b border-neutral-soft", children: [
6349
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("h2", { className: "text-lg font-bold tracking-tight", children: "Filters" }),
6350
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center gap-3", children: [
6351
+ selectedFacetCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6352
+ "button",
6353
+ {
6354
+ type: "button",
6355
+ onClick: () => void handleClearAll(),
6356
+ className: "text-xs font-semibold cursor-pointer underline underline-offset-2 hover:opacity-80",
6357
+ children: "Clear all"
6358
+ }
6359
+ ),
6360
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6361
+ "button",
6362
+ {
6363
+ type: "button",
6364
+ onClick: () => setIsMobileFiltersOpen(false),
6365
+ className: "p-1 rounded-full hover:bg-neutral-weak transition-colors cursor-pointer",
6366
+ "aria-label": "Close filters",
6367
+ children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CloseIcon, { className: "h-5 w-5 opacity-70" })
6368
+ }
6369
+ )
6370
+ ] })
6371
+ ] }),
6372
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "flex-1 overflow-y-auto px-5 py-3 space-y-3 divide-y divide-neutral-soft", children: activeFacets.map(([field, values]) => {
6373
+ const isOpen = !collapsedCategories[field];
6374
+ const selectedValue = selectedFacetValues.get(field);
6375
+ const categorySearch = facetCategorySearch[field]?.toLowerCase() || "";
6376
+ const filteredValues = categorySearch ? values.filter((v) => v.value.toLowerCase().includes(categorySearch)) : values;
6377
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "pt-3 first:pt-0", children: [
6378
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6379
+ "button",
6380
+ {
6381
+ type: "button",
6382
+ onClick: () => toggleCategory(field),
6383
+ className: "flex w-full cursor-pointer items-center justify-between rounded-md py-2 text-left transition-colors",
6384
+ children: [
6385
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center gap-2.5", children: [
6386
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-md border border-neutral-soft bg-neutral-weak", children: getCategoryIcon(field) }),
6387
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "font-semibold text-sm", children: humanize(field) })
6388
+ ] }),
6389
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center gap-2", children: [
6390
+ selectedValue && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center rounded-full bg-primary-base text-xs font-bold leading-none", children: "1" }),
6391
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6392
+ ChevronDownIcon,
6393
+ {
6394
+ className: `h-4 w-4 transition-transform duration-200 ${isOpen ? "rotate-180" : ""}`
6395
+ }
6396
+ )
6397
+ ] })
6398
+ ]
6399
+ }
6400
+ ),
6401
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "pt-2 pb-1 pl-1 pr-1 space-y-1.5", children: [
6402
+ values.length > 5 && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "relative mb-2", children: [
6403
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(SearchIcon, { className: "pointer-events-none absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 opacity-50" }),
6404
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6405
+ "input",
6406
+ {
6407
+ type: "text",
6408
+ value: facetCategorySearch[field] || "",
6409
+ onChange: (e) => setFacetCategorySearch((prev) => ({
6410
+ ...prev,
6411
+ [field]: e.target.value
6412
+ })),
6413
+ placeholder: `Search ${humanize(field).toLowerCase()}...`,
6414
+ className: "h-8.5 w-full rounded-md border border-neutral-soft bg-neutral-weak py-1 pl-8 pr-3 text-xs focus:border-primary-base focus:outline-none"
6415
+ }
6416
+ )
6417
+ ] }),
6418
+ filteredValues.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "py-2 text-center text-xs opacity-60", children: "No matching options" }) : filteredValues.map((facet) => {
6419
+ const isChecked = selectedValue === facet.value;
6420
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6421
+ "button",
6422
+ {
6423
+ type: "button",
6424
+ onClick: () => navigateWithoutReload(
6425
+ getFacetUrl(field, facet.value)
6426
+ ),
6427
+ "aria-pressed": isChecked,
6428
+ className: `flex w-full cursor-pointer items-center justify-between gap-3 rounded-md px-2.5 py-2 text-left text-sm transition-colors ${isChecked ? "bg-neutral-soft font-medium" : "hover:bg-neutral-weak"}`,
6429
+ children: [
6430
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex min-w-0 items-center gap-3", children: [
6431
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6432
+ "span",
6433
+ {
6434
+ className: `flex h-5 w-5 shrink-0 items-center justify-center rounded-md border transition-colors ${isChecked ? "bg-primary-base border-primary-base" : "border-neutral-soft bg-default"}`,
6435
+ children: isChecked && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CheckIcon, { className: "h-3.5 w-3.5" })
6436
+ }
6437
+ ),
6438
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "leading-snug break-words", children: facet.value })
6439
+ ] }),
6440
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "shrink-0 text-xs opacity-60 ml-2", children: facet.count })
6441
+ ]
6442
+ },
6443
+ `drawer-${field}-${facet.value}`
6444
+ );
6445
+ })
6446
+ ] })
6447
+ ] }, `drawer-cat-${field}`);
6448
+ }) }),
6449
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center gap-3 border-t border-neutral-soft bg-default p-4", children: [
6450
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6451
+ "button",
6452
+ {
6453
+ type: "button",
6454
+ onClick: () => setIsMobileFiltersOpen(false),
6455
+ className: "flex-1 h-11 rounded-md border border-neutral-soft bg-default text-sm font-medium transition-colors hover:bg-neutral-weak cursor-pointer flex items-center justify-center",
6456
+ children: "Close"
6457
+ }
6458
+ ),
6459
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6460
+ "button",
6461
+ {
6462
+ type: "button",
6463
+ onClick: () => setIsMobileFiltersOpen(false),
6464
+ className: "flex-1 h-11 rounded-md bg-primary-base text-sm font-semibold shadow-md transition-all hover:opacity-90 active:scale-98 cursor-pointer flex items-center justify-center",
6465
+ children: [
6466
+ "Apply Filters",
6467
+ selectedFacetCount > 0 ? ` (${selectedFacetCount})` : ""
6468
+ ]
6469
+ }
6470
+ )
6471
+ ] })
6472
+ ] })
6101
6473
  ] })
6102
6474
  ] }),
6103
6475
  shouldShowFacets && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex flex-col gap-3", children: [
6104
- /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center justify-between border-b pb-3", children: [
6476
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center justify-between border-b border-neutral-soft pb-3", children: [
6105
6477
  /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center gap-2", children: [
6106
6478
  /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(FilterSlidersIcon, { className: "h-4 w-4" }),
6107
6479
  /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("h2", { className: "text-base font-semibold tracking-tight", children: "Filters" }),
@@ -6121,12 +6493,12 @@ var init_DataBindingControls = __esm({
6121
6493
  }
6122
6494
  )
6123
6495
  ] }),
6124
- selectedFacetCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "flex flex-wrap gap-1.5 pb-2.5 border-b ", children: Array.from(selectedFacetValues.entries()).map(([field, value]) => /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6496
+ selectedFacetCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "flex flex-wrap gap-1.5 pb-2.5 border-b border-neutral-soft", children: Array.from(selectedFacetValues.entries()).map(([field, value]) => /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6125
6497
  "button",
6126
6498
  {
6127
6499
  type: "button",
6128
6500
  onClick: () => clearFacetField(field),
6129
- className: "group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-md border bg-neutral-weak px-2.5 py-1 text-xs transition-colors hover:bg-neutral-soft",
6501
+ className: "group inline-flex max-w-full cursor-pointer items-center gap-1.5 rounded-md border border-neutral-soft bg-neutral-weak px-2.5 py-1 text-xs transition-colors hover:bg-neutral-soft",
6130
6502
  title: `Remove filter: ${value}`,
6131
6503
  children: [
6132
6504
  /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "font-medium truncate max-w-[150px]", children: value }),
@@ -6153,7 +6525,10 @@ var init_DataBindingControls = __esm({
6153
6525
  onClick: () => toggleCategory(field),
6154
6526
  className: "flex w-full cursor-pointer items-center justify-between rounded-md px-1.5 py-1.5 text-sm font-semibold transition-colors duration-150 hover:bg-neutral-weak focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary-base",
6155
6527
  children: [
6156
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { children: humanize(field) }),
6528
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center gap-2", children: [
6529
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center rounded border border-neutral-soft bg-neutral-weak", children: getCategoryIcon(field) }),
6530
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { children: humanize(field) })
6531
+ ] }),
6157
6532
  /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6158
6533
  ChevronDownIcon,
6159
6534
  {
@@ -7023,8 +7398,14 @@ var ViewControl = (props) => {
7023
7398
  };
7024
7399
  var ViewControl_default = ViewControl;
7025
7400
 
7401
+ // src/components/controls/edit/InputControl.tsx
7402
+ var import_dynamic7 = __toESM(require("next/dynamic"));
7403
+ var InputControl2 = (0, import_dynamic7.default)(() => Promise.resolve().then(() => (init_InputControlClient(), InputControlClient_exports)), {
7404
+ ssr: false
7405
+ });
7406
+ var InputControl_default = InputControl2;
7407
+
7026
7408
  // src/index.ts
7027
- init_InputControl();
7028
7409
  init_InputControlType();
7029
7410
 
7030
7411
  // src/components/pageRenderingEngine/PageBodyRenderer.tsx
@@ -9541,7 +9922,7 @@ var DivContainer = async (props) => {
9541
9922
  renderedContainer,
9542
9923
  paginationControl
9543
9924
  ] }),
9544
- dataBindingProperties?.showFacets && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("aside", { children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9925
+ dataBindingProperties?.showFacets && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("aside", { className: "hidden lg:block", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9545
9926
  DataBindingControls2,
9546
9927
  {
9547
9928
  mode: "facets",
@@ -9815,7 +10196,6 @@ var NavigationTabsV2_default = NavigationTabsV2;
9815
10196
 
9816
10197
  // src/components/dataForm/DataList.tsx
9817
10198
  var import_react67 = __toESM(require("react"));
9818
- init_InputControl();
9819
10199
  var import_navigation3 = require("next/navigation");
9820
10200
 
9821
10201
  // src/components/dataForm/NoContentView.tsx
@@ -10621,14 +11001,12 @@ init_InputControlType();
10621
11001
 
10622
11002
  // src/components/dataForm/DataForm.tsx
10623
11003
  var import_react70 = __toESM(require("react"));
10624
- init_InputControl();
10625
11004
  init_Icon();
10626
11005
  init_Button();
10627
11006
  init_StyleTypes();
10628
11007
 
10629
11008
  // src/components/dataForm/DataFormChildSection.tsx
10630
11009
  var import_react69 = __toESM(require("react"));
10631
- init_InputControl();
10632
11010
 
10633
11011
  // src/components/dataForm/StyleTypes.tsx
10634
11012
  var StyleTypes2 = /* @__PURE__ */ ((StyleTypes3) => {