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

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
@@ -2586,16 +2586,339 @@ var init_PercentageInput = __esm({
2586
2586
  }
2587
2587
  });
2588
2588
 
2589
+ // src/components/utilities/CountryCodes.tsx
2590
+ var COUNTRY_CODES, PRIMARY_COUNTRY_BY_DIAL_CODE, findCountryByDialCode, findCountryByIso2, getDialCodeByCountryCode, resolveCountry, getCountryFlag, splitPhoneNumber;
2591
+ var init_CountryCodes = __esm({
2592
+ "src/components/utilities/CountryCodes.tsx"() {
2593
+ "use strict";
2594
+ COUNTRY_CODES = [
2595
+ { name: "Afghanistan", iso2: "AF", dialCode: "+93" },
2596
+ { name: "\xC5land Islands", iso2: "AX", dialCode: "+358" },
2597
+ { name: "Albania", iso2: "AL", dialCode: "+355" },
2598
+ { name: "Algeria", iso2: "DZ", dialCode: "+213" },
2599
+ { name: "American Samoa", iso2: "AS", dialCode: "+1684" },
2600
+ { name: "Andorra", iso2: "AD", dialCode: "+376" },
2601
+ { name: "Angola", iso2: "AO", dialCode: "+244" },
2602
+ { name: "Anguilla", iso2: "AI", dialCode: "+1264" },
2603
+ { name: "Antigua and Barbuda", iso2: "AG", dialCode: "+1268" },
2604
+ { name: "Argentina", iso2: "AR", dialCode: "+54" },
2605
+ { name: "Armenia", iso2: "AM", dialCode: "+374" },
2606
+ { name: "Aruba", iso2: "AW", dialCode: "+297" },
2607
+ { name: "Australia", iso2: "AU", dialCode: "+61" },
2608
+ { name: "Austria", iso2: "AT", dialCode: "+43" },
2609
+ { name: "Azerbaijan", iso2: "AZ", dialCode: "+994" },
2610
+ { name: "Bahamas", iso2: "BS", dialCode: "+1242" },
2611
+ { name: "Bahrain", iso2: "BH", dialCode: "+973" },
2612
+ { name: "Bangladesh", iso2: "BD", dialCode: "+880" },
2613
+ { name: "Barbados", iso2: "BB", dialCode: "+1246" },
2614
+ { name: "Belarus", iso2: "BY", dialCode: "+375" },
2615
+ { name: "Belgium", iso2: "BE", dialCode: "+32" },
2616
+ { name: "Belize", iso2: "BZ", dialCode: "+501" },
2617
+ { name: "Benin", iso2: "BJ", dialCode: "+229" },
2618
+ { name: "Bermuda", iso2: "BM", dialCode: "+1441" },
2619
+ { name: "Bhutan", iso2: "BT", dialCode: "+975" },
2620
+ { name: "Bolivia", iso2: "BO", dialCode: "+591" },
2621
+ { name: "Bosnia and Herzegovina", iso2: "BA", dialCode: "+387" },
2622
+ { name: "Botswana", iso2: "BW", dialCode: "+267" },
2623
+ { name: "Brazil", iso2: "BR", dialCode: "+55" },
2624
+ { name: "British Indian Ocean Territory", iso2: "IO", dialCode: "+246" },
2625
+ { name: "British Virgin Islands", iso2: "VG", dialCode: "+1284" },
2626
+ { name: "Brunei", iso2: "BN", dialCode: "+673" },
2627
+ { name: "Bulgaria", iso2: "BG", dialCode: "+359" },
2628
+ { name: "Burkina Faso", iso2: "BF", dialCode: "+226" },
2629
+ { name: "Burundi", iso2: "BI", dialCode: "+257" },
2630
+ { name: "Cambodia", iso2: "KH", dialCode: "+855" },
2631
+ { name: "Cameroon", iso2: "CM", dialCode: "+237" },
2632
+ { name: "Canada", iso2: "CA", dialCode: "+1" },
2633
+ { name: "Cape Verde", iso2: "CV", dialCode: "+238" },
2634
+ { name: "Caribbean Netherlands", iso2: "BQ", dialCode: "+599" },
2635
+ { name: "Cayman Islands", iso2: "KY", dialCode: "+1345" },
2636
+ { name: "Central African Republic", iso2: "CF", dialCode: "+236" },
2637
+ { name: "Chad", iso2: "TD", dialCode: "+235" },
2638
+ { name: "Chile", iso2: "CL", dialCode: "+56" },
2639
+ { name: "China", iso2: "CN", dialCode: "+86" },
2640
+ { name: "Christmas Island", iso2: "CX", dialCode: "+61" },
2641
+ { name: "Cocos (Keeling) Islands", iso2: "CC", dialCode: "+61" },
2642
+ { name: "Colombia", iso2: "CO", dialCode: "+57" },
2643
+ { name: "Comoros", iso2: "KM", dialCode: "+269" },
2644
+ { name: "Congo", iso2: "CG", dialCode: "+242" },
2645
+ { name: "Congo (DRC)", iso2: "CD", dialCode: "+243" },
2646
+ { name: "Cook Islands", iso2: "CK", dialCode: "+682" },
2647
+ { name: "Costa Rica", iso2: "CR", dialCode: "+506" },
2648
+ { name: "C\xF4te d'Ivoire", iso2: "CI", dialCode: "+225" },
2649
+ { name: "Croatia", iso2: "HR", dialCode: "+385" },
2650
+ { name: "Cuba", iso2: "CU", dialCode: "+53" },
2651
+ { name: "Cura\xE7ao", iso2: "CW", dialCode: "+599" },
2652
+ { name: "Cyprus", iso2: "CY", dialCode: "+357" },
2653
+ { name: "Czech Republic", iso2: "CZ", dialCode: "+420" },
2654
+ { name: "Denmark", iso2: "DK", dialCode: "+45" },
2655
+ { name: "Djibouti", iso2: "DJ", dialCode: "+253" },
2656
+ { name: "Dominica", iso2: "DM", dialCode: "+1767" },
2657
+ { name: "Dominican Republic", iso2: "DO", dialCode: "+1" },
2658
+ { name: "Ecuador", iso2: "EC", dialCode: "+593" },
2659
+ { name: "Egypt", iso2: "EG", dialCode: "+20" },
2660
+ { name: "El Salvador", iso2: "SV", dialCode: "+503" },
2661
+ { name: "Equatorial Guinea", iso2: "GQ", dialCode: "+240" },
2662
+ { name: "Eritrea", iso2: "ER", dialCode: "+291" },
2663
+ { name: "Estonia", iso2: "EE", dialCode: "+372" },
2664
+ { name: "Eswatini", iso2: "SZ", dialCode: "+268" },
2665
+ { name: "Ethiopia", iso2: "ET", dialCode: "+251" },
2666
+ { name: "Falkland Islands", iso2: "FK", dialCode: "+500" },
2667
+ { name: "Faroe Islands", iso2: "FO", dialCode: "+298" },
2668
+ { name: "Fiji", iso2: "FJ", dialCode: "+679" },
2669
+ { name: "Finland", iso2: "FI", dialCode: "+358" },
2670
+ { name: "France", iso2: "FR", dialCode: "+33" },
2671
+ { name: "French Guiana", iso2: "GF", dialCode: "+594" },
2672
+ { name: "French Polynesia", iso2: "PF", dialCode: "+689" },
2673
+ { name: "Gabon", iso2: "GA", dialCode: "+241" },
2674
+ { name: "Gambia", iso2: "GM", dialCode: "+220" },
2675
+ { name: "Georgia", iso2: "GE", dialCode: "+995" },
2676
+ { name: "Germany", iso2: "DE", dialCode: "+49" },
2677
+ { name: "Ghana", iso2: "GH", dialCode: "+233" },
2678
+ { name: "Gibraltar", iso2: "GI", dialCode: "+350" },
2679
+ { name: "Greece", iso2: "GR", dialCode: "+30" },
2680
+ { name: "Greenland", iso2: "GL", dialCode: "+299" },
2681
+ { name: "Grenada", iso2: "GD", dialCode: "+1473" },
2682
+ { name: "Guadeloupe", iso2: "GP", dialCode: "+590" },
2683
+ { name: "Guam", iso2: "GU", dialCode: "+1671" },
2684
+ { name: "Guatemala", iso2: "GT", dialCode: "+502" },
2685
+ { name: "Guernsey", iso2: "GG", dialCode: "+44" },
2686
+ { name: "Guinea", iso2: "GN", dialCode: "+224" },
2687
+ { name: "Guinea-Bissau", iso2: "GW", dialCode: "+245" },
2688
+ { name: "Guyana", iso2: "GY", dialCode: "+592" },
2689
+ { name: "Haiti", iso2: "HT", dialCode: "+509" },
2690
+ { name: "Honduras", iso2: "HN", dialCode: "+504" },
2691
+ { name: "Hong Kong", iso2: "HK", dialCode: "+852" },
2692
+ { name: "Hungary", iso2: "HU", dialCode: "+36" },
2693
+ { name: "Iceland", iso2: "IS", dialCode: "+354" },
2694
+ { name: "India", iso2: "IN", dialCode: "+91" },
2695
+ { name: "Indonesia", iso2: "ID", dialCode: "+62" },
2696
+ { name: "Iran", iso2: "IR", dialCode: "+98" },
2697
+ { name: "Iraq", iso2: "IQ", dialCode: "+964" },
2698
+ { name: "Ireland", iso2: "IE", dialCode: "+353" },
2699
+ { name: "Isle of Man", iso2: "IM", dialCode: "+44" },
2700
+ { name: "Israel", iso2: "IL", dialCode: "+972" },
2701
+ { name: "Italy", iso2: "IT", dialCode: "+39" },
2702
+ { name: "Jamaica", iso2: "JM", dialCode: "+1876" },
2703
+ { name: "Japan", iso2: "JP", dialCode: "+81" },
2704
+ { name: "Jersey", iso2: "JE", dialCode: "+44" },
2705
+ { name: "Jordan", iso2: "JO", dialCode: "+962" },
2706
+ { name: "Kazakhstan", iso2: "KZ", dialCode: "+7" },
2707
+ { name: "Kenya", iso2: "KE", dialCode: "+254" },
2708
+ { name: "Kiribati", iso2: "KI", dialCode: "+686" },
2709
+ { name: "Kosovo", iso2: "XK", dialCode: "+383" },
2710
+ { name: "Kuwait", iso2: "KW", dialCode: "+965" },
2711
+ { name: "Kyrgyzstan", iso2: "KG", dialCode: "+996" },
2712
+ { name: "Laos", iso2: "LA", dialCode: "+856" },
2713
+ { name: "Latvia", iso2: "LV", dialCode: "+371" },
2714
+ { name: "Lebanon", iso2: "LB", dialCode: "+961" },
2715
+ { name: "Lesotho", iso2: "LS", dialCode: "+266" },
2716
+ { name: "Liberia", iso2: "LR", dialCode: "+231" },
2717
+ { name: "Libya", iso2: "LY", dialCode: "+218" },
2718
+ { name: "Liechtenstein", iso2: "LI", dialCode: "+423" },
2719
+ { name: "Lithuania", iso2: "LT", dialCode: "+370" },
2720
+ { name: "Luxembourg", iso2: "LU", dialCode: "+352" },
2721
+ { name: "Macau", iso2: "MO", dialCode: "+853" },
2722
+ { name: "Madagascar", iso2: "MG", dialCode: "+261" },
2723
+ { name: "Malawi", iso2: "MW", dialCode: "+265" },
2724
+ { name: "Malaysia", iso2: "MY", dialCode: "+60" },
2725
+ { name: "Maldives", iso2: "MV", dialCode: "+960" },
2726
+ { name: "Mali", iso2: "ML", dialCode: "+223" },
2727
+ { name: "Malta", iso2: "MT", dialCode: "+356" },
2728
+ { name: "Marshall Islands", iso2: "MH", dialCode: "+692" },
2729
+ { name: "Martinique", iso2: "MQ", dialCode: "+596" },
2730
+ { name: "Mauritania", iso2: "MR", dialCode: "+222" },
2731
+ { name: "Mauritius", iso2: "MU", dialCode: "+230" },
2732
+ { name: "Mayotte", iso2: "YT", dialCode: "+262" },
2733
+ { name: "Mexico", iso2: "MX", dialCode: "+52" },
2734
+ { name: "Micronesia", iso2: "FM", dialCode: "+691" },
2735
+ { name: "Moldova", iso2: "MD", dialCode: "+373" },
2736
+ { name: "Monaco", iso2: "MC", dialCode: "+377" },
2737
+ { name: "Mongolia", iso2: "MN", dialCode: "+976" },
2738
+ { name: "Montenegro", iso2: "ME", dialCode: "+382" },
2739
+ { name: "Montserrat", iso2: "MS", dialCode: "+1664" },
2740
+ { name: "Morocco", iso2: "MA", dialCode: "+212" },
2741
+ { name: "Mozambique", iso2: "MZ", dialCode: "+258" },
2742
+ { name: "Myanmar", iso2: "MM", dialCode: "+95" },
2743
+ { name: "Namibia", iso2: "NA", dialCode: "+264" },
2744
+ { name: "Nauru", iso2: "NR", dialCode: "+674" },
2745
+ { name: "Nepal", iso2: "NP", dialCode: "+977" },
2746
+ { name: "Netherlands", iso2: "NL", dialCode: "+31" },
2747
+ { name: "New Caledonia", iso2: "NC", dialCode: "+687" },
2748
+ { name: "New Zealand", iso2: "NZ", dialCode: "+64" },
2749
+ { name: "Nicaragua", iso2: "NI", dialCode: "+505" },
2750
+ { name: "Niger", iso2: "NE", dialCode: "+227" },
2751
+ { name: "Nigeria", iso2: "NG", dialCode: "+234" },
2752
+ { name: "Niue", iso2: "NU", dialCode: "+683" },
2753
+ { name: "Norfolk Island", iso2: "NF", dialCode: "+672" },
2754
+ { name: "North Korea", iso2: "KP", dialCode: "+850" },
2755
+ { name: "North Macedonia", iso2: "MK", dialCode: "+389" },
2756
+ { name: "Northern Mariana Islands", iso2: "MP", dialCode: "+1670" },
2757
+ { name: "Norway", iso2: "NO", dialCode: "+47" },
2758
+ { name: "Oman", iso2: "OM", dialCode: "+968" },
2759
+ { name: "Pakistan", iso2: "PK", dialCode: "+92" },
2760
+ { name: "Palau", iso2: "PW", dialCode: "+680" },
2761
+ { name: "Palestine", iso2: "PS", dialCode: "+970" },
2762
+ { name: "Panama", iso2: "PA", dialCode: "+507" },
2763
+ { name: "Papua New Guinea", iso2: "PG", dialCode: "+675" },
2764
+ { name: "Paraguay", iso2: "PY", dialCode: "+595" },
2765
+ { name: "Peru", iso2: "PE", dialCode: "+51" },
2766
+ { name: "Philippines", iso2: "PH", dialCode: "+63" },
2767
+ { name: "Poland", iso2: "PL", dialCode: "+48" },
2768
+ { name: "Portugal", iso2: "PT", dialCode: "+351" },
2769
+ { name: "Puerto Rico", iso2: "PR", dialCode: "+1" },
2770
+ { name: "Qatar", iso2: "QA", dialCode: "+974" },
2771
+ { name: "R\xE9union", iso2: "RE", dialCode: "+262" },
2772
+ { name: "Romania", iso2: "RO", dialCode: "+40" },
2773
+ { name: "Russia", iso2: "RU", dialCode: "+7" },
2774
+ { name: "Rwanda", iso2: "RW", dialCode: "+250" },
2775
+ { name: "Saint Barth\xE9lemy", iso2: "BL", dialCode: "+590" },
2776
+ { name: "Saint Helena", iso2: "SH", dialCode: "+290" },
2777
+ { name: "Saint Kitts and Nevis", iso2: "KN", dialCode: "+1869" },
2778
+ { name: "Saint Lucia", iso2: "LC", dialCode: "+1758" },
2779
+ { name: "Saint Martin", iso2: "MF", dialCode: "+590" },
2780
+ { name: "Saint Pierre and Miquelon", iso2: "PM", dialCode: "+508" },
2781
+ { name: "Saint Vincent and the Grenadines", iso2: "VC", dialCode: "+1784" },
2782
+ { name: "Samoa", iso2: "WS", dialCode: "+685" },
2783
+ { name: "San Marino", iso2: "SM", dialCode: "+378" },
2784
+ { name: "S\xE3o Tom\xE9 and Pr\xEDncipe", iso2: "ST", dialCode: "+239" },
2785
+ { name: "Saudi Arabia", iso2: "SA", dialCode: "+966" },
2786
+ { name: "Senegal", iso2: "SN", dialCode: "+221" },
2787
+ { name: "Serbia", iso2: "RS", dialCode: "+381" },
2788
+ { name: "Seychelles", iso2: "SC", dialCode: "+248" },
2789
+ { name: "Sierra Leone", iso2: "SL", dialCode: "+232" },
2790
+ { name: "Singapore", iso2: "SG", dialCode: "+65" },
2791
+ { name: "Sint Maarten", iso2: "SX", dialCode: "+1721" },
2792
+ { name: "Slovakia", iso2: "SK", dialCode: "+421" },
2793
+ { name: "Slovenia", iso2: "SI", dialCode: "+386" },
2794
+ { name: "Solomon Islands", iso2: "SB", dialCode: "+677" },
2795
+ { name: "Somalia", iso2: "SO", dialCode: "+252" },
2796
+ { name: "South Africa", iso2: "ZA", dialCode: "+27" },
2797
+ { name: "South Korea", iso2: "KR", dialCode: "+82" },
2798
+ { name: "South Sudan", iso2: "SS", dialCode: "+211" },
2799
+ { name: "Spain", iso2: "ES", dialCode: "+34" },
2800
+ { name: "Sri Lanka", iso2: "LK", dialCode: "+94" },
2801
+ { name: "Sudan", iso2: "SD", dialCode: "+249" },
2802
+ { name: "Suriname", iso2: "SR", dialCode: "+597" },
2803
+ { name: "Svalbard and Jan Mayen", iso2: "SJ", dialCode: "+47" },
2804
+ { name: "Sweden", iso2: "SE", dialCode: "+46" },
2805
+ { name: "Switzerland", iso2: "CH", dialCode: "+41" },
2806
+ { name: "Syria", iso2: "SY", dialCode: "+963" },
2807
+ { name: "Taiwan", iso2: "TW", dialCode: "+886" },
2808
+ { name: "Tajikistan", iso2: "TJ", dialCode: "+992" },
2809
+ { name: "Tanzania", iso2: "TZ", dialCode: "+255" },
2810
+ { name: "Thailand", iso2: "TH", dialCode: "+66" },
2811
+ { name: "Timor-Leste", iso2: "TL", dialCode: "+670" },
2812
+ { name: "Togo", iso2: "TG", dialCode: "+228" },
2813
+ { name: "Tokelau", iso2: "TK", dialCode: "+690" },
2814
+ { name: "Tonga", iso2: "TO", dialCode: "+676" },
2815
+ { name: "Trinidad and Tobago", iso2: "TT", dialCode: "+1868" },
2816
+ { name: "Tunisia", iso2: "TN", dialCode: "+216" },
2817
+ { name: "Turkey", iso2: "TR", dialCode: "+90" },
2818
+ { name: "Turkmenistan", iso2: "TM", dialCode: "+993" },
2819
+ { name: "Turks and Caicos Islands", iso2: "TC", dialCode: "+1649" },
2820
+ { name: "Tuvalu", iso2: "TV", dialCode: "+688" },
2821
+ { name: "Uganda", iso2: "UG", dialCode: "+256" },
2822
+ { name: "Ukraine", iso2: "UA", dialCode: "+380" },
2823
+ { name: "United Arab Emirates", iso2: "AE", dialCode: "+971" },
2824
+ { name: "United Kingdom", iso2: "GB", dialCode: "+44" },
2825
+ { name: "United States", iso2: "US", dialCode: "+1" },
2826
+ { name: "U.S. Virgin Islands", iso2: "VI", dialCode: "+1340" },
2827
+ { name: "Uruguay", iso2: "UY", dialCode: "+598" },
2828
+ { name: "Uzbekistan", iso2: "UZ", dialCode: "+998" },
2829
+ { name: "Vanuatu", iso2: "VU", dialCode: "+678" },
2830
+ { name: "Vatican City", iso2: "VA", dialCode: "+39" },
2831
+ { name: "Venezuela", iso2: "VE", dialCode: "+58" },
2832
+ { name: "Vietnam", iso2: "VN", dialCode: "+84" },
2833
+ { name: "Wallis and Futuna", iso2: "WF", dialCode: "+681" },
2834
+ { name: "Western Sahara", iso2: "EH", dialCode: "+212" },
2835
+ { name: "Yemen", iso2: "YE", dialCode: "+967" },
2836
+ { name: "Zambia", iso2: "ZM", dialCode: "+260" },
2837
+ { name: "Zimbabwe", iso2: "ZW", dialCode: "+263" }
2838
+ ];
2839
+ PRIMARY_COUNTRY_BY_DIAL_CODE = {
2840
+ "+1": "US",
2841
+ "+7": "RU",
2842
+ "+39": "IT",
2843
+ "+44": "GB",
2844
+ "+47": "NO",
2845
+ "+61": "AU",
2846
+ "+212": "MA",
2847
+ "+262": "RE",
2848
+ "+358": "FI",
2849
+ "+590": "GP",
2850
+ "+599": "CW"
2851
+ };
2852
+ findCountryByDialCode = (dialCode) => {
2853
+ const primaryIso2 = PRIMARY_COUNTRY_BY_DIAL_CODE[dialCode];
2854
+ return primaryIso2 && COUNTRY_CODES.find((c) => c.iso2 === primaryIso2) || COUNTRY_CODES.find((c) => c.dialCode === dialCode);
2855
+ };
2856
+ findCountryByIso2 = (iso2) => {
2857
+ if (!iso2) return void 0;
2858
+ const normalized = iso2.trim().toUpperCase();
2859
+ return COUNTRY_CODES.find((c) => c.iso2 === normalized);
2860
+ };
2861
+ getDialCodeByCountryCode = (iso2) => findCountryByIso2(iso2)?.dialCode;
2862
+ resolveCountry = (codeOrDialCode) => {
2863
+ const value = codeOrDialCode?.trim();
2864
+ if (!value) return void 0;
2865
+ return value.startsWith("+") ? findCountryByDialCode(value) : findCountryByIso2(value);
2866
+ };
2867
+ getCountryFlag = (iso2) => iso2.toUpperCase().replace(/./g, (char) => String.fromCodePoint(127397 + char.charCodeAt(0)));
2868
+ splitPhoneNumber = (value) => {
2869
+ const trimmed = (value ?? "").trim();
2870
+ if (!trimmed.startsWith("+")) {
2871
+ return { number: trimmed };
2872
+ }
2873
+ const [head, ...rest] = trimmed.split(/\s+/);
2874
+ const digits = trimmed.replace(/[^\d+]/g, "");
2875
+ const prefixMatch = [...COUNTRY_CODES].sort((a, b) => b.dialCode.length - a.dialCode.length).find((c) => digits.startsWith(c.dialCode));
2876
+ const country = (rest.length > 0 ? findCountryByDialCode(head) : void 0) ?? (prefixMatch ? findCountryByDialCode(prefixMatch.dialCode) : void 0);
2877
+ if (!country) {
2878
+ return { number: trimmed };
2879
+ }
2880
+ const number = rest.length > 0 && head === country.dialCode ? rest.join(" ") : digits.slice(country.dialCode.length);
2881
+ return { country, number };
2882
+ };
2883
+ }
2884
+ });
2885
+
2589
2886
  // src/components/controls/edit/PhoneInput.tsx
2590
- var import_react28, import_jsx_runtime35, PhoneInput, PhoneInput_default;
2887
+ var import_react28, import_jsx_runtime35, DEFAULT_DIAL_CODE, PhoneInput, PhoneInput_default;
2591
2888
  var init_PhoneInput = __esm({
2592
2889
  "src/components/controls/edit/PhoneInput.tsx"() {
2593
2890
  "use strict";
2594
2891
  import_react28 = __toESM(require("react"));
2892
+ init_CountryCodes();
2595
2893
  import_jsx_runtime35 = require("react/jsx-runtime");
2894
+ DEFAULT_DIAL_CODE = "+91";
2596
2895
  PhoneInput = (props) => {
2597
- const textChangeHandler = (event) => {
2598
- const text = event.target.value;
2896
+ const hasFixedPrefix = props.prefix !== void 0 && props.prefix !== null;
2897
+ let value = "";
2898
+ if (props.value !== void 0 && props.value !== null) {
2899
+ value = props.value;
2900
+ }
2901
+ const parsed = (0, import_react28.useMemo)(
2902
+ () => hasFixedPrefix ? { number: value } : splitPhoneNumber(String(value)),
2903
+ [hasFixedPrefix, value]
2904
+ );
2905
+ const defaultCountry = resolveCountry(props?.attributes?.defaultCountryCode) ?? findCountryByDialCode(DEFAULT_DIAL_CODE);
2906
+ const hasUserPickedCountry = (0, import_react28.useRef)(false);
2907
+ const [selectedIso2, setSelectedIso2] = (0, import_react28.useState)(
2908
+ parsed.country?.iso2 ?? defaultCountry.iso2
2909
+ );
2910
+ const selectedCountry = COUNTRY_CODES.find((c) => c.iso2 === selectedIso2) ?? defaultCountry;
2911
+ (0, import_react28.useEffect)(() => {
2912
+ if (parsed.country && parsed.country.dialCode !== selectedCountry.dialCode) {
2913
+ setSelectedIso2(parsed.country.iso2);
2914
+ }
2915
+ }, [parsed.country, selectedCountry.dialCode]);
2916
+ (0, import_react28.useEffect)(() => {
2917
+ if (!parsed.country && !parsed.number && !hasUserPickedCountry.current) {
2918
+ setSelectedIso2(defaultCountry.iso2);
2919
+ }
2920
+ }, [defaultCountry.iso2, parsed.country, parsed.number]);
2921
+ const emit = (text) => {
2599
2922
  if (props.callback !== void 0) {
2600
2923
  props.callback(
2601
2924
  {
@@ -2607,31 +2930,69 @@ var init_PhoneInput = __esm({
2607
2930
  );
2608
2931
  }
2609
2932
  };
2610
- let value = "";
2611
- if (props.value !== void 0 && props.value !== null) {
2612
- value = props.value;
2613
- }
2933
+ const combine = (dialCode, number) => number ? `${dialCode} ${number}` : "";
2934
+ const textChangeHandler = (event) => {
2935
+ const text = event.target.value;
2936
+ if (hasFixedPrefix) {
2937
+ emit(text);
2938
+ return;
2939
+ }
2940
+ emit(combine(selectedCountry.dialCode, text.replace(/\D/g, "")));
2941
+ };
2942
+ const countryChangeHandler = (event) => {
2943
+ const country = COUNTRY_CODES.find((c) => c.iso2 === event.target.value);
2944
+ if (!country) return;
2945
+ hasUserPickedCountry.current = true;
2946
+ setSelectedIso2(country.iso2);
2947
+ if (parsed.number) {
2948
+ emit(combine(country.dialCode, parsed.number));
2949
+ }
2950
+ };
2951
+ const isReadOnly = props?.attributes?.readOnly;
2614
2952
  return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react28.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("label", { className: "block mb-1", children: [
2615
2953
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-sm font-medium ", children: props?.attributes?.label }),
2616
2954
  " ",
2617
2955
  props?.attributes?.label && props?.attributes?.required && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "bg-error-weak", children: "*" }),
2618
2956
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex items-center rounded border ", children: [
2619
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "px-3", children: props.prefix }),
2957
+ hasFixedPrefix ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "px-3", children: props.prefix }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "relative flex items-center gap-1 self-stretch px-3 border-r whitespace-nowrap", children: [
2958
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { "aria-hidden": "true", children: getCountryFlag(selectedCountry.iso2) }),
2959
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: selectedCountry.dialCode }),
2960
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("svg", { "aria-hidden": "true", className: "w-3 h-3 opacity-60", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("path", { fillRule: "evenodd", d: "M5.23 7.21a.75.75 0 011.06.02L10 11.17l3.71-3.94a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z", clipRule: "evenodd" }) }),
2961
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2962
+ "select",
2963
+ {
2964
+ "aria-label": "Country code",
2965
+ value: selectedCountry.iso2,
2966
+ onChange: countryChangeHandler,
2967
+ disabled: isReadOnly,
2968
+ className: "absolute inset-0 w-full h-full opacity-0 cursor-pointer disabled:cursor-not-allowed",
2969
+ children: COUNTRY_CODES.map((country) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("option", { value: country.iso2, children: [
2970
+ getCountryFlag(country.iso2),
2971
+ " ",
2972
+ country.name,
2973
+ " (",
2974
+ country.dialCode,
2975
+ ")"
2976
+ ] }, country.iso2))
2977
+ }
2978
+ )
2979
+ ] }),
2620
2980
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2621
2981
  "input",
2622
2982
  {
2623
- type: "text",
2983
+ type: hasFixedPrefix ? "text" : "tel",
2984
+ inputMode: hasFixedPrefix ? void 0 : "numeric",
2624
2985
  name: props.name,
2625
2986
  id: props.name,
2626
- value,
2987
+ value: parsed.number,
2627
2988
  onChange: textChangeHandler,
2628
2989
  required: props?.attributes?.required,
2629
2990
  placeholder: props?.attributes?.placeholder,
2630
2991
  maxLength: props?.attributes?.maxLength,
2631
2992
  pattern: props?.attributes?.pattern,
2632
- disabled: props?.attributes?.readOnly,
2993
+ disabled: isReadOnly,
2633
2994
  minLength: props?.attributes?.minLength,
2634
- className: "py-1.5 block w-full outline-none border-0 mr-0.5"
2995
+ className: `py-1.5 block w-full outline-none border-0 mr-0.5 ${hasFixedPrefix ? "" : "pl-3"}`
2635
2996
  }
2636
2997
  )
2637
2998
  ] }),
@@ -4601,19 +4962,6 @@ var init_InputControlClient = __esm({
4601
4962
  }
4602
4963
  });
4603
4964
 
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
4965
  // src/clients/CacheManage.tsx
4618
4966
  var import_node_cache, CacheManager;
4619
4967
  var init_CacheManage = __esm({
@@ -5686,7 +6034,7 @@ var DataBindingControls_exports = {};
5686
6034
  __export(DataBindingControls_exports, {
5687
6035
  default: () => DataBindingControls_default
5688
6036
  });
5689
- var import_react59, import_navigation, import_jsx_runtime86, humanize, escapeODataString, parseFacetSelections, buildFacetFilter, parseODataSearch, SearchIcon, ResetIcon, FilterSlidersIcon, ChevronDownIcon, CheckIcon, CloseIcon, normalizeSortOption, DataBindingControls, DataBindingControls_default;
6037
+ 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
6038
  var init_DataBindingControls = __esm({
5691
6039
  "src/components/pageRenderingEngine/nodes/DataBindingControls.tsx"() {
5692
6040
  "use strict";
@@ -5694,8 +6042,6 @@ var init_DataBindingControls = __esm({
5694
6042
  import_react59 = require("react");
5695
6043
  import_navigation = require("next/navigation");
5696
6044
  init_Button();
5697
- init_InputControl();
5698
- init_InputControlType();
5699
6045
  init_StyleTypes();
5700
6046
  import_jsx_runtime86 = require("react/jsx-runtime");
5701
6047
  humanize = (value) => value.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ").trim();
@@ -5810,6 +6156,105 @@ var init_DataBindingControls = __esm({
5810
6156
  children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" })
5811
6157
  }
5812
6158
  );
6159
+ MapPinIcon = ({ className = "" }) => /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6160
+ "svg",
6161
+ {
6162
+ "aria-hidden": "true",
6163
+ className,
6164
+ fill: "none",
6165
+ viewBox: "0 0 24 24",
6166
+ stroke: "currentColor",
6167
+ strokeWidth: "2",
6168
+ children: [
6169
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6170
+ "path",
6171
+ {
6172
+ strokeLinecap: "round",
6173
+ strokeLinejoin: "round",
6174
+ 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"
6175
+ }
6176
+ ),
6177
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6178
+ "path",
6179
+ {
6180
+ strokeLinecap: "round",
6181
+ strokeLinejoin: "round",
6182
+ d: "M15 11a3 3 0 11-6 0 3 3 0 016 0z"
6183
+ }
6184
+ )
6185
+ ]
6186
+ }
6187
+ );
6188
+ BriefcaseIcon = ({ className = "" }) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6189
+ "svg",
6190
+ {
6191
+ "aria-hidden": "true",
6192
+ className,
6193
+ fill: "none",
6194
+ viewBox: "0 0 24 24",
6195
+ stroke: "currentColor",
6196
+ strokeWidth: "2",
6197
+ children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6198
+ "path",
6199
+ {
6200
+ strokeLinecap: "round",
6201
+ strokeLinejoin: "round",
6202
+ 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"
6203
+ }
6204
+ )
6205
+ }
6206
+ );
6207
+ FileTextIcon = ({ className = "" }) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6208
+ "svg",
6209
+ {
6210
+ "aria-hidden": "true",
6211
+ className,
6212
+ fill: "none",
6213
+ viewBox: "0 0 24 24",
6214
+ stroke: "currentColor",
6215
+ strokeWidth: "2",
6216
+ children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6217
+ "path",
6218
+ {
6219
+ strokeLinecap: "round",
6220
+ strokeLinejoin: "round",
6221
+ 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"
6222
+ }
6223
+ )
6224
+ }
6225
+ );
6226
+ TagIcon = ({ className = "" }) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6227
+ "svg",
6228
+ {
6229
+ "aria-hidden": "true",
6230
+ className,
6231
+ fill: "none",
6232
+ viewBox: "0 0 24 24",
6233
+ stroke: "currentColor",
6234
+ strokeWidth: "2",
6235
+ children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6236
+ "path",
6237
+ {
6238
+ strokeLinecap: "round",
6239
+ strokeLinejoin: "round",
6240
+ 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"
6241
+ }
6242
+ )
6243
+ }
6244
+ );
6245
+ getCategoryIcon = (category) => {
6246
+ const lower = category.toLowerCase();
6247
+ if (lower.includes("location") || lower.includes("city") || lower.includes("country") || lower.includes("state") || lower.includes("address")) {
6248
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(MapPinIcon, { className: "h-4 w-4" });
6249
+ }
6250
+ if (lower.includes("type") || lower.includes("work") || lower.includes("employment") || lower.includes("experience")) {
6251
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(BriefcaseIcon, { className: "h-4 w-4" });
6252
+ }
6253
+ if (lower.includes("department") || lower.includes("category") || lower.includes("role") || lower.includes("industry")) {
6254
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(FileTextIcon, { className: "h-4 w-4" });
6255
+ }
6256
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(TagIcon, { className: "h-4 w-4" });
6257
+ };
5813
6258
  normalizeSortOption = (option) => {
5814
6259
  const direction = option.direction.trim();
5815
6260
  const title = option.title || humanize(option.name);
@@ -5832,10 +6277,16 @@ var init_DataBindingControls = __esm({
5832
6277
  const searchParams = (0, import_navigation.useSearchParams)();
5833
6278
  const [collapsedCategories, setCollapsedCategories] = (0, import_react59.useState)({});
5834
6279
  const [isSortOpen, setIsSortOpen] = (0, import_react59.useState)(false);
5835
- const sortDropdownRef = (0, import_react59.useRef)(null);
6280
+ const [isMobileFiltersOpen, setIsMobileFiltersOpen] = (0, import_react59.useState)(false);
6281
+ const [facetCategorySearch, setFacetCategorySearch] = (0, import_react59.useState)({});
6282
+ const desktopSortDropdownRef = (0, import_react59.useRef)(null);
6283
+ const mobileSortDropdownRef = (0, import_react59.useRef)(null);
5836
6284
  (0, import_react59.useEffect)(() => {
5837
6285
  const handleClickOutside = (event) => {
5838
- if (sortDropdownRef.current && !sortDropdownRef.current.contains(event.target)) {
6286
+ const target = event.target;
6287
+ const clickedInsideDesktop = desktopSortDropdownRef.current?.contains(target);
6288
+ const clickedInsideMobile = mobileSortDropdownRef.current?.contains(target);
6289
+ if (!clickedInsideDesktop && !clickedInsideMobile) {
5839
6290
  setIsSortOpen(false);
5840
6291
  }
5841
6292
  };
@@ -5864,19 +6315,53 @@ var init_DataBindingControls = __esm({
5864
6315
  () => parseFacetSelections(currentFilter),
5865
6316
  [currentFilter]
5866
6317
  );
6318
+ (0, import_react59.useEffect)(() => {
6319
+ if (isMobileFiltersOpen) {
6320
+ document.body.style.overflow = "hidden";
6321
+ } else {
6322
+ document.body.style.overflow = "";
6323
+ }
6324
+ return () => {
6325
+ document.body.style.overflow = "";
6326
+ };
6327
+ }, [isMobileFiltersOpen]);
5867
6328
  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);
6329
+ const facetMap = /* @__PURE__ */ new Map();
6330
+ if (facets) {
6331
+ Object.entries(facets).forEach(([field, values]) => {
6332
+ if (!Array.isArray(values)) return;
6333
+ const filteredValues = values.filter(
6334
+ (item) => item.count > 0 || selectedFacetValues.get(field) === item.value
6335
+ );
6336
+ if (filteredValues.length > 0) {
6337
+ facetMap.set(field, filteredValues);
6338
+ }
6339
+ });
6340
+ }
6341
+ selectedFacetValues.forEach((val, field) => {
6342
+ if (!facetMap.has(field)) {
6343
+ facetMap.set(field, [{ value: val, count: 0 }]);
6344
+ } else {
6345
+ const existing = facetMap.get(field);
6346
+ if (!existing.some((item) => item.value === val)) {
6347
+ existing.push({ value: val, count: 0 });
6348
+ }
6349
+ }
6350
+ });
6351
+ return Array.from(facetMap.entries());
5877
6352
  }, [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];
6353
+ const normalizedSortOptions = (0, import_react59.useMemo)(
6354
+ () => (sortOptions ?? []).filter((option) => option?.name && option?.direction).map(normalizeSortOption).filter((option) => option.value),
6355
+ [sortOptions]
6356
+ );
6357
+ const selectedSortOption = (0, import_react59.useMemo)(() => {
6358
+ if (!normalizedSortOptions.length) return null;
6359
+ const trimmedCurrentSort = currentSort.trim().toLowerCase();
6360
+ if (!trimmedCurrentSort) return normalizedSortOptions[0];
6361
+ return normalizedSortOptions.find(
6362
+ (opt) => opt.value.trim().toLowerCase() === trimmedCurrentSort
6363
+ ) || normalizedSortOptions[0];
6364
+ }, [normalizedSortOptions, currentSort]);
5880
6365
  const selectedSortLabel = selectedSortOption?.label || "";
5881
6366
  const getQueryUrl = (0, import_react59.useCallback)(
5882
6367
  (updates) => {
@@ -5891,9 +6376,7 @@ var init_DataBindingControls = __esm({
5891
6376
  });
5892
6377
  params.delete("$skip");
5893
6378
  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("&");
6379
+ const queryString = Array.from(params.entries()).map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join("&");
5897
6380
  return queryString ? `${path}?${queryString}` : path;
5898
6381
  },
5899
6382
  [path, query, searchParams]
@@ -5902,7 +6385,7 @@ var init_DataBindingControls = __esm({
5902
6385
  (url) => {
5903
6386
  if (typeof window !== "undefined") {
5904
6387
  const targetUrl = new URL(url, window.location.origin);
5905
- if (targetUrl.pathname === window.location.pathname && targetUrl.search === window.location.search) {
6388
+ if (targetUrl.pathname === window.location.pathname && decodeURIComponent(targetUrl.search) === decodeURIComponent(window.location.search)) {
5906
6389
  return;
5907
6390
  }
5908
6391
  }
@@ -5910,6 +6393,18 @@ var init_DataBindingControls = __esm({
5910
6393
  },
5911
6394
  [router]
5912
6395
  );
6396
+ const handleSelectSort = (0, import_react59.useCallback)(
6397
+ (sortValue) => {
6398
+ setIsSortOpen(false);
6399
+ navigateWithoutReload(
6400
+ getQueryUrl({
6401
+ $orderby: sortValue || void 0,
6402
+ orderBy: void 0
6403
+ })
6404
+ );
6405
+ },
6406
+ [getQueryUrl, navigateWithoutReload]
6407
+ );
5913
6408
  const getFacetUrl = (field, value) => {
5914
6409
  const updatedSelections = new Map(selectedFacetValues);
5915
6410
  if (value) {
@@ -5961,15 +6456,15 @@ var init_DataBindingControls = __esm({
5961
6456
  );
5962
6457
  return { isSuccessful: true };
5963
6458
  }, [getQueryUrl, navigateWithoutReload]);
5964
- const hasFacetControls = showFacets && activeFacets.length > 0;
5965
- const hasSortControls = showSortOptions && normalizedSortOptions.length > 0;
6459
+ const hasFacetControls = Boolean(showFacets && (activeFacets.length > 0 || selectedFacetValues.size > 0));
6460
+ const hasSortControls = Boolean(showSortOptions && normalizedSortOptions.length > 0);
5966
6461
  const hasActiveFiltersOrSort = Boolean(
5967
6462
  currentFilter.trim() || currentSort.trim()
5968
6463
  );
5969
6464
  const selectedFacetCount = selectedFacetValues.size;
5970
6465
  const shouldShowToolbarClearAll = hasActiveFiltersOrSort && !hasFacetControls;
5971
- const shouldShowToolbar = mode === "toolbar" && (showSearchBar || hasSortControls || shouldShowToolbarClearAll);
5972
- const shouldShowFacets = mode === "facets" && hasFacetControls;
6466
+ const shouldShowToolbar = mode === "toolbar" && (showSearchBar || hasSortControls || showFacets || shouldShowToolbarClearAll);
6467
+ const shouldShowFacets = mode === "facets" && (hasFacetControls || showFacets && activeFacets.length > 0);
5973
6468
  if (!shouldShowToolbar && !shouldShowFacets) {
5974
6469
  return null;
5975
6470
  }
@@ -5981,13 +6476,13 @@ var init_DataBindingControls = __esm({
5981
6476
  type: "button",
5982
6477
  onClick: () => navigateWithoutReload(getFacetUrl(field, facet.value)),
5983
6478
  "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"}`,
6479
+ 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
6480
  children: [
5986
6481
  /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex min-w-0 items-center gap-2.5", children: [
5987
6482
  /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
5988
6483
  "span",
5989
6484
  {
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"}`,
6485
+ 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
6486
  children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CheckIcon, { className: "h-3 w-3" })
5992
6487
  }
5993
6488
  ),
@@ -6008,100 +6503,338 @@ var init_DataBindingControls = __esm({
6008
6503
  return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6009
6504
  "div",
6010
6505
  {
6011
- className: mode === "toolbar" ? "my-6" : "flex flex-col rounded-md border bg-default p-3.5 shadow-sm",
6506
+ className: mode === "toolbar" ? "my-4 sm:my-6" : "flex flex-col rounded-md border border-neutral-soft bg-default p-4 shadow-sm",
6012
6507
  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,
6508
+ shouldShowToolbar && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex flex-col gap-3", children: [
6509
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "hidden lg:flex lg:items-center lg:justify-between lg:gap-4", children: [
6510
+ showSearchBar && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6511
+ "form",
6512
+ {
6513
+ role: "search",
6514
+ className: "flex w-full items-center gap-2 md:min-w-0 md:flex-1",
6515
+ onSubmit: (event) => {
6516
+ event.preventDefault();
6517
+ void handleSearch();
6518
+ },
6519
+ children: [
6520
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "relative min-w-0 flex-1", children: [
6521
+ /* @__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" }),
6522
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6523
+ "input",
6524
+ {
6525
+ type: "text",
6526
+ name: "searchText",
6527
+ value: searchText,
6528
+ onChange: (e) => setSearchText(e.target.value),
6529
+ placeholder: "Search discussions, topics, or keywords...",
6530
+ 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"
6531
+ }
6532
+ )
6533
+ ] }),
6534
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6535
+ Button_default,
6028
6536
  {
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"
6537
+ ButtonType: "Primary" /* Solid */,
6538
+ onClick: handleSearch,
6539
+ className: "!h-10 !rounded-md !px-5 !py-0 flex items-center justify-center gap-1.5 shrink-0",
6540
+ children: [
6541
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(SearchIcon, { className: "h-4 w-4" }),
6542
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { children: "Search" })
6543
+ ]
6037
6544
  }
6038
6545
  )
6039
- ] }),
6040
- /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6041
- Button_default,
6546
+ ]
6547
+ }
6548
+ ),
6549
+ hasSortControls && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "relative shrink-0", ref: desktopSortDropdownRef, children: [
6550
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6551
+ "button",
6552
+ {
6553
+ type: "button",
6554
+ onClick: () => setIsSortOpen((prev) => !prev),
6555
+ "aria-expanded": isSortOpen,
6556
+ 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",
6557
+ children: [
6558
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { className: "whitespace-nowrap", children: [
6559
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "opacity-70", children: "Sort by: " }),
6560
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "font-semibold", children: selectedSortLabel })
6561
+ ] }),
6562
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6563
+ ChevronDownIcon,
6564
+ {
6565
+ className: `h-4 w-4 shrink-0 transition-transform duration-200 ${isSortOpen ? "rotate-180" : ""}`
6566
+ }
6567
+ )
6568
+ ]
6569
+ }
6570
+ ),
6571
+ 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) => {
6572
+ const isSelected = selectedSortOption?.value === option.value;
6573
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6574
+ "button",
6042
6575
  {
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",
6576
+ type: "button",
6577
+ onClick: () => handleSelectSort(option.value),
6578
+ 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
6579
  children: [
6047
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(SearchIcon, { className: "h-4 w-4" }),
6048
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { children: "Search" })
6580
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "whitespace-nowrap", children: option.label }),
6581
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CheckIcon, { className: "h-4 w-4 shrink-0" })
6049
6582
  ]
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",
6583
+ },
6584
+ option.value
6585
+ );
6586
+ }) })
6587
+ ] })
6588
+ ] }),
6589
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex flex-col gap-2.5 lg:hidden", children: [
6590
+ showSearchBar && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6591
+ "form",
6058
6592
  {
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",
6593
+ role: "search",
6594
+ className: "relative w-full",
6595
+ onSubmit: (event) => {
6596
+ event.preventDefault();
6597
+ void handleSearch();
6598
+ },
6063
6599
  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
- ] }),
6600
+ /* @__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
6601
  /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6069
- ChevronDownIcon,
6602
+ "input",
6070
6603
  {
6071
- className: `h-4 w-4 shrink-0 transition-transform duration-200 ${isSortOpen ? "rotate-180" : ""}`
6604
+ type: "text",
6605
+ name: "searchTextMobile",
6606
+ value: searchText,
6607
+ onChange: (e) => setSearchText(e.target.value),
6608
+ placeholder: "Search jobs, skills, or keywords...",
6609
+ 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
6610
  }
6073
6611
  )
6074
6612
  ]
6075
6613
  }
6076
6614
  ),
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)(
6615
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center justify-between gap-2.5 pt-0.5", children: [
6616
+ showFacets && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6080
6617
  "button",
6081
6618
  {
6082
6619
  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"}`,
6620
+ onClick: () => setIsMobileFiltersOpen(true),
6621
+ 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",
6622
+ children: [
6623
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(FilterSlidersIcon, { className: "h-4 w-4" }),
6624
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { children: [
6625
+ "Filters",
6626
+ selectedFacetCount > 0 ? ` (${selectedFacetCount})` : ""
6627
+ ] }),
6628
+ selectedFacetCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { className: "relative flex h-2 w-2", children: [
6629
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "animate-ping absolute inline-flex h-full w-full rounded-full bg-primary-base opacity-75" }),
6630
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "relative inline-flex rounded-full h-2 w-2 bg-primary-base" })
6631
+ ] })
6632
+ ]
6633
+ }
6634
+ ),
6635
+ hasSortControls && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "relative shrink-0 ml-auto", ref: mobileSortDropdownRef, children: [
6636
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6637
+ "button",
6638
+ {
6639
+ type: "button",
6640
+ onClick: () => setIsSortOpen((prev) => !prev),
6641
+ "aria-expanded": isSortOpen,
6642
+ 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",
6643
+ children: [
6644
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "whitespace-nowrap font-medium", children: selectedSortLabel }),
6645
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6646
+ ChevronDownIcon,
6647
+ {
6648
+ className: `h-4 w-4 shrink-0 transition-transform duration-200 ${isSortOpen ? "rotate-180" : ""}`
6649
+ }
6650
+ )
6651
+ ]
6652
+ }
6653
+ ),
6654
+ 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) => {
6655
+ const isSelected = selectedSortOption?.value === option.value;
6656
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6657
+ "button",
6658
+ {
6659
+ type: "button",
6660
+ onClick: () => handleSelectSort(option.value),
6661
+ 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"}`,
6662
+ children: [
6663
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "whitespace-nowrap", children: option.label }),
6664
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CheckIcon, { className: "h-4 w-4 shrink-0" })
6665
+ ]
6666
+ },
6667
+ option.value
6668
+ );
6669
+ }) })
6670
+ ] })
6671
+ ] }),
6672
+ selectedFacetCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex flex-wrap items-center gap-1.5 pt-1", children: [
6673
+ Array.from(selectedFacetValues.entries()).map(([field, value]) => /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6674
+ "button",
6675
+ {
6676
+ type: "button",
6677
+ onClick: () => clearFacetField(field),
6678
+ 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",
6679
+ title: `Remove filter: ${value}`,
6093
6680
  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" })
6681
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "font-medium truncate max-w-[140px]", children: value }),
6682
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CloseIcon, { className: "h-3 w-3 shrink-0 opacity-60 group-hover:opacity-100" })
6096
6683
  ]
6097
6684
  },
6098
- option.value
6099
- );
6100
- }) })
6685
+ `mobile-chip-${field}`
6686
+ )),
6687
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6688
+ "button",
6689
+ {
6690
+ type: "button",
6691
+ onClick: () => void handleClearAll(),
6692
+ 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",
6693
+ children: "Clear all"
6694
+ }
6695
+ )
6696
+ ] })
6697
+ ] }),
6698
+ isMobileFiltersOpen && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "fixed inset-0 z-50 flex flex-col justify-end lg:hidden", children: [
6699
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6700
+ "div",
6701
+ {
6702
+ className: "fixed inset-0 bg-neutral-stronger/60 backdrop-blur-xs transition-opacity duration-300",
6703
+ onClick: () => setIsMobileFiltersOpen(false),
6704
+ "aria-hidden": "true"
6705
+ }
6706
+ ),
6707
+ /* @__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: [
6708
+ /* @__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" }) }),
6709
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center justify-between px-5 py-3 border-b border-neutral-soft", children: [
6710
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("h2", { className: "text-lg font-bold tracking-tight", children: "Filters" }),
6711
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center gap-3", children: [
6712
+ selectedFacetCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6713
+ "button",
6714
+ {
6715
+ type: "button",
6716
+ onClick: () => void handleClearAll(),
6717
+ className: "text-xs font-semibold cursor-pointer underline underline-offset-2 hover:opacity-80",
6718
+ children: "Clear all"
6719
+ }
6720
+ ),
6721
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6722
+ "button",
6723
+ {
6724
+ type: "button",
6725
+ onClick: () => setIsMobileFiltersOpen(false),
6726
+ className: "p-1 rounded-full hover:bg-neutral-weak transition-colors cursor-pointer",
6727
+ "aria-label": "Close filters",
6728
+ children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CloseIcon, { className: "h-5 w-5 opacity-70" })
6729
+ }
6730
+ )
6731
+ ] })
6732
+ ] }),
6733
+ /* @__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]) => {
6734
+ const isOpen = !collapsedCategories[field];
6735
+ const selectedValue = selectedFacetValues.get(field);
6736
+ const categorySearch = facetCategorySearch[field]?.toLowerCase() || "";
6737
+ const filteredValues = categorySearch ? values.filter((v) => v.value.toLowerCase().includes(categorySearch)) : values;
6738
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "pt-3 first:pt-0", children: [
6739
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6740
+ "button",
6741
+ {
6742
+ type: "button",
6743
+ onClick: () => toggleCategory(field),
6744
+ className: "flex w-full cursor-pointer items-center justify-between rounded-md py-2 text-left transition-colors",
6745
+ children: [
6746
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center gap-2.5", children: [
6747
+ /* @__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) }),
6748
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "font-semibold text-sm", children: humanize(field) })
6749
+ ] }),
6750
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center gap-2", children: [
6751
+ 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" }),
6752
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6753
+ ChevronDownIcon,
6754
+ {
6755
+ className: `h-4 w-4 transition-transform duration-200 ${isOpen ? "rotate-180" : ""}`
6756
+ }
6757
+ )
6758
+ ] })
6759
+ ]
6760
+ }
6761
+ ),
6762
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "pt-2 pb-1 pl-1 pr-1 space-y-1.5", children: [
6763
+ values.length > 5 && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "relative mb-2", children: [
6764
+ /* @__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" }),
6765
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6766
+ "input",
6767
+ {
6768
+ type: "text",
6769
+ value: facetCategorySearch[field] || "",
6770
+ onChange: (e) => setFacetCategorySearch((prev) => ({
6771
+ ...prev,
6772
+ [field]: e.target.value
6773
+ })),
6774
+ placeholder: `Search ${humanize(field).toLowerCase()}...`,
6775
+ 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"
6776
+ }
6777
+ )
6778
+ ] }),
6779
+ 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) => {
6780
+ const isChecked = selectedValue === facet.value;
6781
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6782
+ "button",
6783
+ {
6784
+ type: "button",
6785
+ onClick: () => navigateWithoutReload(
6786
+ getFacetUrl(field, facet.value)
6787
+ ),
6788
+ "aria-pressed": isChecked,
6789
+ 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"}`,
6790
+ children: [
6791
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex min-w-0 items-center gap-3", children: [
6792
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6793
+ "span",
6794
+ {
6795
+ 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"}`,
6796
+ children: isChecked && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(CheckIcon, { className: "h-3.5 w-3.5" })
6797
+ }
6798
+ ),
6799
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "leading-snug break-words", children: facet.value })
6800
+ ] }),
6801
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "shrink-0 text-xs opacity-60 ml-2", children: facet.count })
6802
+ ]
6803
+ },
6804
+ `drawer-${field}-${facet.value}`
6805
+ );
6806
+ })
6807
+ ] })
6808
+ ] }, `drawer-cat-${field}`);
6809
+ }) }),
6810
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center gap-3 border-t border-neutral-soft bg-default p-4", children: [
6811
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6812
+ "button",
6813
+ {
6814
+ type: "button",
6815
+ onClick: () => setIsMobileFiltersOpen(false),
6816
+ 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",
6817
+ children: "Close"
6818
+ }
6819
+ ),
6820
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
6821
+ "button",
6822
+ {
6823
+ type: "button",
6824
+ onClick: () => setIsMobileFiltersOpen(false),
6825
+ 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",
6826
+ children: [
6827
+ "Apply Filters",
6828
+ selectedFacetCount > 0 ? ` (${selectedFacetCount})` : ""
6829
+ ]
6830
+ }
6831
+ )
6832
+ ] })
6833
+ ] })
6101
6834
  ] })
6102
6835
  ] }),
6103
6836
  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: [
6837
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center justify-between border-b border-neutral-soft pb-3", children: [
6105
6838
  /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center gap-2", children: [
6106
6839
  /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(FilterSlidersIcon, { className: "h-4 w-4" }),
6107
6840
  /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("h2", { className: "text-base font-semibold tracking-tight", children: "Filters" }),
@@ -6121,12 +6854,12 @@ var init_DataBindingControls = __esm({
6121
6854
  }
6122
6855
  )
6123
6856
  ] }),
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)(
6857
+ 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
6858
  "button",
6126
6859
  {
6127
6860
  type: "button",
6128
6861
  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",
6862
+ 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
6863
  title: `Remove filter: ${value}`,
6131
6864
  children: [
6132
6865
  /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "font-medium truncate max-w-[150px]", children: value }),
@@ -6153,7 +6886,10 @@ var init_DataBindingControls = __esm({
6153
6886
  onClick: () => toggleCategory(field),
6154
6887
  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
6888
  children: [
6156
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { children: humanize(field) }),
6889
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "flex items-center gap-2", children: [
6890
+ /* @__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) }),
6891
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { children: humanize(field) })
6892
+ ] }),
6157
6893
  /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
6158
6894
  ChevronDownIcon,
6159
6895
  {
@@ -6578,6 +7314,7 @@ var init_Slider = __esm({
6578
7314
  var index_exports = {};
6579
7315
  __export(index_exports, {
6580
7316
  Button: () => Button_default,
7317
+ COUNTRY_CODES: () => COUNTRY_CODES,
6581
7318
  CheckboxInput: () => CheckboxInput_default,
6582
7319
  ColorInput: () => ColorInput_default,
6583
7320
  DataFormRenderer: () => DataFormRenderer_default,
@@ -6604,7 +7341,13 @@ __export(index_exports, {
6604
7341
  Toast: () => Toast_default,
6605
7342
  ToastService: () => ToastService_default,
6606
7343
  ViewControl: () => ViewControl_default,
6607
- ViewControlTypes: () => ViewControlTypes_default
7344
+ ViewControlTypes: () => ViewControlTypes_default,
7345
+ findCountryByDialCode: () => findCountryByDialCode,
7346
+ findCountryByIso2: () => findCountryByIso2,
7347
+ getCountryFlag: () => getCountryFlag,
7348
+ getDialCodeByCountryCode: () => getDialCodeByCountryCode,
7349
+ resolveCountry: () => resolveCountry,
7350
+ splitPhoneNumber: () => splitPhoneNumber
6608
7351
  });
6609
7352
  module.exports = __toCommonJS(index_exports);
6610
7353
 
@@ -7023,8 +7766,14 @@ var ViewControl = (props) => {
7023
7766
  };
7024
7767
  var ViewControl_default = ViewControl;
7025
7768
 
7769
+ // src/components/controls/edit/InputControl.tsx
7770
+ var import_dynamic7 = __toESM(require("next/dynamic"));
7771
+ var InputControl2 = (0, import_dynamic7.default)(() => Promise.resolve().then(() => (init_InputControlClient(), InputControlClient_exports)), {
7772
+ ssr: false
7773
+ });
7774
+ var InputControl_default = InputControl2;
7775
+
7026
7776
  // src/index.ts
7027
- init_InputControl();
7028
7777
  init_InputControlType();
7029
7778
 
7030
7779
  // src/components/pageRenderingEngine/PageBodyRenderer.tsx
@@ -9541,7 +10290,7 @@ var DivContainer = async (props) => {
9541
10290
  renderedContainer,
9542
10291
  paginationControl
9543
10292
  ] }),
9544
- dataBindingProperties?.showFacets && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("aside", { children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
10293
+ dataBindingProperties?.showFacets && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("aside", { className: "hidden lg:block", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
9545
10294
  DataBindingControls2,
9546
10295
  {
9547
10296
  mode: "facets",
@@ -9761,6 +10510,7 @@ init_Button();
9761
10510
  init_MoneyInput();
9762
10511
  init_PercentageInput();
9763
10512
  init_PhoneInput();
10513
+ init_CountryCodes();
9764
10514
  init_NumberInput();
9765
10515
  init_CheckboxInput();
9766
10516
  init_OtpInput();
@@ -9815,7 +10565,6 @@ var NavigationTabsV2_default = NavigationTabsV2;
9815
10565
 
9816
10566
  // src/components/dataForm/DataList.tsx
9817
10567
  var import_react67 = __toESM(require("react"));
9818
- init_InputControl();
9819
10568
  var import_navigation3 = require("next/navigation");
9820
10569
 
9821
10570
  // src/components/dataForm/NoContentView.tsx
@@ -10621,14 +11370,12 @@ init_InputControlType();
10621
11370
 
10622
11371
  // src/components/dataForm/DataForm.tsx
10623
11372
  var import_react70 = __toESM(require("react"));
10624
- init_InputControl();
10625
11373
  init_Icon();
10626
11374
  init_Button();
10627
11375
  init_StyleTypes();
10628
11376
 
10629
11377
  // src/components/dataForm/DataFormChildSection.tsx
10630
11378
  var import_react69 = __toESM(require("react"));
10631
- init_InputControl();
10632
11379
 
10633
11380
  // src/components/dataForm/StyleTypes.tsx
10634
11381
  var StyleTypes2 = /* @__PURE__ */ ((StyleTypes3) => {
@@ -11224,6 +11971,7 @@ var DataFormRenderer_default = DataFormRenderer;
11224
11971
  // Annotate the CommonJS export names for ESM import in node:
11225
11972
  0 && (module.exports = {
11226
11973
  Button,
11974
+ COUNTRY_CODES,
11227
11975
  CheckboxInput,
11228
11976
  ColorInput,
11229
11977
  DataFormRenderer,
@@ -11250,5 +11998,11 @@ var DataFormRenderer_default = DataFormRenderer;
11250
11998
  Toast,
11251
11999
  ToastService,
11252
12000
  ViewControl,
11253
- ViewControlTypes
12001
+ ViewControlTypes,
12002
+ findCountryByDialCode,
12003
+ findCountryByIso2,
12004
+ getCountryFlag,
12005
+ getDialCodeByCountryCode,
12006
+ resolveCountry,
12007
+ splitPhoneNumber
11254
12008
  });